Documentation Shadowsocks

AEAD

AEAD signifie chiffrement authentifié avec données associées. Les chiffrements AEAD assurent simultanément la confidentialité, l'intégrité et l'authenticité. Ils ont d'excellentes performances et une efficacité énergétique sur le matériel moderne. Les utilisateurs doivent utiliser les chiffrements AEAD dans la mesure du possible.

Les chiffrements AEAD suivants sont recommandés. Les implémentations Shadowsocks conformes doivent prendre en charge AEAD_CHACHA20_POLY1305. Les implémentations pour les appareils avec accélération matérielle AES doivent également implémenter AEAD_AES_128_GCM et AEAD_AES_256_GCM.

 

 

 

Nom

Alias

Taille de clé

Taille du sel

Nonce Taille

Taille du tag

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

S'il vous plaît se référer à Registre IANA AEAD pour le schéma de nommage et la spécification.

Dérivation de clé

La clé principale peut être saisie directement par l'utilisateur ou générée à partir d'un mot de passe.

HKDF_SHA1 est une fonction qui prend une clé secrète, un sel non secret, une chaîne d'informations et produit une sous-clé cryptographiquement forte même si la clé secrète d'entrée est faible.

HKDF_SHA1(clé, sel, info) => sous-clé

La chaîne d'informations lie la sous-clé générée à un contexte d'application spécifique. Dans notre cas, il doit s'agir de la chaîne "ss-subkey" sans les guillemets.

Nous dérivons une sous-clé par session à partir d'une clé principale pré-partagée à l'aide de HKDF_SHA1. Salt doit être unique pendant toute la durée de vie de la clé principale pré-partagée.

Chiffrement/déchiffrement authentifié

AE_encrypt est une fonction qui prend une clé secrète, un nonce non secret, un message, et produit un texte chiffré et une balise d'authentification. Nonce doit être unique pour une clé donnée dans chaque invocation.

AE_encrypt(clé, nonce, message) => (texte chiffré, balise)

 

AE_decrypt est une fonction qui prend une clé secrète, un nonce non secret, un texte chiffré, une balise d'authentification et produit un message original. Si l'une des entrées est falsifiée, le décryptage échouera.

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

TCP

Un flux TCP chiffré AEAD commence par un sel généré de manière aléatoire pour dériver la sous-clé par session, suivi d'un nombre quelconque de blocs chiffrés. Chaque morceau a la structure suivante :

[longueur de charge utile cryptée][balise de longueur][charge utile cryptée][balise de charge utile]

 

La longueur de la charge utile est un entier non signé big-endian de 2 octets plafonné à 0x3FFF. Les deux bits supérieurs sont réservés et doivent être mis à zéro. La charge utile est donc limitée à 16*1024 – 1 octets.

La première opération de chiffrement/déchiffrement AEAD utilise un nonce de comptage commençant à 0. Après chaque opération de chiffrement/déchiffrement, le nonce est incrémenté de un comme s'il s'agissait d'un entier petit-boutiste non signé. Notez que chaque bloc TCP implique deux opérations de chiffrement/déchiffrement AEAD : une pour la longueur de la charge utile et une pour la charge utile. Par conséquent, chaque morceau augmente le nonce deux fois.

TCP

Un flux TCP chiffré AEAD commence par un sel généré de manière aléatoire pour dériver la sous-clé par session, suivi d'un nombre quelconque de blocs chiffrés. Chaque morceau a la structure suivante :

[longueur de charge utile cryptée][balise de longueur][charge utile cryptée][balise de charge utile]

 

La longueur de la charge utile est un entier non signé big-endian de 2 octets plafonné à 0x3FFF. Les deux bits supérieurs sont réservés et doivent être mis à zéro. La charge utile est donc limitée à 16*1024 – 1 octets.

La première opération de chiffrement/déchiffrement AEAD utilise un nonce de comptage commençant à 0. Après chaque opération de chiffrement/déchiffrement, le nonce est incrémenté de un comme s'il s'agissait d'un entier petit-boutiste non signé. Notez que chaque bloc TCP implique deux opérations de chiffrement/déchiffrement AEAD : une pour la longueur de la charge utile et une pour la charge utile. Par conséquent, chaque morceau augmente le nonce deux fois.

Commencez votre essai gratuit de 5 jours