Documentazione Shadowsocks

AEAD

AEAD sta per crittografia autenticata con dati associati. I cifrari AEAD forniscono contemporaneamente riservatezza, integrità e autenticità. Hanno prestazioni eccellenti ed efficienza energetica su hardware moderno. Gli utenti dovrebbero utilizzare i cifrari AEAD quando possibile.

Si consigliano le seguenti crittografie AEAD. Le implementazioni conformi di Shadowsocks devono supportare AEAD_CHACHA20_POLY1305. Le implementazioni per dispositivi con accelerazione AES hardware dovrebbero implementare anche AEAD_AES_128_GCM e AEAD_AES_256_GCM.

 

 

 

Nome

Alias

Dimensione chiave

Dimensione del sale

Dimensione nonce

Tag Taglia

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

Si prega di fare riferimento a Registro IANA AEAD per lo schema di denominazione e le specifiche.

Derivazione chiave

La chiave principale può essere immessa direttamente dall'utente o generata da una password.

HKDF_SHA1 è una funzione che prende una chiave segreta, un sale non segreto, una stringa di informazioni e produce una sottochiave crittograficamente forte anche se la chiave segreta di input è debole.

HKDF_SHA1(key, salt, info) => sottochiave

La stringa di informazioni associa la sottochiave generata a un contesto dell'applicazione specifico. Nel nostro caso deve essere la stringa “ss-subkey” senza virgolette.

Deriviamo una sottochiave per sessione da una chiave master pre-condivisa utilizzando HKDF_SHA1. Il sale deve essere unico per l'intera durata della chiave master precondivisa.

Crittografia/decrittografia autenticata

AE_encrypt è una funzione che accetta una chiave segreta, un nonce non segreto, un messaggio e produce un testo cifrato e un tag di autenticazione. Nonce deve essere univoco per una data chiave in ogni chiamata.

AE_encrypt(chiave, nonce, messaggio) => (testo cifrato, tag)

 

AE_decrypt è una funzione che prende una chiave segreta, un nonce non segreto, un testo cifrato, un tag di autenticazione e produce un messaggio originale. Se uno qualsiasi degli input viene manomesso, la decrittazione fallirà.

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

TCP

Un flusso TCP crittografato AEAD inizia con un salt generato casualmente per derivare la sottochiave per sessione, seguita da un numero qualsiasi di blocchi crittografati. Ogni pezzo ha la seguente struttura:

[lunghezza payload crittografato][tag lunghezza][payload crittografato][tag payload]

 

La lunghezza del payload è un numero intero senza segno big-endian a 2 byte limitato a 0x3FFF. I due bit superiori sono riservati e devono essere impostati a zero. Il payload è quindi limitato a 16*1024 – 1 byte.

La prima operazione di crittografia/decrittografia AEAD utilizza un nonce di conteggio a partire da 0. Dopo ogni operazione di crittografia/decrittografia, il nonce viene incrementato di uno come se fosse un numero intero little-endian senza segno. Si noti che ogni blocco TCP comporta due operazioni di crittografia/decrittografia AEAD: una per la lunghezza del payload e una per il payload. Pertanto ogni blocco aumenta il nonce due volte.

TCP

Un flusso TCP crittografato AEAD inizia con un salt generato casualmente per derivare la sottochiave per sessione, seguita da un numero qualsiasi di blocchi crittografati. Ogni pezzo ha la seguente struttura:

[lunghezza payload crittografato][tag lunghezza][payload crittografato][tag payload]

 

La lunghezza del payload è un numero intero senza segno big-endian a 2 byte limitato a 0x3FFF. I due bit superiori sono riservati e devono essere impostati a zero. Il payload è quindi limitato a 16*1024 – 1 byte.

La prima operazione di crittografia/decrittografia AEAD utilizza un nonce di conteggio a partire da 0. Dopo ogni operazione di crittografia/decrittografia, il nonce viene incrementato di uno come se fosse un numero intero little-endian senza segno. Si noti che ogni blocco TCP comporta due operazioni di crittografia/decrittografia AEAD: una per la lunghezza del payload e una per il payload. Pertanto ogni blocco aumenta il nonce due volte.

Inizia la tua prova gratuita di 5 giorni