Shadowsocks dokumentasie

VOORAF

VOORAF staan ​​vir Authenticated Encryption with Associated Data. AEAD-syfers verskaf terselfdertyd vertroulikheid, integriteit en egtheid. Hulle het uitstekende werkverrigting en kragdoeltreffendheid op moderne hardeware. Gebruikers moet AEAD-syfers gebruik waar moontlik.

Die volgende AEAD-syfers word aanbeveel. Voldoende Shadowsocks-implementerings moet AEAD_CHACHA20_POLY1305 ondersteun. Implementerings vir toestelle met hardeware AES-versnelling moet ook AEAD_AES_128_GCM en AEAD_AES_256_GCM implementeer.

 

 

 

Naam

alias

Sleutelgrootte

Sout Grootte

Nie-grootte

Merk grootte

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

Verwys asseblief na IANA AEAD-register vir naamskema en spesifikasie.

Sleutel afleiding

Die hoofsleutel kan direk vanaf die gebruiker ingevoer word of vanaf 'n wagwoord gegenereer word.

HKDF_SHA1 is 'n funksie wat 'n geheime sleutel, 'n nie-geheime sout, 'n inligtingstring neem, en 'n subsleutel produseer wat kriptografies sterk is, selfs al is die insette geheime sleutel swak.

HKDF_SHA1(sleutel, sout, info) => subsleutel

Die inligtingstring bind die gegenereerde subsleutel aan 'n spesifieke toepassingskonteks. In ons geval moet dit die string “ss-subkey” sonder aanhalingstekens wees.

Ons lei 'n per-sessie subsleutel af van 'n vooraf-gedeelde hoofsleutel met behulp van HKDF_SHA1. Sout moet uniek wees deur die hele lewe van die voorafgedeelde hoofsleutel.

Geverifieerde enkripsie/dekripsie

AE_encrypt is 'n funksie wat 'n geheime sleutel, 'n nie-geheime nonce, 'n boodskap neem en syferteks en 'n verifikasiemerker produseer. Nonce moet uniek wees vir 'n gegewe sleutel in elke aanroep.

AE_encrypt(sleutel, nonce, boodskap) => (syferteks, merker)

 

AE_decrypt is 'n funksie wat 'n geheime sleutel, nie-geheime nonce, syferteks, 'n verifikasiemerker neem en 'n oorspronklike boodskap produseer. As daar met enige van die invoer gepeuter word, sal die dekripsie misluk.

AE_decrypt(sleutel, nonce, ciphertext, tag) => boodskap

TCP

'n AEAD-geënkripteerde TCP-stroom begin met 'n lukraak gegenereerde sout om die per-sessie subsleutel af te lei, gevolg deur enige aantal geënkripteerde stukke. Elke stuk het die volgende struktuur:

[geënkripteerde loonvraglengte][lengtemerker][geïnkripteer loonvrag][loonvragmerker]

 

Loonvraglengte is 'n 2-grepe groot-endian ongetekende heelgetal wat beperk is tot 0x3FFF. Die hoër twee bisse is gereserveer en moet op nul gestel word. Loonvrag is dus beperk tot 16*1024 – 1 grepe.

Die eerste AEAD-enkripteer/dekripteer-bewerking gebruik 'n tel-nonce wat vanaf 0 begin. Na elke enkripteer/dekripteer-bewerking word die nonce met een verhoog asof dit 'n ongetekende klein-endian heelgetal is. Let daarop dat elke TCP-stuk twee AEAD-enkripteer/dekripteer-bewerkings behels: een vir die loonvraglengte en een vir die loonvrag. Daarom verhoog elke stukkie die nonce twee keer.

TCP

'n AEAD-geënkripteerde TCP-stroom begin met 'n lukraak gegenereerde sout om die per-sessie subsleutel af te lei, gevolg deur enige aantal geënkripteerde stukke. Elke stuk het die volgende struktuur:

[geënkripteerde loonvraglengte][lengtemerker][geïnkripteer loonvrag][loonvragmerker]

 

Loonvraglengte is 'n 2-grepe groot-endian ongetekende heelgetal wat beperk is tot 0x3FFF. Die hoër twee bisse is gereserveer en moet op nul gestel word. Loonvrag is dus beperk tot 16*1024 – 1 grepe.

Die eerste AEAD-enkripteer/dekripteer-bewerking gebruik 'n tel-nonce wat vanaf 0 begin. Na elke enkripteer/dekripteer-bewerking word die nonce met een verhoog asof dit 'n ongetekende klein-endian heelgetal is. Let daarop dat elke TCP-stuk twee AEAD-enkripteer/dekripteer-bewerkings behels: een vir die loonvraglengte en een vir die loonvrag. Daarom verhoog elke stukkie die nonce twee keer.

Begin jou 5-dae gratis proeflopie