Documentació de Shadowsocks
navegació
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.