dokuméntasi Shadowsocks
napigasi
AeAD
AeAD nangtung pikeun Énkripsi Dioténtikasi sareng Data Patali. Cipher AEAD sakaligus nyadiakeun karusiahan, integritas, jeung kaaslian. Aranjeunna mibanda kinerja alus teuing jeung efisiensi kakuatan dina hardware modern. Pamaké kedah nganggo cipher AEAD sabisana.
Cipher AEAD di handap ieu disarankeun. Palaksanaan Shadowsocks anu patuh kedah ngadukung AEAD_CHACHA20_POLY1305. Implementasi pikeun alat anu gaduh akselerasi AES hardware ogé kedah nerapkeun AEAD_AES_128_GCM sareng AEAD_AES_256_GCM.
nami | alias | Ukuran konci | Ukuran uyah | Ukuran Nonce | Tag Ukuran |
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 |
Mangga tingal IANA AEAD pendaptaran pikeun skéma ngaran jeung spésifikasi.
Turunan konci
Konci master tiasa input langsung ti pangguna atanapi didamel tina kecap akses.
HKDF_SHA1 mangrupa fungsi nu nyokot konci rusiah, uyah non-rusiah, string info, sarta ngahasilkeun subkonci nu cryptographically kuat sanajan konci rusiah input lemah.
HKDF_SHA1(konci, uyah, info) => subkonci
Inpo string ngabeungkeut subkonci dihasilkeun kana konteks aplikasi husus. Dina kasus urang, éta kedah janten senar "ss-subkey" tanpa tanda petik.
Urang nurunkeun subkonci per-sesi tina konci master anu tos dibagikeun nganggo HKDF_SHA1. Uyah kedah unik sapanjang kahirupan konci master anu tos dibagikeun.
Énkripsi / Dekripsi Dioténtikasi
AE_encrypt mangrupakeun fungsi nu nyokot konci rusiah, nonce non-rusiah, pesen, sarta ngahasilkeun ciphertext sarta tag auténtikasi. Nonce kedah unik pikeun konci anu dipasihkeun dina unggal invocation.
AE_encrypt(konci, nonce, pesen) => (ciphertext, tag)
AE_decrypt mangrupikeun fungsi anu nyandak konci rusiah, nonce non-rusiah, ciphertext, tag auténtikasi, sareng ngahasilkeun pesen asli. Upami aya salah sahiji input anu dirusak, dekripsi bakal gagal.
AE_decrypt(key, nonce, ciphertext, tag) => pesen
TCP
Aliran TCP énkripsi AEAD dimimitian ku uyah anu dihasilkeun sacara acak pikeun nurunkeun subkonci per-sesi, dituturkeun ku sajumlah sakumpulan énkripsi. Unggal sapotong boga struktur handap:
[panjang payload énkripsi][tag panjang][payload énkripsi][tag payload]
Payload panjang nyaéta 2-bait badag-endian unsigned integer capped dina 0x3FFF. Dua bit anu langkung luhur ditangtayungan sareng kedah disetel ka nol. Payload ku kituna dugi ka 16 * 1024 - 1 bait.
Operasi encrypt / ngadekrip AEAD munggaran ngagunakeun nonce cacah mimitian ti 0. Sanggeus unggal operasi encrypt / ngadekrip, nonce ieu incremented ku hiji saolah-olah éta hiji integer saeutik-endian unsigned. Catet yén unggal chunk TCP ngalibatkeun dua operasi énkripsi / ngadekrip AEAD: hiji pikeun panjang payload, sareng hiji kanggo payload. Kituna unggal chunk naek nonce dua kali.
TCP
Aliran TCP énkripsi AEAD dimimitian ku uyah anu dihasilkeun sacara acak pikeun nurunkeun subkonci per-sesi, dituturkeun ku sajumlah sakumpulan énkripsi. Unggal sapotong boga struktur handap:
[panjang payload énkripsi][tag panjang][payload énkripsi][tag payload]
Payload panjang nyaéta 2-bait badag-endian unsigned integer capped dina 0x3FFF. Dua bit anu langkung luhur ditangtayungan sareng kedah disetel ka nol. Payload ku kituna dugi ka 16 * 1024 - 1 bait.
Operasi encrypt / ngadekrip AEAD munggaran ngagunakeun nonce cacah mimitian ti 0. Sanggeus unggal operasi encrypt / ngadekrip, nonce ieu incremented ku hiji saolah-olah éta hiji integer saeutik-endian unsigned. Catet yén unggal chunk TCP ngalibatkeun dua operasi énkripsi / ngadekrip AEAD: hiji pikeun panjang payload, sareng hiji kanggo payload. Kituna unggal chunk naek nonce dua kali.