Dokumentasi Shadowsocks

AeAD

AeAD bermaksud Penyulitan Disahkan dengan Data Berkaitan. Sifir AEAD secara serentak memberikan kerahsiaan, integriti dan ketulenan. Mereka mempunyai prestasi cemerlang dan kecekapan kuasa pada perkakasan moden. Pengguna harus menggunakan sifir AEAD apabila boleh.

Sifir AEAD berikut disyorkan. Pelaksanaan Shadowsocks yang mematuhi mesti menyokong AEAD_CHACHA20_POLY1305. Pelaksanaan untuk peranti dengan pecutan AES perkakasan juga harus melaksanakan AEAD_AES_128_GCM dan AEAD_AES_256_GCM.

 

 

 

Nama

Alias

Saiz Kunci

Saiz Garam

Saiz Nonce

Saiz 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

Sila rujuk kepada Pendaftaran IANA AEAD untuk skema penamaan dan spesifikasi.

Terbitan Utama

Kunci induk boleh dimasukkan terus daripada pengguna atau dijana daripada kata laluan.

HKDF_SHA1 ialah fungsi yang mengambil kunci rahsia, garam bukan rahsia, rentetan maklumat dan menghasilkan subkunci yang kuat dari segi kriptografi walaupun kunci rahsia input lemah.

HKDF_SHA1(kunci, garam, maklumat) => subkunci

Rentetan maklumat mengikat subkunci yang dijana kepada konteks aplikasi tertentu. Dalam kes kami, ia mestilah rentetan "ss-subkey" tanpa petikan.

Kami memperoleh subkunci setiap sesi daripada kunci induk prakongsi menggunakan HKDF_SHA1. Garam mestilah unik sepanjang hayat kunci induk prakongsi.

Penyulitan/Penyahsulitan Disulitkan

AE_encrypt ialah fungsi yang mengambil kunci rahsia, nonce bukan rahsia, mesej, dan menghasilkan teks sifir dan teg pengesahan. Nonce mestilah unik untuk kunci yang diberikan dalam setiap seruan.

AE_encrypt(kunci, nonce, mesej) => (sifirteks, tag)

 

AE_decrypt ialah fungsi yang mengambil kunci rahsia, nonce bukan rahsia, teks sifir, teg pengesahan dan menghasilkan mesej asal. Jika mana-mana input diganggu, penyahsulitan akan gagal.

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

TCP

Strim TCP yang disulitkan AEAD bermula dengan garam yang dijana secara rawak untuk memperoleh subkunci setiap sesi, diikuti dengan sebarang bilangan ketulan yang disulitkan. Setiap ketulan mempunyai struktur berikut:

[panjang muatan disulitkan][teg panjang][muatan disulitkan][teg muatan]

 

Panjang muatan ialah integer tidak bertanda big-endian 2-bait yang dihadkan pada 0x3FFF. Dua bit yang lebih tinggi dikhaskan dan mesti ditetapkan kepada sifar. Oleh itu muatan adalah terhad kepada 16*1024 – 1 bait.

Operasi penyulitan/nyahsulit AEAD yang pertama menggunakan pengiraan nonce bermula dari 0. Selepas setiap operasi penyulitan/nyahsulit, nonce itu ditambah dengan satu seolah-olah ia adalah integer kecil-endian yang tidak ditandatangani. Ambil perhatian bahawa setiap bahagian TCP melibatkan dua operasi penyulitan/nyahsulit AEAD: satu untuk panjang muatan dan satu untuk muatan. Oleh itu setiap ketul menambah nonce dua kali.

TCP

Strim TCP yang disulitkan AEAD bermula dengan garam yang dijana secara rawak untuk memperoleh subkunci setiap sesi, diikuti dengan sebarang bilangan ketulan yang disulitkan. Setiap ketulan mempunyai struktur berikut:

[panjang muatan disulitkan][teg panjang][muatan disulitkan][teg muatan]

 

Panjang muatan ialah integer tidak bertanda big-endian 2-bait yang dihadkan pada 0x3FFF. Dua bit yang lebih tinggi dikhaskan dan mesti ditetapkan kepada sifar. Oleh itu muatan adalah terhad kepada 16*1024 – 1 bait.

Operasi penyulitan/nyahsulit AEAD yang pertama menggunakan pengiraan nonce bermula dari 0. Selepas setiap operasi penyulitan/nyahsulit, nonce itu ditambah dengan satu seolah-olah ia adalah integer kecil-endian yang tidak ditandatangani. Ambil perhatian bahawa setiap bahagian TCP melibatkan dua operasi penyulitan/nyahsulit AEAD: satu untuk panjang muatan dan satu untuk muatan. Oleh itu setiap ketul menambah nonce dua kali.

Mulakan percubaan Percuma 5 hari anda