Shadowsocks dokumentasjon

FREM

FREM står for Authenticated Encryption with Associated Data. AEAD-siffer gir samtidig konfidensialitet, integritet og autentisitet. De har utmerket ytelse og strømeffektivitet på moderne maskinvare. Brukere bør bruke AEAD-chiffer når det er mulig.

Følgende AEAD-chiffer anbefales. Kompatible Shadowsocks-implementeringer må støtte AEAD_CHACHA20_POLY1305. Implementeringer for enheter med maskinvare-AES-akselerasjon bør også implementere AEAD_AES_128_GCM og AEAD_AES_256_GCM.

 

 

 

Navn

Alias

Nøkkelstørrelse

Salt størrelse

Ikke-størrelse

Tagstørrelse

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

Vennligst se IANA AEAD-registeret for navneskjema og spesifikasjon.

Nøkkelavledning

Hovednøkkelen kan legges inn direkte fra brukeren eller genereres fra et passord.

HKDF_SHA1 er en funksjon som tar en hemmelig nøkkel, et ikke-hemmelig salt, en infostreng, og produserer en undernøkkel som er kryptografisk sterk selv om den hemmelige inngangsnøkkelen er svak.

HKDF_SHA1(nøkkel, salt, info) => undernøkkel

Infostrengen binder den genererte undernøkkelen til en spesifikk applikasjonskontekst. I vårt tilfelle må det være strengen "ss-subkey" uten anførselstegn.

Vi utleder en undernøkkel per sesjon fra en forhåndsdelt hovednøkkel ved å bruke HKDF_SHA1. Salt må være unikt gjennom hele levetiden til den forhåndsdelte hovednøkkelen.

Autentisert kryptering/dekryptering

AE_encrypt er en funksjon som tar en hemmelig nøkkel, en ikke-hemmelig nonce, en melding og produserer chiffertekst og en autentiseringskode. Nonce må være unik for en gitt nøkkel i hver påkalling.

AE_encrypt(key, nonce, message) => (chiffertekst, tag)

 

AE_decrypt er en funksjon som tar en hemmelig nøkkel, ikke-hemmelig nonce, chiffertekst, en autentiseringskode og produserer en original melding. Hvis noen av inngangene tukles med, vil dekrypteringen mislykkes.

AE_decrypt(nøkkel, nonce, chiffertekst, tag) => melding

TCP

En AEAD-kryptert TCP-strøm starter med et tilfeldig generert salt for å utlede undernøkkelen per økt, etterfulgt av et hvilket som helst antall krypterte biter. Hver del har følgende struktur:

[kryptert nyttelastlengde][length tag][kryptert nyttelast][nyttelasttag]

 

Nyttelastlengden er et 2-byte big-endian usignert heltall begrenset til 0x3FFF. De to høyere bitene er reservert og må settes til null. Nyttelast er derfor begrenset til 16*1024 – 1 byte.

Den første AEAD-krypterings-/dekrypteringsoperasjonen bruker en tellende nonce som starter fra 0. Etter hver krypterings-/dekrypteringsoperasjon økes nonce-en med én som om den var et usignert lite-endian-heltall. Merk at hver TCP-del involverer to AEAD-krypterings-/dekrypteringsoperasjoner: én for nyttelastlengden og én for nyttelasten. Derfor øker hver del nonce to ganger.

TCP

En AEAD-kryptert TCP-strøm starter med et tilfeldig generert salt for å utlede undernøkkelen per økt, etterfulgt av et hvilket som helst antall krypterte biter. Hver del har følgende struktur:

[kryptert nyttelastlengde][length tag][kryptert nyttelast][nyttelasttag]

 

Nyttelastlengden er et 2-byte big-endian usignert heltall begrenset til 0x3FFF. De to høyere bitene er reservert og må settes til null. Nyttelast er derfor begrenset til 16*1024 – 1 byte.

Den første AEAD-krypterings-/dekrypteringsoperasjonen bruker en tellende nonce som starter fra 0. Etter hver krypterings-/dekrypteringsoperasjon økes nonce-en med én som om den var et usignert lite-endian-heltall. Merk at hver TCP-del involverer to AEAD-krypterings-/dekrypteringsoperasjoner: én for nyttelastlengden og én for nyttelasten. Derfor øker hver del nonce to ganger.

Start din 5-dagers gratis prøveperiode