Τεκμηρίωση Shadowsocks

ΑΕΑΔ

ΑΕΑΔ σημαίνει Ελεγμένη κρυπτογράφηση με συσχετισμένα δεδομένα. Οι κρυπτογράφηση AEAD παρέχουν ταυτόχρονα εμπιστευτικότητα, ακεραιότητα και αυθεντικότητα. Έχουν εξαιρετική απόδοση και απόδοση ισχύος σε σύγχρονο υλικό. Οι χρήστες θα πρέπει να χρησιμοποιούν κρυπτογράφηση AEAD όποτε είναι δυνατόν.

Συνιστώνται οι ακόλουθοι κωδικοί AEAD. Οι συμβατές υλοποιήσεις Shadowsocks πρέπει να υποστηρίζουν το AEAD_CHACHA20_POLY1305. Οι υλοποιήσεις για συσκευές με επιτάχυνση AES υλικού θα πρέπει επίσης να εφαρμόζουν τα AEAD_AES_128_GCM και AEAD_AES_256_GCM.

 

 

 

Όνομα

Ψευδώνυμο

Μέγεθος κλειδιού

Μέγεθος αλατιού

Nonce Size

Μέγεθος ετικέτας

AEAD_CHACHA20_POLY1305

Chacha20-IETF-Poly1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-gcm

32

32

12

16

AEAD_AES_128_GCM

aes-128-gcm

16

16

12

16

Παρακαλώ αναφερθείτε σε Μητρώο ΙΑΝΑ ΑΕΑΔ για το σχήμα ονοματοδοσίας και τις προδιαγραφές.

Παραγωγή κλειδιού

Το κύριο κλειδί μπορεί να εισαχθεί απευθείας από τον χρήστη ή να δημιουργηθεί από έναν κωδικό πρόσβασης.

HKDF_SHA1 είναι μια συνάρτηση που λαμβάνει ένα μυστικό κλειδί, ένα μη μυστικό αλάτι, μια συμβολοσειρά πληροφοριών και παράγει ένα δευτερεύον κλειδί που είναι κρυπτογραφικά ισχυρό ακόμα κι αν το μυστικό κλειδί εισόδου είναι αδύναμο.

HKDF_SHA1(κλειδί, αλάτι, πληροφορίες) => δευτερεύον κλειδί

Η συμβολοσειρά πληροφοριών συνδέει το δευτερεύον κλειδί που δημιουργείται σε ένα συγκεκριμένο περιβάλλον εφαρμογής. Στην περίπτωσή μας, πρέπει να είναι η συμβολοσειρά "ss-subkey" χωρίς εισαγωγικά.

Εξάγουμε ένα δευτερεύον κλειδί ανά περίοδο λειτουργίας από ένα προ-κοινόχρηστο κύριο κλειδί χρησιμοποιώντας το HKDF_SHA1. Το αλάτι πρέπει να είναι μοναδικό καθ' όλη τη διάρκεια ζωής του προ-κοινοποιημένου κύριου κλειδιού.

Πιστοποιημένη Κρυπτογράφηση/Αποκρυπτογράφηση

Το AE_encrypt είναι μια συνάρτηση που παίρνει ένα μυστικό κλειδί, ένα μη μυστικό nonce, ένα μήνυμα και παράγει κρυπτογραφημένο κείμενο και μια ετικέτα ελέγχου ταυτότητας. Το Nonce πρέπει να είναι μοναδικό για ένα δεδομένο κλειδί σε κάθε επίκληση.

AE_encrypt(key, nonce, message) => (κρυπτογραφημένο κείμενο, ετικέτα)

 

Το AE_decrypt είναι μια συνάρτηση που λαμβάνει ένα μυστικό κλειδί, μη μυστικό nonce, κρυπτογραφημένο κείμενο, μια ετικέτα ελέγχου ταυτότητας και παράγει ένα πρωτότυπο μήνυμα. Εάν κάποια από τις εισόδους παραποιηθεί, η αποκρυπτογράφηση θα αποτύχει.

