Dokumentasi Shadowsocks

AEAD

AEAD singkatan dari Authenticated Encryption with Associated Data. Cipher AEAD secara bersamaan memberikan kerahasiaan, integritas, dan keaslian. Mereka memiliki kinerja luar biasa dan efisiensi daya pada perangkat keras modern. Pengguna harus menggunakan cipher AEAD jika memungkinkan.

Cipher AEAD berikut direkomendasikan. Implementasi Shadowsocks yang sesuai harus mendukung AEAD_CHACHA20_POLY1305. Implementasi untuk perangkat dengan akselerasi hardware AES juga harus mengimplementasikan AEAD_AES_128_GCM dan AEAD_AES_256_GCM.

 

 

 

Nama

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

Silakan lihat Registri IANA AEAD untuk skema penamaan dan spesifikasi.

Derivasi Kunci

Kunci master dapat dimasukkan langsung dari pengguna atau dihasilkan dari kata sandi.

HKDF_SHA1 adalah fungsi yang mengambil kunci rahasia, garam non-rahasia, string info, dan menghasilkan subkunci yang kuat secara kriptografik meskipun kunci rahasia yang dimasukkan lemah.

HKDF_SHA1(kunci, garam, info) => subkunci

String info mengikat subkunci yang dihasilkan ke konteks aplikasi tertentu. Dalam kasus kami, itu harus berupa string "ss-subkey" tanpa tanda kutip.

Kami memperoleh subkunci per sesi dari kunci master yang dibagikan sebelumnya menggunakan HKDF_SHA1. Salt harus unik sepanjang masa pakai kunci master yang dibagikan sebelumnya.

Enkripsi/Dekripsi Terautentikasi

AE_encrypt adalah fungsi yang mengambil kunci rahasia, non-rahasia, pesan, dan menghasilkan ciphertext dan tag otentikasi. Nonce harus unik untuk kunci tertentu di setiap pemanggilan.

AE_encrypt(kunci, nonce, pesan) => (ciphertext, tag)

 

AE_decrypt adalah fungsi yang mengambil kunci rahasia, non-rahasia nonce, ciphertext, tag otentikasi, dan menghasilkan pesan asli. Jika salah satu input dirusak, dekripsi akan gagal.

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

TCP

Aliran TCP terenkripsi AEAD dimulai dengan garam yang dibuat secara acak untuk mendapatkan subkunci per sesi, diikuti oleh sejumlah potongan terenkripsi. Setiap potongan memiliki struktur berikut:

[panjang muatan terenkripsi][label panjang][muatan terenkripsi][tag muatan]

 

Panjang payload adalah 2-byte big-endian unsigned integer yang dibatasi pada 0x3FFF. Dua bit yang lebih tinggi dicadangkan dan harus disetel ke nol. Oleh karena itu, payload dibatasi hingga 16*1024 – 1 byte.

Operasi enkripsi/dekripsi AEAD pertama menggunakan nonce penghitungan mulai dari 0. Setelah setiap operasi enkripsi/dekripsi, nonce bertambah satu seolah-olah itu adalah bilangan bulat little-endian yang tidak ditandatangani. Perhatikan bahwa setiap potongan TCP melibatkan dua operasi enkripsi/dekripsi AEAD: satu untuk panjang payload, dan satu untuk payload. Oleh karena itu setiap potongan meningkatkan nonce dua kali.

TCP

Aliran TCP terenkripsi AEAD dimulai dengan garam yang dibuat secara acak untuk mendapatkan subkunci per sesi, diikuti oleh sejumlah potongan terenkripsi. Setiap potongan memiliki struktur berikut:

[panjang muatan terenkripsi][label panjang][muatan terenkripsi][tag muatan]

 

Panjang payload adalah 2-byte big-endian unsigned integer yang dibatasi pada 0x3FFF. Dua bit yang lebih tinggi dicadangkan dan harus disetel ke nol. Oleh karena itu, payload dibatasi hingga 16*1024 – 1 byte.

Operasi enkripsi/dekripsi AEAD pertama menggunakan nonce penghitungan mulai dari 0. Setelah setiap operasi enkripsi/dekripsi, nonce bertambah satu seolah-olah itu adalah bilangan bulat little-endian yang tidak ditandatangani. Perhatikan bahwa setiap potongan TCP melibatkan dua operasi enkripsi/dekripsi AEAD: satu untuk panjang payload, dan satu untuk payload. Oleh karena itu setiap potongan meningkatkan nonce dua kali.

Mulai uji coba gratis 5 hari Anda