Dokumentace Shadowsocks

AEAD

AEAD je zkratka pro Authenticated Encryption with Associated Data. Šifry AEAD současně poskytují důvěrnost, integritu a autenticitu. Mají vynikající výkon a energetickou účinnost na moderním hardwaru. Uživatelé by měli používat šifry AEAD, kdykoli je to možné.

Doporučují se následující šifry AEAD. Vyhovující implementace Shadowsocks musí podporovat AEAD_CHACHA20_POLY1305. Implementace pro zařízení s hardwarovou akcelerací AES by také měly implementovat AEAD_AES_128_GCM a AEAD_AES_256_GCM.

 

 

 

Příjmení

Přezdívka

Velikost klíče

Velikost soli

Velikost nonce

Velikost 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

Obraťte se prosím na Registr IANA AEAD pro schéma pojmenování a specifikaci.

Odvození klíče

Hlavní klíč lze zadat přímo od uživatele nebo vygenerovat z hesla.

HKDF_SHA1 je funkce, která přebírá tajný klíč, netajnou sůl, informační řetězec a vytváří podklíč, který je kryptograficky silný, i když je vstupní tajný klíč slabý.

HKDF_SHA1(klíč, sůl, info) => podklíč

Informační řetězec váže vygenerovaný podklíč ke konkrétnímu kontextu aplikace. V našem případě to musí být řetězec „ss-subkey“ bez uvozovek.

Odvozujeme podklíč pro relaci z předem sdíleného hlavního klíče pomocí HKDF_SHA1. Sůl musí být jedinečná po celou dobu životnosti předem sdíleného hlavního klíče.

Ověřené šifrování/dešifrování

AE_encrypt je funkce, která přebírá tajný klíč, netajný nonce, zprávu a vytváří šifrovaný text a ověřovací značku. Nonce musí být jedinečné pro daný klíč v každém vyvolání.

AE_encrypt(klíč, nonce, zpráva) => (šifrovaný text, značka)

 

AE_decrypt je funkce, která přebírá tajný klíč, netajný nonce, šifrový text, ověřovací značku a vytváří originální zprávu. Pokud je některý ze vstupů zmanipulován, dešifrování se nezdaří.

AE_decrypt(klíč, nonce, šifrový text, značka) => zpráva

TCP

Tok TCP šifrovaný AEAD začíná náhodně vygenerovanou solí pro odvození podklíče pro relaci, po níž následuje libovolný počet zašifrovaných bloků. Každý blok má následující strukturu:

[šifrovaná délka užitečného obsahu][délka tagu][šifrovaná užitečná zátěž][značka užitečného zatížení]

 

Délka užitečného zatížení je 2bajtové celé číslo bez znaménka big-endian omezené na 0x3FFF. Vyšší dva bity jsou rezervovány a musí být nastaveny na nulu. Payload je tedy omezen na 16*1024 – 1 byte.

První operace šifrování/dešifrování AEAD používá počítání nonce začínající od 0. Po každé operaci šifrování/dešifrování se nonce zvýší o jedničku, jako by to bylo celé číslo bez znaménka. Všimněte si, že každý blok TCP zahrnuje dvě šifrovací/dešifrovací operace AEAD: jednu pro délku datové zátěže a jednu pro datovou zátěž. Proto každý díl zvyšuje nejednou dvakrát.

TCP

Tok TCP šifrovaný AEAD začíná náhodně vygenerovanou solí pro odvození podklíče pro relaci, po níž následuje libovolný počet zašifrovaných bloků. Každý blok má následující strukturu:

[šifrovaná délka užitečného obsahu][délka tagu][šifrovaná užitečná zátěž][značka užitečného zatížení]

 

Délka užitečného zatížení je 2bajtové celé číslo bez znaménka big-endian omezené na 0x3FFF. Vyšší dva bity jsou rezervovány a musí být nastaveny na nulu. Payload je tedy omezen na 16*1024 – 1 byte.

První operace šifrování/dešifrování AEAD používá počítání nonce začínající od 0. Po každé operaci šifrování/dešifrování se nonce zvýší o jedničku, jako by to bylo celé číslo bez znaménka. Všimněte si, že každý blok TCP zahrnuje dvě šifrovací/dešifrovací operace AEAD: jednu pro délku datové zátěže a jednu pro datovou zátěž. Proto každý díl zvyšuje nejednou dvakrát.

Začněte svou 5denní bezplatnou zkušební verzi