Shadowsocks dokumentacija

AEAD

AEAD je skraćenica za Authenticated Encryption with Associated Data. AEAD šifre istovremeno pružaju povjerljivost, integritet i autentičnost. Imaju odlične performanse i energetsku efikasnost na modernom hardveru. Korisnici bi trebali koristiti AEAD šifre kad god je to moguće.

Preporučuju se sljedeće AEAD šifre. Sukladne Shadowsocks implementacije moraju podržavati AEAD_CHACHA20_POLY1305. Implementacije za uređaje sa hardverskim AES ubrzanjem bi također trebale implementirati AEAD_AES_128_GCM i AEAD_AES_256_GCM.

 

 

 

Ime

pseudonim

Veličina ključa

Salt Size

Nonce Size

Veličina 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

Molimo pogledajte IANA AEAD registar za šemu imenovanja i specifikaciju.

Izvođenje ključa

Glavni ključ se može unijeti direktno od korisnika ili generirati iz lozinke.

HKDF_SHA1 je funkcija koja uzima tajni ključ, netajnu sol, info niz i proizvodi potključ koji je kriptografski jak čak i ako je ulazni tajni ključ slab.

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

Niz informacija povezuje generirani potključ za određeni kontekst aplikacije. U našem slučaju, to mora biti string “ss-subkey” bez navodnika.

Izvodimo potključ po sesiji iz unaprijed dijeljenog glavnog ključa koristeći HKDF_SHA1. Sol mora biti jedinstvena kroz cijeli vijek trajanja unaprijed dijeljenog glavnog ključa.

Ovjereno šifriranje/dešifriranje

AE_encrypt je funkcija koja uzima tajni ključ, non-secret nonce, poruku i proizvodi šifrirani tekst i oznaku za autentifikaciju. Nonce mora biti jedinstven za dati ključ u svakom pozivanju.

AE_encrypt(ključ, nonce, poruka) => (šifrirani tekst, oznaka)

 

AE_decrypt je funkcija koja uzima tajni ključ, non-secret nonce, šifrirani tekst, oznaku za autentifikaciju i proizvodi originalnu poruku. Ako se bilo koji od ulaza mijenja, dešifriranje neće uspjeti.

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

TCP

AEAD šifrirani TCP tok počinje nasumično generiranom soli za izvođenje potključa po sesiji, nakon čega slijedi bilo koji broj šifriranih dijelova. Svaki komad ima sljedeću strukturu:

[dužina šifrovanog tereta][oznaka dužine][šifrirano opterećenje][oznaka nosivosti]

 

Dužina korisnog učitavanja je 2-bajtni big-endian neoznačeni cijeli broj ograničen na 0x3FFF. Dva viša bita su rezervirana i moraju se postaviti na nulu. Korisno opterećenje je stoga ograničeno na 16*1024 – 1 bajt.

Prva AEAD operacija šifriranja/dešifriranja koristi brojenje nonce počevši od 0. Nakon svake operacije šifriranja/dešifriranja, nonce se povećava za jedan kao da je cijeli broj bez predznaka. Imajte na umu da svaki TCP komad uključuje dvije AEAD operacije šifriranja/dešifriranja: jednu za dužinu korisnog učitavanja i jednu za korisno opterećenje. Stoga svaki komad dvaput povećava nonce.

TCP

AEAD šifrirani TCP tok počinje nasumično generiranom soli za izvođenje potključa po sesiji, nakon čega slijedi bilo koji broj šifriranih dijelova. Svaki komad ima sljedeću strukturu:

[dužina šifrovanog tereta][oznaka dužine][šifrirano opterećenje][oznaka nosivosti]

 

Dužina korisnog učitavanja je 2-bajtni big-endian neoznačeni cijeli broj ograničen na 0x3FFF. Dva viša bita su rezervirana i moraju se postaviti na nulu. Korisno opterećenje je stoga ograničeno na 16*1024 – 1 bajt.

Prva AEAD operacija šifriranja/dešifriranja koristi brojenje nonce počevši od 0. Nakon svake operacije šifriranja/dešifriranja, nonce se povećava za jedan kao da je cijeli broj bez predznaka. Imajte na umu da svaki TCP komad uključuje dvije AEAD operacije šifriranja/dešifriranja: jednu za dužinu korisnog učitavanja i jednu za korisno opterećenje. Stoga svaki komad dvaput povećava nonce.

Započnite svoju 5-dnevnu besplatnu probnu verziju