Dokumentasi Shadowsocks

AeAD

AeAD singkatan saka Authenticated Encryption with Associated Data. Cipher AEAD bebarengan nyedhiyakake rahasia, integritas, lan keaslian. Padha duwe kinerja banget lan efisiensi daya ing hardware modern. Pangguna kudu nggunakake cipher AEAD yen bisa.

Cipher AEAD ing ngisor iki dianjurake. Implementasi Shadowsocks sing tundhuk kudu ndhukung AEAD_CHACHA20_POLY1305. Implementasi kanggo piranti kanthi akselerasi AES hardware uga kudu ngetrapake AEAD_AES_128_GCM lan AEAD_AES_256_GCM.

 

 

 

jeneng

alias

Ukuran Kunci

Ukuran garam

Ukuran Nonce

Ukuran Tag

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 deleng Registrasi IANA AEAD kanggo skema jeneng lan spesifikasi.

Derivasi Kunci

Tombol master bisa input langsung saka pangguna utawa digawe saka sandhi.

HKDF_SHA1 punika fungsi sing njupuk kunci rahasia, uyah non-rahasia, senar info, lan mrodhuksi subkey sing cryptographically kuwat sanajan kunci rahasia input banget.

HKDF_SHA1(kunci, uyah, info) => subkey

String info ngiket subkunci sing digawe menyang konteks aplikasi tartamtu. Ing kasus kita, kudu dadi senar "ss-subkey" tanpa tanda kutip.

Kita entuk subkunci saben sesi saka kunci master sing wis dienggo bareng nggunakake HKDF_SHA1. Garam kudu unik sajrone urip kunci master sing wis dienggo bareng.

Enkripsi / Dekripsi sing Diotentikasi

AE_encrypt minangka fungsi sing njupuk kunci rahasia, nonce non-rahasia, pesen, lan ngasilake ciphertext lan tag otentikasi. Nonce kudu unik kanggo kunci sing diwenehake ing saben invocation.

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

 

AE_decrypt minangka fungsi sing njupuk kunci rahasia, nonce non-rahasia, ciphertext, tag otentikasi, lan ngasilake pesen asli. Yen salah sawijining input dirusak, dekripsi bakal gagal.

AE_decrypt(key, nonce, ciphertext, tag) => pesen

TCP

Aliran TCP sing dienkripsi AEAD diwiwiti kanthi uyah sing diasilake kanthi acak kanggo nurunake subkunci saben sesi, diikuti karo potongan sing dienkripsi. Saben potongan nduweni struktur ing ngisor iki:

[panjang muatan terenkripsi][tag panjang][beban terenkripsi][tag muatan]

 

Dawane muatan yaiku 2-byte big-endian integer unsigned capped ing 0x3FFF. Rong bit sing luwih dhuwur disimpen lan kudu disetel menyang nol. Payload mula diwatesi dadi 16 * 1024 - 1 bita.

Operasi enkripsi / dekripsi AEAD pisanan nggunakake nonce pancacahan wiwit saka 0. Sawise saben operasi enkripsi / dekripsi, nonce ditambahake siji kaya-kaya minangka integer endian cilik sing ora ditandatangani. Elinga yen saben potongan TCP kalebu rong operasi enkripsi / dekripsi AEAD: siji kanggo dawa muatan, lan siji kanggo muatan. Mulane saben potongan mundhak kaping pindho.

TCP

Aliran TCP sing dienkripsi AEAD diwiwiti kanthi uyah sing diasilake kanthi acak kanggo nurunake subkunci saben sesi, diikuti karo potongan sing dienkripsi. Saben potongan nduweni struktur ing ngisor iki:

[panjang muatan terenkripsi][tag panjang][beban terenkripsi][tag muatan]

 

Dawane muatan yaiku 2-byte big-endian integer unsigned capped ing 0x3FFF. Rong bit sing luwih dhuwur disimpen lan kudu disetel menyang nol. Payload mula diwatesi dadi 16 * 1024 - 1 bita.

Operasi enkripsi / dekripsi AEAD pisanan nggunakake nonce pancacahan wiwit saka 0. Sawise saben operasi enkripsi / dekripsi, nonce ditambahake siji kaya-kaya minangka integer endian cilik sing ora ditandatangani. Elinga yen saben potongan TCP kalebu rong operasi enkripsi / dekripsi AEAD: siji kanggo dawa muatan, lan siji kanggo muatan. Mulane saben potongan mundhak kaping pindho.

Miwiti nyoba gratis 5 dina