Dokumentasyon sa Shadowsocks
tabok-tabok
AEAD
AEAD nagpasabot sa Authenticated Encryption with Associated Data. Ang mga cipher sa AEAD dungan nga naghatag ug kompidensyal, integridad, ug kasaligan. Sila adunay maayo kaayo nga performance ug power efficiency sa modernong hardware. Ang mga tiggamit kinahanglan nga mogamit sa AEAD ciphers kung mahimo.
Ang mosunod nga mga AEAD ciphers girekomendar. Ang pagsunod sa mga pagpatuman sa Shadowsocks kinahanglang mosuporta sa AEAD_CHACHA20_POLY1305. Ang mga pag-implementar para sa mga device nga adunay hardware nga AES acceleration kinahanglan usab nga ipatuman ang AEAD_AES_128_GCM ug AEAD_AES_256_GCM.
ngalan | alyas | Gidak-on sa yawe | Gidak-on sa asin | Nonce Size | Tag Gidak |
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 |
Palihug tan-awa IANA AEAD rehistro alang sa pamaagi sa pagngalan ug espesipikasyon.
Key Derivation
Ang master key mahimong direktang input gikan sa user o namugna gikan sa usa ka password.
HKDF_SHA1 mao ang usa ka function nga nagkinahanglan sa usa ka sekreto nga yawe, usa ka dili tinago nga asin, usa ka info string, ug naghimo sa usa ka subkey nga cryptographically lig-on bisan kon ang input sekreto nga yawe huyang.
HKDF_SHA1(key, asin, impormasyon) => subkey
Ang info string nagbugkos sa nahimo nga subkey sa usa ka piho nga konteksto sa aplikasyon. Sa among kaso, kini kinahanglan nga ang string nga "ss-subkey" nga walay mga kinutlo.
Nagkuha mi og subkey kada-session gikan sa usa ka pre-shared master key gamit ang HKDF_SHA1. Ang asin kinahanglan nga talagsaon sa tibuok kinabuhi sa pre-shared master key.
Gipamatud-an nga Encryption/Decryption
Ang AE_encrypt usa ka function nga nagkuha usa ka sekreto nga yawe, usa ka dili sekreto nga nonce, usa ka mensahe, ug naghimo og ciphertext ug usa ka tag sa pag-authenticate. Ang Nonce kinahanglan nga talagsaon alang sa gihatag nga yawe sa matag pag-ampo.
AE_encrypt(key, nonce, message) => (ciphertext, tag)
Ang AE_decrypt kay usa ka function nga nagkuha ug sekreto nga yawe, dili sekreto nga nonce, ciphertext, usa ka authentication tag, ug naghimo ug orihinal nga mensahe. Kung adunay bisan unsang input nga gisamok, ang pag-decryption mapakyas.
AE_decrypt(key, nonce, ciphertext, tag) => mensahe
TCP
Ang AEAD nga naka-encrypt nga TCP stream nagsugod sa usa ka random nga namugna nga asin aron makuha ang matag-sesyon nga subkey, nga gisundan sa bisan unsang gidaghanon sa mga na-encrypt nga tipik. Ang matag tipak adunay mosunod nga istruktura:
[naka-encrypt nga payload length][length tag][encrypted payload][payload tag]
Ang gitas-on sa payload usa ka 2-byte nga big-endian nga unsigned integer nga gitakpan sa 0x3FFF. Ang mas taas nga duha ka bit kay gireserba ug kinahanglang ibutang sa zero. Busa ang payload limitado sa 16*1024 – 1 bytes.
Ang unang AEAD encrypt/decrypt nga operasyon naggamit ug counting nonce sugod sa 0. Human sa matag encrypt/decrypt operation, ang nonce gidugangan sa usa nga murag unsigned little-endian integer. Timan-i nga ang matag TCP chunk naglakip sa duha ka AEAD encrypt/decrypt operations: usa alang sa payload length, ug usa alang sa payload. Busa ang matag tipik nagdugang sa dili kaduha kaduha.
TCP
Ang AEAD nga naka-encrypt nga TCP stream nagsugod sa usa ka random nga namugna nga asin aron makuha ang matag-sesyon nga subkey, nga gisundan sa bisan unsang gidaghanon sa mga na-encrypt nga tipik. Ang matag tipak adunay mosunod nga istruktura:
[naka-encrypt nga payload length][length tag][encrypted payload][payload tag]
Ang gitas-on sa payload usa ka 2-byte nga big-endian nga unsigned integer nga gitakpan sa 0x3FFF. Ang mas taas nga duha ka bit kay gireserba ug kinahanglang ibutang sa zero. Busa ang payload limitado sa 16*1024 – 1 bytes.
Ang unang AEAD encrypt/decrypt nga operasyon naggamit ug counting nonce sugod sa 0. Human sa matag encrypt/decrypt operation, ang nonce gidugangan sa usa nga murag unsigned little-endian integer. Timan-i nga ang matag TCP chunk naglakip sa duha ka AEAD encrypt/decrypt operations: usa alang sa payload length, ug usa alang sa payload. Busa ang matag tipik nagdugang sa dili kaduha kaduha.