Dokumentácia Shadowsocks

AEAD

AEAD znamená Authenticated Encryption with Associated Data. Šifry AEAD súčasne poskytujú dôvernosť, integritu a autentickosť. Majú vynikajúci výkon a energetickú účinnosť na modernom hardvéri. Používatelia by mali používať šifry AEAD vždy, keď je to možné.

Odporúčajú sa nasledujúce šifry AEAD. Vyhovujúce implementácie Shadowsocks musia podporovať AEAD_CHACHA20_POLY1305. Implementácie pre zariadenia s hardvérovou akceleráciou AES by mali implementovať aj AEAD_AES_128_GCM a AEAD_AES_256_GCM.

 

 

 

Meno

Prezývka

Veľkosť kľúča

Veľkosť soli

Veľkosť nonce

Veľkosť značky

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

Pozrite sa prosím register IANA AEAD pre schému pomenovania a špecifikáciu.

Odvodenie kľúča

Hlavný kľúč možno zadať priamo od používateľa alebo vygenerovať z hesla.

HKDF_SHA1 je funkcia, ktorá berie tajný kľúč, netajnú soľ, informačný reťazec a vytvára podkľúč, ktorý je kryptograficky silný, aj keď je vstupný tajný kľúč slabý.

HKDF_SHA1(kľúč, soľ, info) => podkľúč

Informačný reťazec spája vygenerovaný podkľúč s konkrétnym kontextom aplikácie. V našom prípade to musí byť reťazec „ss-subkey“ bez úvodzoviek.

Podkľúč pre reláciu odvodíme z vopred zdieľaného hlavného kľúča pomocou HKDF_SHA1. Soľ musí byť jedinečná počas celej životnosti vopred zdieľaného hlavného kľúča.

Overené šifrovanie/dešifrovanie

AE_encrypt je funkcia, ktorá prevezme tajný kľúč, neutajenú informáciu, správu a vytvorí šifrový text a autentifikačnú značku. Nonce musí byť jedinečné pre daný kľúč v každom vyvolaní.

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

 

AE_decrypt je funkcia, ktorá prevezme tajný kľúč, netajný nonce, šifrový text, autentifikačnú značku a vytvorí originálnu správu. Ak sa s ktorýmkoľvek vstupom manipuluje, dešifrovanie zlyhá.

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

TCP

Tok TCP šifrovaný AEAD začína náhodne vygenerovanou soľou na odvodenie podkľúča pre reláciu, po ktorom nasleduje ľubovoľný počet zašifrovaných častí. Každý kus má nasledujúcu štruktúru:

[šifrovaná dĺžka užitočného zaťaženia][značka dĺžky][šifrovaná užitočná časť][značka užitočného zaťaženia]

 

Dĺžka užitočného zaťaženia je 2-bajtové celé číslo bez znamienka so znamienkom obmedzené na 0x3FFF. Vyššie dva bity sú rezervované a musia byť nastavené na nulu. Užitočné zaťaženie je preto obmedzené na 16*1024 – 1 bajt.

Prvá operácia šifrovania/dešifrovania AEAD používa počítanie nonce začínajúce od 0. Po každej operácii šifrovania/dešifrovania sa nonce zvýši o jednotku, ako keby to bolo celé číslo bez znamienka. Všimnite si, že každý kus TCP zahŕňa dve operácie šifrovania/dešifrovania AEAD: jednu pre dĺžku užitočného zaťaženia a jednu pre užitočné zaťaženie. Preto každý chunk zväčšuje neraz dvakrát.

TCP

Tok TCP šifrovaný AEAD začína náhodne vygenerovanou soľou na odvodenie podkľúča pre reláciu, po ktorom nasleduje ľubovoľný počet zašifrovaných častí. Každý kus má nasledujúcu štruktúru:

[šifrovaná dĺžka užitočného zaťaženia][značka dĺžky][šifrovaná užitočná časť][značka užitočného zaťaženia]

 

Dĺžka užitočného zaťaženia je 2-bajtové celé číslo bez znamienka so znamienkom obmedzené na 0x3FFF. Vyššie dva bity sú rezervované a musia byť nastavené na nulu. Užitočné zaťaženie je preto obmedzené na 16*1024 – 1 bajt.

Prvá operácia šifrovania/dešifrovania AEAD používa počítanie nonce začínajúce od 0. Po každej operácii šifrovania/dešifrovania sa nonce zvýši o jednotku, ako keby to bolo celé číslo bez znamienka. Všimnite si, že každý kus TCP zahŕňa dve operácie šifrovania/dešifrovania AEAD: jednu pre dĺžku užitočného zaťaženia a jednu pre užitočné zaťaženie. Preto každý chunk zväčšuje neraz dvakrát.

Začnite svoju 5-dňovú bezplatnú skúšobnú verziu