Documentación de Shadowsocks

AEAD

AEAD significa Cifrado Autenticado con Datos Asociados. Los cifrados AEAD proporcionan simultáneamente confidencialidad, integridad y autenticidad. Tienen un excelente rendimiento y eficiencia energética en hardware moderno. Los usuarios deben usar cifrados AEAD siempre que sea posible.

Se recomiendan los siguientes cifrados AEAD. Las implementaciones de Shadowsocks compatibles deben ser compatibles con AEAD_CHACHA20_POLY1305. Las implementaciones para dispositivos con aceleración AES de hardware también deben implementar AEAD_AES_128_GCM y AEAD_AES_256_GCM.

 

 

 

Nombre

alias

Tamaño clave

Tamaño de sal

Tamaño inicial

Tamaño de la 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

Por favor, consulta nuestra Registro IANA AEAD para el esquema de nombres y especificaciones.

Derivación clave

La clave maestra puede ser ingresada directamente por el usuario o generada a partir de una contraseña.

HKDF_SHA1 es una función que toma una clave secreta, una sal no secreta, una cadena de información y produce una subclave que es criptográficamente fuerte incluso si la clave secreta de entrada es débil.

HKDF_SHA1(clave, sal, información) => subclave

La cadena de información vincula la subclave generada a un contexto de aplicación específico. En nuestro caso, debe ser la cadena “ss-subkey” sin comillas.

Obtenemos una subclave por sesión a partir de una clave maestra previamente compartida mediante HKDF_SHA1. Salt debe ser único durante toda la vida de la clave maestra precompartida.

Cifrado/descifrado autenticado

AE_encrypt es una función que toma una clave secreta, un nonce no secreto, un mensaje y produce texto cifrado y una etiqueta de autenticación. Nonce debe ser único para una clave dada en cada invocación.

AE_encrypt(clave, nonce, mensaje) => (texto cifrado, etiqueta)

 

AE_decrypt es una función que toma una clave secreta, un nonce no secreto, un texto cifrado, una etiqueta de autenticación y produce un mensaje original. Si alguna de las entradas se manipula, el descifrado fallará.

AE_decrypt(clave, nonce, texto cifrado, etiqueta) => mensaje

TCP

Un flujo de TCP cifrado con AEAD comienza con una sal generada aleatoriamente para derivar la subclave por sesión, seguida de cualquier cantidad de fragmentos cifrados. Cada fragmento tiene la siguiente estructura:

[longitud de la carga útil cifrada][etiqueta de longitud][carga útil cifrada][etiqueta de la carga útil]

 

La longitud de la carga útil es un entero sin signo big-endian de 2 bytes con un tope de 0x3FFF. Los dos bits superiores están reservados y deben establecerse en cero. Por lo tanto, la carga útil está limitada a 16*1024 – 1 byte.

La primera operación de cifrado/descifrado de AEAD utiliza un nonce de conteo a partir de 0. Después de cada operación de cifrado/descifrado, el nonce se incrementa en uno como si fuera un número entero little-endian sin signo. Tenga en cuenta que cada fragmento de TCP implica dos operaciones de cifrado/descifrado AEAD: una para la longitud de la carga útil y otra para la carga útil. Por lo tanto, cada fragmento aumenta el nonce dos veces.

TCP

Un flujo de TCP cifrado con AEAD comienza con una sal generada aleatoriamente para derivar la subclave por sesión, seguida de cualquier cantidad de fragmentos cifrados. Cada fragmento tiene la siguiente estructura:

[longitud de la carga útil cifrada][etiqueta de longitud][carga útil cifrada][etiqueta de la carga útil]

 

La longitud de la carga útil es un entero sin signo big-endian de 2 bytes con un tope de 0x3FFF. Los dos bits superiores están reservados y deben establecerse en cero. Por lo tanto, la carga útil está limitada a 16*1024 – 1 byte.

La primera operación de cifrado/descifrado de AEAD utiliza un nonce de conteo a partir de 0. Después de cada operación de cifrado/descifrado, el nonce se incrementa en uno como si fuera un número entero little-endian sin signo. Tenga en cuenta que cada fragmento de TCP implica dos operaciones de cifrado/descifrado AEAD: una para la longitud de la carga útil y otra para la carga útil. Por lo tanto, cada fragmento aumenta el nonce dos veces.

Comience su prueba gratuita de 5 días