Documentazione di Shadowsocks

AEAD

AEAD sta per Criptazione Autentificata cù Dati Associati. I cifri AEAD furnisce simultaneamente cunfidenziale, integrità è autenticità. Hanu un rendimentu eccellente è efficienza energetica nantu à hardware mudernu. L'utilizatori anu da utilizà i cifri AEAD sempre chì hè pussibule.

I seguenti cifri AEAD sò cunsigliati. L'implementazioni Shadowsocks conformi devenu supportà AEAD_CHACHA20_POLY1305. L'implementazioni per i dispositi cù l'accelerazione AES hardware anu ancu implementà AEAD_AES_128_GCM è AEAD_AES_256_GCM.

 

 

 

nomu

Alias

Size Key

Salt Size

Nonce Size

Tag 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

Remplittate Registru IANA AEAD per u schema di nome è specificazione.

Derivazione chjave

A chjave maestra pò esse inserita direttamente da l'utilizatore o generata da una password.

HKDF_SHA1 hè una funzione chì piglia una chjave sicreta, un sali micca sicretu, una stringa d'infurmazioni, è pruduce una subkey chì hè criptograficamente forte ancu s'è a chjave secreta di input hè debule.

HKDF_SHA1(key, sale, info) => subkey

A stringa d'infurmazione unisce a subkey generata à un cuntestu specificu di l'applicazione. In u nostru casu, deve esse a stringa "ss-subkey" senza virgulette.

Derivemu una subkey per sessione da una chjave maestra pre-spartita utilizendu HKDF_SHA1. Salt deve esse unicu per tutta a vita di a chjave maestra pre-spartita.

Criptazione / Decrittografia autenticata

AE_encrypt hè una funzione chì piglia una chjave secreta, una nonce non-secreta, un missaghju, è pruduce ciphertext è un tag d'autentificazione. Nonce deve esse unicu per una chjave data in ogni invucazione.

AE_encrypt(key, nonce, message) => (ciphertext, tag)

 

AE_decrypt hè una funzione chì piglia una chjave secreta, nonce non-secret, ciphertext, un tag d'autentificazione, è pruduce un missaghju originale. Se qualcunu di l'input hè manipulatu, a decryption falla.

AE_decrypt (key, nonce, ciphertext, tag) => missaghju

TCP

Un flussu TCP criptatu AEAD principia cù un sali generatu aleatoriamente per derivà a subkey per sessione, seguita da qualsiasi quantità di pezzi criptati. Ogni pezzu hà a seguente struttura:

[lunghezza di carica criptata][tag di lunghezza] [tag di carica criptata]

 

A lunghezza di u payload hè un interu senza signu big-endian di 2 byte limitatu à 0x3FFF. I dui bits più alti sò riservati è deve esse stabilitu à zero. U payload hè dunque limitatu à 16 * 1024 - 1 bytes.

A prima operazione di criptu / decrypt AEAD usa un nonce di cunti chì partenu da 0. Dopu à ogni operazione di criptu / decrypt, u ​​nonce hè incrementatu da unu cum'è s'ellu era un integer little-endian senza signu. Nota chì ogni pezzu TCP implica duie operazioni di criptografia / decriptazione AEAD: una per a durata di a carica utile, è una per a carica utile. Dunque ogni pezzu aumenta u nonce duie volte.

TCP

Un flussu TCP criptatu AEAD principia cù un sali generatu aleatoriamente per derivà a subkey per sessione, seguita da qualsiasi quantità di pezzi criptati. Ogni pezzu hà a seguente struttura:

[lunghezza di carica criptata][tag di lunghezza] [tag di carica criptata]

 

A lunghezza di u payload hè un interu senza signu big-endian di 2 byte limitatu à 0x3FFF. I dui bits più alti sò riservati è deve esse stabilitu à zero. U payload hè dunque limitatu à 16 * 1024 - 1 bytes.

A prima operazione di criptu / decrypt AEAD usa un nonce di cunti chì partenu da 0. Dopu à ogni operazione di criptu / decrypt, u ​​nonce hè incrementatu da unu cum'è s'ellu era un integer little-endian senza signu. Nota chì ogni pezzu TCP implica duie operazioni di criptografia / decriptazione AEAD: una per a durata di a carica utile, è una per a carica utile. Dunque ogni pezzu aumenta u nonce duie volte.

Cumincià a vostra prova gratuita di 5 ghjorni