Shadowsocks dokumentacija

AEAD

AEAD označava Authenticated Encryption with Associated Data. AEAD šifre istovremeno pružaju povjerljivost, integritet i autentičnost. Imaju izvrsne performanse i energetsku učinkovitost 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 s hardverskim AES ubrzanjem također bi trebale implementirati AEAD_AES_128_GCM i AEAD_AES_256_GCM.

 

 

 

Ime i Prezime

Pseudonim

Veličina ključa

Veličina soli

Jednokratna veličina

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 shemu imenovanja i specifikaciju.

Izvođenje ključa

Glavni ključ može unijeti izravno korisnik ili generirati iz lozinke.

HKDF_SHA1 je funkcija koja uzima tajni ključ, ne-tajnu sol, info string i proizvodi potključ koji je kriptografski jak čak i ako je ulazni tajni ključ slab.

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

Informacijski niz povezuje generirani potključ s određenim kontekstom aplikacije. U našem slučaju, to mora biti niz "ss-subkey" bez navodnika.

Izvodimo potključ po sesiji iz unaprijed podijeljenog glavnog ključa pomoću HKDF_SHA1. Sol mora biti jedinstven tijekom cijelog vijeka trajanja unaprijed dijeljenog glavnog ključa.

Autentificirano šifriranje/dešifriranje

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

AE_encrypt(key, nonce, message) => (šifrirani tekst, oznaka)

 

AE_decrypt je funkcija koja uzima tajni ključ, non-secret nonce, šifrirani tekst, oznaku za provjeru autentičnosti i proizvodi izvornu poruku. Ako se bilo koji dio unosa neovlašteno mijenja, dešifriranje neće uspjeti.

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

TCP

AEAD kriptirani TCP tok započ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:

[šifrirana duljina korisnog sadržaja][oznaka duljine][šifrirani korisni sadržaj][oznaka korisnog sadržaja]

 

Duljina korisnih podataka je 2-bajtni veliki-endian cijeli broj bez predznaka ograničen na 0x3FFF. Viša dva bita su rezervirana i moraju biti postavljena na nulu. Korisni teret je stoga ograničen na 16*1024 – 1 bajt.

Prva operacija šifriranja/dešifriranja AEAD-a koristi brojanje nonce počevši od 0. Nakon svake operacije šifriranja/dešifriranja, nonce se povećava za jedan kao da je nepredznačeni mali-endian cijeli broj. Imajte na umu da svaki TCP blok uključuje dvije operacije šifriranja/dešifriranja AEAD-a: jednu za duljinu korisnog sadržaja i jednu za korisni sadržaj. Stoga svaki dio povećava nonce dva puta.

TCP

AEAD kriptirani TCP tok započ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:

[šifrirana duljina korisnog sadržaja][oznaka duljine][šifrirani korisni sadržaj][oznaka korisnog sadržaja]

 

Duljina korisnih podataka je 2-bajtni veliki-endian cijeli broj bez predznaka ograničen na 0x3FFF. Viša dva bita su rezervirana i moraju biti postavljena na nulu. Korisni teret je stoga ograničen na 16*1024 – 1 bajt.

Prva operacija šifriranja/dešifriranja AEAD-a koristi brojanje nonce počevši od 0. Nakon svake operacije šifriranja/dešifriranja, nonce se povećava za jedan kao da je nepredznačeni mali-endian cijeli broj. Imajte na umu da svaki TCP blok uključuje dvije operacije šifriranja/dešifriranja AEAD-a: jednu za duljinu korisnog sadržaja i jednu za korisni sadržaj. Stoga svaki dio povećava nonce dva puta.

Započnite svoje 5-dnevno besplatno probno razdoblje