Documentació de Shadowsocks

AEAD

AEAD significa Authenticated Encryption with Associated Data. Els xifratges AEAD proporcionen simultàniament confidencialitat, integritat i autenticitat. Tenen un rendiment i una eficiència energètica excel·lents en el maquinari modern. Els usuaris haurien d'utilitzar xifratge AEAD sempre que sigui possible.

Es recomanen els següents xifratges AEAD. Les implementacions de Shadowsocks que compleixin han de ser compatibles amb AEAD_CHACHA20_POLY1305. Les implementacions per a dispositius amb acceleració AES de maquinari també haurien d'implementar AEAD_AES_128_GCM i AEAD_AES_256_GCM.

 

 

 

Nom

àlies

Mida de la clau

Mida de la sal

Talla Nonce

Mida d'etiqueta

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 us plau refereix-te a Registre IANA AEAD per a l'esquema de denominació i l'especificació.

Derivació de claus

La clau mestra es pot introduir directament des de l'usuari o generar-se a partir d'una contrasenya.

HKDF_SHA1 és una funció que pren una clau secreta, una sal no secreta, una cadena d'informació i produeix una subclau que és criptogràficament forta encara que la clau secreta d'entrada sigui feble.

HKDF_SHA1(clau, sal, informació) => subclau

La cadena d'informació enllaça la subclau generada a un context d'aplicació específic. En el nostre cas, ha de ser la cadena "ss-subkey" sense cometes.

Obtenim una subclau per sessió d'una clau mestra prèviament compartida mitjançant HKDF_SHA1. La sal ha de ser única durant tota la vida de la clau mestra prèviament compartida.

Xifratge/desxifrat autenticat

AE_encrypt és una funció que pren una clau secreta, un nonce no secret, un missatge i produeix text xifrat i una etiqueta d'autenticació. Nonce ha de ser únic per a una clau determinada en cada invocació.

AE_encrypt(clau, nonce, missatge) => (text xifrat, etiqueta)

 

AE_decrypt és una funció que pren una clau secreta, un nonce no secret, un text xifrat, una etiqueta d'autenticació i produeix un missatge original. Si es manipula alguna de les entrades, el desxifrat fallarà.

AE_decrypt(clau, nonce, text xifrat, etiqueta) => missatge

TCP

Un flux TCP xifrat amb AEAD comença amb una sal generada aleatòriament per derivar la subclau per sessió, seguida de qualsevol nombre de fragments xifrats. Cada tros té la següent estructura:

[longitud de càrrega útil encriptada][etiqueta de longitud][càrrega útil encriptada][etiqueta de càrrega útil]

 

La longitud de la càrrega útil és un nombre enter sense signe big-endian de 2 bytes amb un límit de 0x3FFF. Els dos bits superiors estan reservats i s'han de posar a zero. Per tant, la càrrega útil està limitada a 16 * 1024 - 1 bytes.

La primera operació de xifrat/desxifrat de l'AEAD utilitza un nonce de recompte que comença des de 0. Després de cada operació de xifrat/desxifrat, el nonce s'incrementa en un com si fos un nombre enter de little-endian sense signar. Tingueu en compte que cada fragment de TCP implica dues operacions de xifrat/desxifrat AEAD: una per a la longitud de la càrrega útil i una altra per a la càrrega útil. Per tant, cada tros augmenta el nonce dues vegades.

TCP

Un flux TCP xifrat amb AEAD comença amb una sal generada aleatòriament per derivar la subclau per sessió, seguida de qualsevol nombre de fragments xifrats. Cada tros té la següent estructura:

[longitud de càrrega útil encriptada][etiqueta de longitud][càrrega útil encriptada][etiqueta de càrrega útil]

 

La longitud de la càrrega útil és un nombre enter sense signe big-endian de 2 bytes amb un límit de 0x3FFF. Els dos bits superiors estan reservats i s'han de posar a zero. Per tant, la càrrega útil està limitada a 16 * 1024 - 1 bytes.

La primera operació de xifrat/desxifrat de l'AEAD utilitza un nonce de recompte que comença des de 0. Després de cada operació de xifrat/desxifrat, el nonce s'incrementa en un com si fos un nombre enter de little-endian sense signar. Tingueu en compte que cada fragment de TCP implica dues operacions de xifrat/desxifrat AEAD: una per a la longitud de la càrrega útil i una altra per a la càrrega útil. Per tant, cada tros augmenta el nonce dues vegades.

Comença la teva prova gratuïta de 5 dies