Documentação das meias de sombra

AEAD

AEAD significa Criptografia Autenticada com Dados Associados. As cifras AEAD fornecem simultaneamente confidencialidade, integridade e autenticidade. Eles têm excelente desempenho e eficiência de energia em hardware moderno. Os usuários devem usar cifras AEAD sempre que possível.

As seguintes cifras AEAD são recomendadas. As implementações de Shadowsocks em conformidade devem oferecer suporte a AEAD_CHACHA20_POLY1305. As implementações para dispositivos com aceleração AES de hardware também devem implementar AEAD_AES_128_GCM e AEAD_AES_256_GCM.

 

 

 

Nome

aliás

Tamanho da chave

Tamanho do Sal

Tamanho único

Tamanho de 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, consulte Registro IANA AEAD para esquema de nomenclatura e especificação.

Derivação de chave

A chave mestra pode ser inserida diretamente pelo usuário ou gerada a partir de uma senha.

HKDF_SHA1 é uma função que pega uma chave secreta, um sal não secreto, uma string de informações e produz uma subchave que é criptograficamente forte, mesmo que a chave secreta de entrada seja fraca.

HKDF_SHA1(chave, salt, info) => subchave

A cadeia de informações vincula a subchave gerada a um contexto de aplicativo específico. No nosso caso, deve ser a string “ss-subkey” sem aspas.

Derivamos uma subchave por sessão de uma chave mestra pré-compartilhada usando HKDF_SHA1. Salt deve ser exclusivo durante toda a vida útil da chave mestra pré-compartilhada.

Criptografia/Descriptografia Autenticada

AE_encrypt é uma função que pega uma chave secreta, um nonce não secreto, uma mensagem e produz texto cifrado e uma marca de autenticação. O nonce deve ser exclusivo para uma determinada chave em cada chamada.

AE_encrypt(chave, nonce, mensagem) => (texto cifrado, tag)

 

AE_decrypt é uma função que pega uma chave secreta, nonce não secreta, texto cifrado, uma marca de autenticação e produz uma mensagem original. Se alguma entrada for adulterada, a descriptografia falhará.

AE_decrypt(chave, nonce, texto cifrado, tag) => mensagem

TCP

Um fluxo TCP criptografado AEAD começa com um sal gerado aleatoriamente para derivar a subchave por sessão, seguido por qualquer número de blocos criptografados. Cada pedaço tem a seguinte estrutura:

[tamanho da carga criptografada][tag de comprimento][carga criptografada][tag da carga]

 

O comprimento da carga útil é um inteiro não assinado big-endian de 2 bytes limitado a 0x3FFF. Os dois bits mais altos são reservados e devem ser definidos como zero. A carga útil é, portanto, limitada a 16*1024 – 1 bytes.

A primeira operação de criptografia/descriptografia do AEAD usa um nonce de contagem começando em 0. Após cada operação de criptografia/descriptografia, o nonce é incrementado em um, como se fosse um inteiro little-endian sem sinal. Observe que cada fragmento TCP envolve duas operações de criptografia/descriptografia AEAD: uma para o comprimento da carga útil e outra para a carga útil. Portanto, cada pedaço aumenta o nonce duas vezes.

TCP

Um fluxo TCP criptografado AEAD começa com um sal gerado aleatoriamente para derivar a subchave por sessão, seguido por qualquer número de blocos criptografados. Cada pedaço tem a seguinte estrutura:

[tamanho da carga criptografada][tag de comprimento][carga criptografada][tag da carga]

 

O comprimento da carga útil é um inteiro não assinado big-endian de 2 bytes limitado a 0x3FFF. Os dois bits mais altos são reservados e devem ser definidos como zero. A carga útil é, portanto, limitada a 16*1024 – 1 bytes.

A primeira operação de criptografia/descriptografia do AEAD usa um nonce de contagem começando em 0. Após cada operação de criptografia/descriptografia, o nonce é incrementado em um, como se fosse um inteiro little-endian sem sinal. Observe que cada fragmento TCP envolve duas operações de criptografia/descriptografia AEAD: uma para o comprimento da carga útil e outra para a carga útil. Portanto, cada pedaço aumenta o nonce duas vezes.

Comece seu teste gratuito de 5 dias