Shadowsocks-Dokumentation

AEAD

AEAD steht für Authenticated Encryption with Associated Data. AEAD-Chiffren bieten gleichzeitig Vertraulichkeit, Integrität und Authentizität. Sie haben eine hervorragende Leistung und Energieeffizienz auf moderner Hardware. Benutzer sollten wann immer möglich AEAD-Chiffren verwenden.

Die folgenden AEAD-Chiffren werden empfohlen. Kompatible Shadowsocks-Implementierungen müssen AEAD_CHACHA20_POLY1305 unterstützen. Implementierungen für Geräte mit Hardware-AES-Beschleunigung sollten auch AEAD_AES_128_GCM und AEAD_AES_256_GCM implementieren.

 

 

 

Name und Vorname

Alias

Schlüsselgröße

Salzgröße

Nonce-Größe

Etikettengröße

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

Bitte beachten Sie IANA AEAD-Register für Namensschema und Spezifikation.

Schlüsselableitung

Der Hauptschlüssel kann direkt vom Benutzer eingegeben oder aus einem Passwort generiert werden.

HKDF_SHA1 ist eine Funktion, die einen geheimen Schlüssel, ein nicht geheimes Salt und eine Info-Zeichenfolge verwendet und einen Unterschlüssel erzeugt, der kryptografisch stark ist, selbst wenn der eingegebene geheime Schlüssel schwach ist.

HKDF_SHA1(Schlüssel, Salt, Info) => Unterschlüssel

Die Infozeichenfolge bindet den generierten Unterschlüssel an einen bestimmten Anwendungskontext. In unserem Fall muss es der String „ss-subkey“ ohne Anführungszeichen sein.

Wir leiten einen Unterschlüssel pro Sitzung von einem vorinstallierten Hauptschlüssel mit HKDF_SHA1 ab. Salt muss während der gesamten Lebensdauer des vorinstallierten Hauptschlüssels eindeutig sein.

Authentifizierte Verschlüsselung/Entschlüsselung

AE_encrypt ist eine Funktion, die einen geheimen Schlüssel, eine nicht geheime Nonce, eine Nachricht nimmt und Chiffretext und ein Authentifizierungs-Tag erzeugt. Nonce muss für einen bestimmten Schlüssel in jedem Aufruf eindeutig sein.

AE_encrypt(Schlüssel, Nonce, Nachricht) => (Chiffretext, Tag)

 

AE_decrypt ist eine Funktion, die einen geheimen Schlüssel, eine nicht geheime Nonce, Chiffretext und ein Authentifizierungs-Tag nimmt und eine Originalnachricht erzeugt. Wenn eine der Eingaben manipuliert wird, schlägt die Entschlüsselung fehl.

AE_decrypt(Schlüssel, Nonce, Chiffretext, Tag) => Nachricht

TCP

Ein AEAD-verschlüsselter TCP-Stream beginnt mit einem zufällig generierten Salt, um den Unterschlüssel pro Sitzung abzuleiten, gefolgt von einer beliebigen Anzahl verschlüsselter Chunks. Jeder Chunk hat die folgende Struktur:

[Länge der verschlüsselten Nutzlast][Längen-Tag][verschlüsselte Nutzlast][Tag der Nutzlast]

 

Die Nutzlastlänge ist eine 2-Byte-Big-Endian-Ganzzahl ohne Vorzeichen, die auf 0x3FFF begrenzt ist. Die höheren zwei Bits sind reserviert und müssen auf Null gesetzt werden. Die Nutzlast ist daher auf 16*1024 – 1 Byte begrenzt.

Die erste AEAD-Verschlüsselungs-/Entschlüsselungsoperation verwendet eine zählende Nonce, die bei 0 beginnt. Nach jeder Verschlüsselungs-/Entschlüsselungsoperation wird die Nonce um eins inkrementiert, als ob sie eine vorzeichenlose Little-Endian-Ganzzahl wäre. Beachten Sie, dass jeder TCP-Block zwei AEAD-Verschlüsselungs-/Entschlüsselungsoperationen umfasst: eine für die Länge der Nutzlast und eine für die Nutzlast. Daher erhöht jeder Chunk die Nonce zweimal.

TCP

Ein AEAD-verschlüsselter TCP-Stream beginnt mit einem zufällig generierten Salt, um den Unterschlüssel pro Sitzung abzuleiten, gefolgt von einer beliebigen Anzahl verschlüsselter Chunks. Jeder Chunk hat die folgende Struktur:

[Länge der verschlüsselten Nutzlast][Längen-Tag][verschlüsselte Nutzlast][Tag der Nutzlast]

 

Die Nutzlastlänge ist eine 2-Byte-Big-Endian-Ganzzahl ohne Vorzeichen, die auf 0x3FFF begrenzt ist. Die höheren zwei Bits sind reserviert und müssen auf Null gesetzt werden. Die Nutzlast ist daher auf 16*1024 – 1 Byte begrenzt.

Die erste AEAD-Verschlüsselungs-/Entschlüsselungsoperation verwendet eine zählende Nonce, die bei 0 beginnt. Nach jeder Verschlüsselungs-/Entschlüsselungsoperation wird die Nonce um eins inkrementiert, als ob sie eine vorzeichenlose Little-Endian-Ganzzahl wäre. Beachten Sie, dass jeder TCP-Block zwei AEAD-Verschlüsselungs-/Entschlüsselungsoperationen umfasst: eine für die Länge der Nutzlast und eine für die Nutzlast. Daher erhöht jeder Chunk die Nonce zweimal.

Starten Sie Ihre 5-tägige kostenlose Testversion