Shadowsocksi dokumentatsioon

AEAD

AEAD tähistab Authenticated Encryption with Associated Data. AEAD-šifrid tagavad samaaegselt konfidentsiaalsuse, terviklikkuse ja autentsuse. Neil on tänapäevasel riistvaral suurepärane jõudlus ja energiatõhusus. Kasutajad peaksid võimalusel kasutama AEAD-šifreid.

Soovitatavad on järgmised AEAD-šifrid. Ühilduvad Shadowsocksi juurutused peavad toetama AEAD_CHACHA20_POLY1305. Riistvaralise AES-kiirendusega seadmete rakendused peaksid rakendama ka AEAD_AES_128_GCM ja AEAD_AES_256_GCM.

 

 

 

Nimi

Teise nimega

Klahvi suurus

Soola suurus

Nonce suurus

Sildi suurus

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

Palun viita IANA AEAD register nimetamisskeemi ja spetsifikatsiooni jaoks.

Võtme tuletamine

Peavõtme saab sisestada otse kasutajalt või genereerida paroolist.

HKDF_SHA1 on funktsioon, mis võtab salajase võtme, mittesalajast soola, infostringi ja loob alamvõtme, mis on krüptograafiliselt tugev isegi siis, kui sisendi salajane võti on nõrk.

HKDF_SHA1(võti, sool, teave) => alamvõti

Infostring seob loodud alamvõtme konkreetse rakenduse kontekstiga. Meie puhul peab see olema string "ss-subkey" ilma jutumärkideta.

Tuletame seansipõhise alamvõtme eeljagatud peavõtmest, kasutades HKDF_SHA1. Sool peab olema ainulaadne kogu eeljagatud peavõtme kasutusaja jooksul.

Autentitud krüptimine/dekrüpteerimine

AE_encrypt on funktsioon, mis võtab salajase võtme, mittesalajase mittesalaja, sõnumi ning loob šifriteksti ja autentimissildi. Nonce peab iga väljakutsumise korral antud võtme jaoks olema kordumatu.

AE_encrypt(võti, nonce, sõnum) => (šifreeritud tekst, silt)

 

AE_decrypt on funktsioon, mis võtab salajase võtme, mittesalajast nonce'i, šifriteksti, autentimissildi ja loob algse sõnumi. Kui mõnda sisendit rikutakse, siis dekrüpteerimine ebaõnnestub.

AE_decrypt(võti, nonce, šifreeritud tekst, silt) => sõnum

TCP

AEAD-krüptitud TCP-voog algab juhuslikult genereeritud soolaga, et tuletada seansi alamvõti, millele järgneb suvaline arv krüptitud tükke. Igal tükil on järgmine struktuur:

[krüpteeritud kasuliku koorma pikkus][pikkuse silt][krüpteeritud kasulik koormus][kasuliku koormuse silt]

 

Kasuliku koormuse pikkus on 2-baidine märgita täisarv, mille ülempiir on 0x3FFF. Kaks kõrgemat bitti on reserveeritud ja need tuleb nullida. Kasulik koormus on seetõttu piiratud 16 * 1024 - 1 baidiga.

Esimene AEAD krüptimise/dekrüptimise toiming kasutab loenduslikku nonce'i, mis algab 0-st. Pärast iga krüptimise/dekrüpteerimise toimingut suurendatakse nonce'i ühe võrra, nagu oleks tegemist märgita väikese lõpuga täisarvuga. Pange tähele, et iga TCP tükk hõlmab kahte AEAD krüptimise/dekrüpteerimise toimingut: ühte kasuliku koormuse pikkuse ja teist kasuliku koormuse jaoks. Seetõttu suurendab iga tükk nonce'i kaks korda.

TCP

AEAD-krüptitud TCP-voog algab juhuslikult genereeritud soolaga, et tuletada seansi alamvõti, millele järgneb suvaline arv krüptitud tükke. Igal tükil on järgmine struktuur:

[krüpteeritud kasuliku koorma pikkus][pikkuse silt][krüpteeritud kasulik koormus][kasuliku koormuse silt]

 

Kasuliku koormuse pikkus on 2-baidine märgita täisarv, mille ülempiir on 0x3FFF. Kaks kõrgemat bitti on reserveeritud ja need tuleb nullida. Kasulik koormus on seetõttu piiratud 16 * 1024 - 1 baidiga.

Esimene AEAD krüptimise/dekrüptimise toiming kasutab loenduslikku nonce'i, mis algab 0-st. Pärast iga krüptimise/dekrüpteerimise toimingut suurendatakse nonce'i ühe võrra, nagu oleks tegemist märgita väikese lõpuga täisarvuga. Pange tähele, et iga TCP tükk hõlmab kahte AEAD krüptimise/dekrüpteerimise toimingut: ühte kasuliku koormuse pikkuse ja teist kasuliku koormuse jaoks. Seetõttu suurendab iga tükk nonce'i kaks korda.

Alustage oma 5-päevast tasuta prooviperioodi