Shadowsocks dokumentacija

AEAD

AEAD reiškia autentifikuotą šifravimą su susijusiais duomenimis. AEAD šifrai vienu metu užtikrina konfidencialumą, vientisumą ir autentiškumą. Jie pasižymi puikiu našumu ir energijos vartojimo efektyvumu šiuolaikinėje aparatinėje įrangoje. Jei įmanoma, vartotojai turėtų naudoti AEAD šifrus.

Rekomenduojami šie AEAD šifrai. Suderinami „Shadowsocks“ diegimai turi palaikyti AEAD_CHACHA20_POLY1305. Įrenginiams su aparatūros AES spartinimu taip pat turėtų būti įdiegta AEAD_AES_128_GCM ir AEAD_AES_256_GCM.

 

 

 

Vardas

Pravardė

Rakto dydis

Druskos dydis

Nonce dydis

Žymos dydis

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

Prašome kreiptis į IANA AEAD registras pavadinimų schemai ir specifikacijai.

Raktų išvedimas

Pagrindinis raktas gali būti įvestas tiesiai iš vartotojo arba sugeneruotas iš slaptažodžio.

HKDF_SHA1 yra funkcija, kuri paima slaptą raktą, neslaptąją druską, informacijos eilutę ir sukuria kriptografiškai stiprų dalinį raktą, net jei įvesties slaptasis raktas yra silpnas.

HKDF_SHA1(raktas, druska, informacija) => dalinis raktas

Informacijos eilutė susieja sugeneruotą dalinį raktą su konkrečiu programos kontekstu. Mūsų atveju tai turi būti eilutė „ss-subkey“ be kabučių.

Seanso dalinį raktą gauname iš iš anksto bendrinamo pagrindinio rakto, naudodami HKDF_SHA1. Druska turi būti unikali per visą iš anksto bendrinamo pagrindinio rakto galiojimo laiką.

Autentifikuotas šifravimas / iššifravimas

AE_encrypt yra funkcija, kuri paima slaptą raktą, neslaptąjį nežymėjimą, pranešimą ir sukuria šifruotą tekstą bei autentifikavimo žymą. Nonce turi būti unikalus nurodytam raktui kiekvienoje iškvietime.

AE_encrypt(raktas, nonce, pranešimas) => (šifruotas tekstas, žyma)

 

AE_decrypt yra funkcija, kuri paima slaptą raktą, neslaptąjį nonce, šifruotą tekstą, autentifikavimo žymą ir sukuria originalų pranešimą. Jei kuri nors įvestis yra sugadinta, iššifravimas nepavyks.

AE_decrypt(raktas, nonce, šifruotas tekstas, žyma) => pranešimas

TCP

AEAD užšifruotas TCP srautas prasideda atsitiktinai sugeneruota druska, kad būtų gautas per seansą dalinis raktas, po kurio seka bet koks užšifruotų dalių skaičius. Kiekvienas gabalas turi tokią struktūrą:

[šifruotas krovinio ilgis][ilgio žyma][šifruotas krovinys][naudingos apkrovos žyma]

 

Naudingosios apkrovos ilgis yra 2 baitų didžiojo beženklio sveikasis skaičius, kurio viršutinė riba yra 0x3FFF. Du aukštesni bitai yra rezervuoti ir turi būti nustatyti į nulį. Todėl naudingoji apkrova yra ribojama iki 16 * 1024 – 1 baitas.

Pirmojoje AEAD šifravimo / iššifravimo operacijoje naudojamas skaičiavimas nonce, prasidedantis nuo 0. Po kiekvienos šifravimo / iššifravimo operacijos nonce padidinamas vienu, tarsi tai būtų nepasirašytas sveikasis skaičius. Atkreipkite dėmesį, kad kiekvienas TCP gabalas apima dvi AEAD šifravimo / iššifravimo operacijas: vieną naudingosios apkrovos ilgį ir kitą naudingą apkrovą. Todėl kiekvienas gabalas padidina nonce du kartus.

TCP

AEAD užšifruotas TCP srautas prasideda atsitiktinai sugeneruota druska, kad būtų gautas per seansą dalinis raktas, po kurio seka bet koks užšifruotų dalių skaičius. Kiekvienas gabalas turi tokią struktūrą:

[šifruotas krovinio ilgis][ilgio žyma][šifruotas krovinys][naudingos apkrovos žyma]

 

Naudingosios apkrovos ilgis yra 2 baitų didžiojo beženklio sveikasis skaičius, kurio viršutinė riba yra 0x3FFF. Du aukštesni bitai yra rezervuoti ir turi būti nustatyti į nulį. Todėl naudingoji apkrova yra ribojama iki 16 * 1024 – 1 baitas.

Pirmojoje AEAD šifravimo / iššifravimo operacijoje naudojamas skaičiavimas nonce, prasidedantis nuo 0. Po kiekvienos šifravimo / iššifravimo operacijos nonce padidinamas vienu, tarsi tai būtų nepasirašytas sveikasis skaičius. Atkreipkite dėmesį, kad kiekvienas TCP gabalas apima dvi AEAD šifravimo / iššifravimo operacijas: vieną naudingosios apkrovos ilgį ir kitą naudingą apkrovą. Todėl kiekvienas gabalas padidina nonce du kartus.

Pradėkite 5 dienų nemokamą bandomąjį laikotarpį