Shadowsocksin dokumentaatio

AEAD

AEAD tarkoittaa Authenticated Encryption with Associated Data. AEAD-salaukset tarjoavat samanaikaisesti luottamuksellisuuden, eheyden ja aitouden. Niillä on erinomainen suorituskyky ja tehokkuus nykyaikaisissa laitteissa. Käyttäjien tulee käyttää AEAD-salauksia aina kun mahdollista.

Seuraavat AEAD-salaukset ovat suositeltavia. Yhteensopivien Shadowsocks-toteutusten on tuettava AEAD_CHACHA20_POLY1305:tä. Toteutuksissa laitteille, joissa on laitteisto-AES-kiihdytys, tulisi ottaa käyttöön myös AEAD_AES_128_GCM ja AEAD_AES_256_GCM.

 

 

 

Nimi

alias

Avaimen koko

Suolan koko

Nonce koko

Tag-koko

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

Katso IANA AEAD rekisteri nimeämistä ja määrittelyä varten.

Avaimen johtaminen

Pääavain voidaan syöttää suoraan käyttäjältä tai generoida salasanasta.

HKDF_SHA1 on funktio, joka ottaa salaisen avaimen, ei-salaisen suolan, tietomerkkijonon ja tuottaa aliavaimen, joka on kryptografisesti vahva, vaikka syötettävä salainen avain olisi heikko.

HKDF_SHA1(avain, suola, tiedot) => aliavain

Tietomerkkijono sitoo luodun aliavaimen tiettyyn sovelluskontekstiin. Meidän tapauksessamme sen on oltava merkkijono "ss-subkey" ilman lainausmerkkejä.

Johdamme istuntokohtaisen aliavaimen ennalta jaetusta pääavaimesta HKDF_SHA1:n avulla. Suolan on oltava ainutlaatuinen esijaetun pääavaimen koko käyttöiän ajan.

Todennettu salaus/salauksen purku

AE_encrypt on toiminto, joka ottaa salaisen avaimen, ei-salaisen noncen, viestin ja tuottaa salatekstin ja todennustunnisteen. Noncen on oltava yksilöllinen annetulle avaimelle kussakin kutsussa.

AE_encrypt(avain, nonce, message) => (salateksti, tunniste)

 

AE_decrypt on toiminto, joka ottaa salaisen avaimen, ei-salaisen noncen, salatekstin, todennustunnisteen ja tuottaa alkuperäisen viestin. Jos jotain syötteistä on peukaloitu, salauksen purku epäonnistuu.

AE_decrypt(avain, nonce, salateksti, tunniste) => viesti

TCP

AEAD-salattu TCP-virta alkaa satunnaisesti luodulla suolalla, joka johtaa istuntokohtaisen aliavaimen, jota seuraa mikä tahansa määrä salattuja paloja. Jokaisella palalla on seuraava rakenne:

[salatun hyötykuorman pituus][pituustunniste][salattu hyötykuorma][hyötykuorman tunniste]

 

Hyötykuorman pituus on 2-tavuinen etumerkitön kokonaisluku, jonka yläraja on 0x3FFF. Kaksi korkeampaa bittiä on varattu ja ne on asetettava nollaan. Hyötykuorma on siksi rajoitettu arvoon 16*1024 – 1 tavu.

Ensimmäinen AEAD-salaus/salauksenpurku-operaatio käyttää laskenta-noncea, joka alkaa nollasta. Jokaisen salaus-/salauksenpurkuoperaation jälkeen nonce-arvoa kasvatetaan yhdellä ikään kuin se olisi etumerkitön pieni-endian kokonaisluku. Huomaa, että jokainen TCP-osa sisältää kaksi AEAD-salaus-/salauksenpurkutoimintoa: yksi hyötykuorman pituudelle ja toinen hyötykuormalle. Siksi jokainen pala lisää nonce-arvoa kahdesti.

TCP

AEAD-salattu TCP-virta alkaa satunnaisesti luodulla suolalla, joka johtaa istuntokohtaisen aliavaimen, jota seuraa mikä tahansa määrä salattuja paloja. Jokaisella palalla on seuraava rakenne:

[salatun hyötykuorman pituus][pituustunniste][salattu hyötykuorma][hyötykuorman tunniste]

 

Hyötykuorman pituus on 2-tavuinen etumerkitön kokonaisluku, jonka yläraja on 0x3FFF. Kaksi korkeampaa bittiä on varattu ja ne on asetettava nollaan. Hyötykuorma on siksi rajoitettu arvoon 16*1024 – 1 tavu.

Ensimmäinen AEAD-salaus/salauksenpurku-operaatio käyttää laskenta-noncea, joka alkaa nollasta. Jokaisen salaus-/salauksenpurkuoperaation jälkeen nonce-arvoa kasvatetaan yhdellä ikään kuin se olisi etumerkitön pieni-endian kokonaisluku. Huomaa, että jokainen TCP-osa sisältää kaksi AEAD-salaus-/salauksenpurkutoimintoa: yksi hyötykuorman pituudelle ja toinen hyötykuormalle. Siksi jokainen pala lisää nonce-arvoa kahdesti.

Aloita 5 päivän ilmainen kokeilujaksosi