Shadowsocks Dokumentatioun
Navigatioun
AEAD
AEAD steet fir Authenticated Encryption with Associated Data. AEAD Chiffere bidden gläichzäiteg Vertraulechkeet, Integritéit an Authentizitéit. Si hunn exzellent Leeschtung a Kraafteffizienz op modern Hardware. D'Benotzer sollten AEAD Chiffere benotzen wann ëmmer méiglech.
Déi folgend AEAD Chiffere si recommandéiert. Konforme Shadowsocks Implementatiounen mussen AEAD_CHACHA20_POLY1305 ënnerstëtzen. Implementatioune fir Apparater mat Hardware AES Beschleunegung sollen och AEAD_AES_128_GCM an AEAD_AES_256_GCM implementéieren.
Numm | alias | Schlëssel Gréisst | Salz Gréisst | Nonce Gréisst | Tag Gréisst |
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 |
Kuckt weg IANA AEAD Registry fir Numm Schema an Spezifizéierung.
Schlëssel Derivatioun
De Masterschlëssel kann direkt vum Benotzer Input ginn oder aus engem Passwuert generéiert ginn.
HKDF_SHA1 ass eng Funktioun déi e geheime Schlëssel, en net-geheime Salz, eng Infostring hëlt, a produzéiert en Ënnerschlëssel deen kryptographesch staark ass, och wann den Input geheime Schlëssel schwaach ass.
HKDF_SHA1(Schlëssel, Salz, Info) => Ënnerschlëssel
D'Infostring bindt den generéierten Ënnerschlëssel un e spezifesche Applikatiounskontext. An eisem Fall muss et de String "ss-Subkey" ouni Zitater sinn.
Mir ofgeleent e Per-Sessioun Ënnerschlëssel vun engem pre-gedeelte Master-Schlëssel mat HKDF_SHA1. Salz muss eenzegaarteg duerch d'ganz Liewen vun der Pre-gedeelt Meeschtesch Schlëssel ginn.
Authentifizéiert Verschlësselung / Entschlësselung
AE_encrypt ass eng Funktioun déi e geheime Schlëssel, eng net-geheime Nonce, e Message hëlt a Chiffertext an en Authentifikatiounstag produzéiert. Nonce muss eenzegaarteg sinn fir e bestëmmte Schlëssel an all Uruff.
AE_encrypt(key, nonce, message) => (Chiffertext, Tag)
AE_decrypt ass eng Funktioun déi e geheime Schlëssel, net-geheime Nonce, Chiffertext, en Authentifikatiounstag hëlt an en originelle Message produzéiert. Wann iergendeen vun den Input manipuléiert gëtt, wäert d'Entschlësselung feelen.
AE_decrypt(key, nonce, ciphertext, tag) => Message
TCP
En AEAD verschlësselte TCP Stream fänkt mat engem zoufälleg generéierte Salz un fir de Per-Sessioun Ënnerschlëssel ofzeleeën, gefollegt vun all Zuel vu verschlësselte Stécker. All Stéck huet déi folgend Struktur:
[verschlësselte Notzlaaschtlängt][Längt Tag][verschlësselte Notzlaascht][Payload Tag]
Notzlaaschtlängt ass en 2-Byte Big-Endian net ënnerschriwwen Ganzt op 0x3FFF. Déi méi héich zwee Bits si reservéiert a mussen op Null gesat ginn. Notzlaascht ass dofir limitéiert op 16 * 1024 - 1 Bytes.
Déi éischt AEAD Verschlësselungs-/Entschlësselungsoperatioun benotzt eng Zählungsnonce ab 0. No all Verschlësselungs-/Entschlësselungsoperatioun gëtt d'Nonce vun engem eropgebaut wéi wann et en net ënnerschriwwene Little-endian Ganzt wier. Notéiert datt all TCP-Stéck zwee AEAD-Verschlësselungs- / Entschlësseloperatiounen involvéiert: eng fir d'Notzlaaschtlängt, an eng fir d'Notzlaascht. Dofir erhéicht all Stéck den Nonce zweemol.
TCP
En AEAD verschlësselte TCP Stream fänkt mat engem zoufälleg generéierte Salz un fir de Per-Sessioun Ënnerschlëssel ofzeleeën, gefollegt vun all Zuel vu verschlësselte Stécker. All Stéck huet déi folgend Struktur:
[verschlësselte Notzlaaschtlängt][Längt Tag][verschlësselte Notzlaascht][Payload Tag]
Notzlaaschtlängt ass en 2-Byte Big-Endian net ënnerschriwwen Ganzt op 0x3FFF. Déi méi héich zwee Bits si reservéiert a mussen op Null gesat ginn. Notzlaascht ass dofir limitéiert op 16 * 1024 - 1 Bytes.
Déi éischt AEAD Verschlësselungs-/Entschlësselungsoperatioun benotzt eng Zählungsnonce ab 0. No all Verschlësselungs-/Entschlësselungsoperatioun gëtt d'Nonce vun engem eropgebaut wéi wann et en net ënnerschriwwene Little-endian Ganzt wier. Notéiert datt all TCP-Stéck zwee AEAD-Verschlësselungs- / Entschlësseloperatiounen involvéiert: eng fir d'Notzlaaschtlängt, an eng fir d'Notzlaascht. Dofir erhéicht all Stéck den Nonce zweemol.