Dokumentacija Shadowsocks

AEAD

AEAD pomeni overjeno šifriranje s povezanimi podatki. Šifre AEAD hkrati zagotavljajo zaupnost, celovitost in pristnost. Imajo odlično zmogljivost in energetsko učinkovitost na sodobni strojni opremi. Uporabniki naj uporabljajo šifre AEAD, kadar koli je to mogoče.

Priporočene so naslednje šifre AEAD. Skladne implementacije Shadowsocks morajo podpirati AEAD_CHACHA20_POLY1305. Izvedbe za naprave s strojnim pospeševanjem AES bi morale izvajati tudi AEAD_AES_128_GCM in AEAD_AES_256_GCM.

 

 

 

Ime

Alias

Velikost ključa

Velikost soli

Nonce Velikost

Velikost oznake

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

Prosimo, glejte register IANA AEAD za shemo poimenovanja in specifikacijo.

Izpeljava ključa

Glavni ključ lahko vnesete neposredno od uporabnika ali ustvarite iz gesla.

HKDF_SHA1 je funkcija, ki vzame skrivni ključ, nesekretno sol, informacijski niz in ustvari podključ, ki je kriptografsko močan, tudi če je vhodni skrivni ključ šibek.

HKDF_SHA1(ključ, sol, informacije) => podključ

Informacijski niz poveže ustvarjeni podključ z določenim kontekstom aplikacije. V našem primeru mora biti to niz "ss-subkey" brez narekovajev.

Podključ za sejo izpeljemo iz vnaprej deljenega glavnega ključa z uporabo HKDF_SHA1. Sol mora biti edinstven skozi celotno življenjsko dobo glavnega ključa v vnaprejšnji skupni rabi.

Preverjeno šifriranje/dešifriranje

AE_encrypt je funkcija, ki sprejme skrivni ključ, non-secret, sporočilo ter ustvari šifrirano besedilo in oznako za preverjanje pristnosti. Nonce mora biti edinstven za dani ključ pri vsakem klicu.

AE_encrypt(ključ, nonce, sporočilo) => (šifrirano besedilo, oznaka)

 

AE_decrypt je funkcija, ki vzame skrivni ključ, non-secret nonce, šifrirano besedilo, oznako za preverjanje pristnosti in ustvari izvirno sporočilo. Če je kateri od vnosov spremenjen, dešifriranje ne bo uspelo.

AE_decrypt(key, nonce, ciphertext, tag) => sporočilo

TCP

Tok TCP, šifriran z AEAD, se začne z naključno generirano soljo za izpeljavo podključa za sejo, ki mu sledi poljubno število šifriranih kosov. Vsak kos ima naslednjo strukturo:

[šifrirana dolžina tovora][oznaka dolžine][šifrirana tovora][oznaka tovora]

 

Dolžina koristnega tovora je 2-bajtno nepredznačeno celo število z velikim endianom, omejeno na 0x3FFF. Višja dva bita sta rezervirana in ju je treba nastaviti na nič. Obremenitev je zato omejena na 16*1024 – 1 bajt.

Prva operacija šifriranja/dešifriranja AEAD uporablja štetje nonce, ki se začne od 0. Po vsaki operaciji šifriranja/dešifriranja se nonce poveča za ena, kot da bi šlo za nepredznačeno celo število z redkim začetkom. Upoštevajte, da vsak kos TCP vključuje dve operaciji šifriranja/dešifriranja AEAD: eno za dolžino tovora in eno za tovor. Zato vsak kos dvakrat poveča enkratno vrednost.

TCP

Tok TCP, šifriran z AEAD, se začne z naključno generirano soljo za izpeljavo podključa za sejo, ki mu sledi poljubno število šifriranih kosov. Vsak kos ima naslednjo strukturo:

[šifrirana dolžina tovora][oznaka dolžine][šifrirana tovora][oznaka tovora]

 

Dolžina koristnega tovora je 2-bajtno nepredznačeno celo število z velikim endianom, omejeno na 0x3FFF. Višja dva bita sta rezervirana in ju je treba nastaviti na nič. Obremenitev je zato omejena na 16*1024 – 1 bajt.

Prva operacija šifriranja/dešifriranja AEAD uporablja štetje nonce, ki se začne od 0. Po vsaki operaciji šifriranja/dešifriranja se nonce poveča za ena, kot da bi šlo za nepredznačeno celo število z redkim začetkom. Upoštevajte, da vsak kos TCP vključuje dve operaciji šifriranja/dešifriranja AEAD: eno za dolžino tovora in eno za tovor. Zato vsak kos dvakrat poveča enkratno vrednost.

Začnite 5-dnevno brezplačno preskusno obdobje