Shadowsocks-documentatie

AED

AED staat voor Authenticated Encryption with Associated Data. AEAD-cijfers bieden tegelijkertijd vertrouwelijkheid, integriteit en authenticiteit. Ze hebben uitstekende prestaties en energie-efficiëntie op moderne hardware. Gebruikers moeten waar mogelijk AEAD-cijfers gebruiken.

De volgende AEAD-cijfers worden aanbevolen. Conforme Shadowsocks-implementaties moeten AEAD_CHACHA20_POLY1305 ondersteunen. Implementaties voor apparaten met hardwarematige AES-versnelling moeten ook AEAD_AES_128_GCM en AEAD_AES_256_GCM implementeren.

 

 

 

Naam

Alias

Sleutelgrootte

Zout grootte

Geen enkele maat

Tag Size

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

Raadpleeg IANA AEAD-register voor naamgevingsschema en specificatie.

Sleutelafleiding

De hoofdsleutel kan rechtstreeks door de gebruiker worden ingevoerd of op basis van een wachtwoord worden gegenereerd.

HKDF_SHA1 is een functie die een geheime sleutel, een niet-geheime salt, een inforeeks neemt en een subsleutel produceert die cryptografisch sterk is, zelfs als de ingevoerde geheime sleutel zwak is.

HKDF_SHA1(sleutel, zout, info) => subsleutel

De infostring bindt de gegenereerde subsleutel aan een specifieke toepassingscontext. In ons geval moet het de string "ss-subkey" zijn zonder aanhalingstekens.

We leiden een subsleutel per sessie af van een vooraf gedeelde hoofdsleutel met behulp van HKDF_SHA1. Zout moet gedurende de hele levensduur van de vooraf gedeelde hoofdsleutel uniek zijn.

Geverifieerde codering/decodering

AE_encrypt is een functie die een geheime sleutel, een niet-geheime nonce, een bericht neemt en cijfertekst en een authenticatietag produceert. Nonce moet bij elke aanroep uniek zijn voor een bepaalde sleutel.

AE_encrypt(sleutel, nonce, bericht) => (cijfertekst, tag)

 

AE_decrypt is een functie die een geheime sleutel, niet-geheime nonce, cijfertekst, een authenticatietag gebruikt en een origineel bericht produceert. Als er met een van de invoer is geknoeid, mislukt de decodering.

AE_decrypt(sleutel, nonce, cijfertekst, tag) => bericht

TCP

Een met AEAD versleutelde TCP-stream begint met een willekeurig gegenereerde salt om de subsleutel per sessie af te leiden, gevolgd door een willekeurig aantal versleutelde chunks. Elke brok heeft de volgende structuur:

[gecodeerde payload-lengte][lengte-tag][gecodeerde payload][payload-tag]

 

De lengte van de payload is een 2-byte big-endian geheel getal zonder teken met een maximum van 0x3FFF. De twee hoogste bits zijn gereserveerd en moeten op nul worden gezet. Payload is daarom beperkt tot 16*1024 – 1 bytes.

De eerste AEAD-versleutelings-/ontsleutelingsbewerking gebruikt een tellende nonce die begint bij 0. Na elke versleutelings-/ontsleutelingsbewerking wordt de nonce met één opgehoogd alsof het een niet-ondertekend little-endian geheel getal is. Merk op dat elk TCP-chunk twee AEAD-versleutelings-/ontsleutelingsbewerkingen omvat: één voor de lengte van de payload en één voor de payload. Daarom verhoogt elk stuk de nonce twee keer.

TCP

Een met AEAD versleutelde TCP-stream begint met een willekeurig gegenereerde salt om de subsleutel per sessie af te leiden, gevolgd door een willekeurig aantal versleutelde chunks. Elke brok heeft de volgende structuur:

[gecodeerde payload-lengte][lengte-tag][gecodeerde payload][payload-tag]

 

De lengte van de payload is een 2-byte big-endian geheel getal zonder teken met een maximum van 0x3FFF. De twee hoogste bits zijn gereserveerd en moeten op nul worden gezet. Payload is daarom beperkt tot 16*1024 – 1 bytes.

De eerste AEAD-versleutelings-/ontsleutelingsbewerking gebruikt een tellende nonce die begint bij 0. Na elke versleutelings-/ontsleutelingsbewerking wordt de nonce met één opgehoogd alsof het een niet-ondertekend little-endian geheel getal is. Merk op dat elk TCP-chunk twee AEAD-versleutelings-/ontsleutelingsbewerkingen omvat: één voor de lengte van de payload en één voor de payload. Daarom verhoogt elk stuk de nonce twee keer.

Start uw gratis proefperiode van 5 dagen