AE_decrypt(key, nonce, ciphertext, tag) => μήνυμα

TCP

Μια κρυπτογραφημένη ροή TCP AEAD ξεκινά με ένα τυχαία παραγόμενο αλάτι για την παραγωγή του δευτερεύοντος κλειδιού ανά περίοδο λειτουργίας, ακολουθούμενο από οποιονδήποτε αριθμό κρυπτογραφημένων τμημάτων. Κάθε κομμάτι έχει την ακόλουθη δομή:

[κρυπτογραφημένο μήκος ωφέλιμου φορτίου][ετικέτα μήκους][κρυπτογραφημένο ωφέλιμο φορτίο][ετικέτα ωφέλιμου φορτίου]

 

Το μήκος ωφέλιμου φορτίου είναι ένας ακέραιος ανυπόγραφος big-endian 2 byte με όριο 0x3FFF. Τα δύο υψηλότερα bit είναι δεσμευμένα και πρέπει να μηδενιστούν. Ως εκ τούτου, το ωφέλιμο φορτίο περιορίζεται στα 16*1024 – 1 byte.

Η πρώτη λειτουργία κρυπτογράφησης/αποκρυπτογράφησης AEAD χρησιμοποιεί μια μηδενική μέτρηση που ξεκινά από το 0. Μετά από κάθε λειτουργία κρυπτογράφησης/αποκρυπτογράφησης, το nonce αυξάνεται κατά ένα σαν να ήταν ένας ανυπόγραφος ακέραιος μικρός-ενδιανός. Σημειώστε ότι κάθε κομμάτι TCP περιλαμβάνει δύο λειτουργίες κρυπτογράφησης/αποκρυπτογράφησης AEAD: μία για το μήκος ωφέλιμου φορτίου και μία για το ωφέλιμο φορτίο. Επομένως, κάθε κομμάτι αυξάνει το nonce δύο φορές.

TCP

Μια κρυπτογραφημένη ροή TCP AEAD ξεκινά με ένα τυχαία παραγόμενο αλάτι για την παραγωγή του δευτερεύοντος κλειδιού ανά περίοδο λειτουργίας, ακολουθούμενο από οποιονδήποτε αριθμό κρυπτογραφημένων τμημάτων. Κάθε κομμάτι έχει την ακόλουθη δομή:

[κρυπτογραφημένο μήκος ωφέλιμου φορτίου][ετικέτα μήκους][κρυπτογραφημένο ωφέλιμο φορτίο][ετικέτα ωφέλιμου φορτίου]

 

Το μήκος ωφέλιμου φορτίου είναι ένας ακέραιος ανυπόγραφος big-endian 2 byte με όριο 0x3FFF. Τα δύο υψηλότερα bit είναι δεσμευμένα και πρέπει να μηδενιστούν. Ως εκ τούτου, το ωφέλιμο φορτίο περιορίζεται στα 16*1024 – 1 byte.

Η πρώτη λειτουργία κρυπτογράφησης/αποκρυπτογράφησης AEAD χρησιμοποιεί μια μηδενική μέτρηση που ξεκινά από το 0. Μετά από κάθε λειτουργία κρυπτογράφησης/αποκρυπτογράφησης, το nonce αυξάνεται κατά ένα σαν να ήταν ένας ανυπόγραφος ακέραιος μικρός-ενδιανός. Σημειώστε ότι κάθε κομμάτι TCP περιλαμβάνει δύο λειτουργίες κρυπτογράφησης/αποκρυπτογράφησης AEAD: μία για το μήκος ωφέλιμου φορτίου και μία για το ωφέλιμο φορτίο. Επομένως, κάθε κομμάτι αυξάνει το nonce δύο φορές.

Ξεκινήστε τη δωρεάν δοκιμή 5 ημερών