Dokumentasyon ng Shadowsocks

AeAD

AeAD ang ibig sabihin ay Authenticated Encryption with Associated Data. Ang mga AEAD cipher ay sabay-sabay na nagbibigay ng kumpidensyal, integridad, at pagiging tunay. Mayroon silang mahusay na pagganap at kahusayan ng kapangyarihan sa modernong hardware. Ang mga gumagamit ay dapat gumamit ng mga AEAD cipher hangga't maaari.

Ang mga sumusunod na AEAD cipher ay inirerekomenda. Dapat suportahan ng mga sumusunod na pagpapatupad ng Shadowsocks ang AEAD_CHACHA20_POLY1305. Ang mga pagpapatupad para sa mga device na may hardware na AES acceleration ay dapat ding magpatupad ng AEAD_AES_128_GCM at AEAD_AES_256_GCM.

 

 

 

Pangalan

Bansag

Sukat ng Susi

Sukat ng asin

Nonce Size

Laki ng 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

Mangyaring sumangguni sa IANA AEAD registry para sa scheme ng pagpapangalan at detalye.

Key Derivation

Ang master key ay maaaring direktang i-input mula sa user o nabuo mula sa isang password.

HKDF_SHA1 ay isang function na kumukuha ng secret key, non-secret salt, info string, at gumagawa ng subkey na cryptographically strong kahit mahina ang input secret key.

HKDF_SHA1(key, asin, impormasyon) => subkey

Ang string ng impormasyon ay nagbubuklod sa nabuong subkey sa isang partikular na konteksto ng application. Sa aming kaso, ito ay dapat na ang string na "ss-subkey" na walang mga panipi.

Kumuha kami ng per-session subkey mula sa isang pre-shared master key gamit ang HKDF_SHA1. Ang asin ay dapat na natatangi sa buong buhay ng pre-shared master key.

Authenticated Encryption/Decryption

Ang AE_encrypt ay isang function na kumukuha ng secret key, non-secret nonce, mensahe, at gumagawa ng ciphertext at authentication tag. Dapat na natatangi ang Nonce para sa isang ibinigay na susi sa bawat invocation.

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

 

Ang AE_decrypt ay isang function na kumukuha ng secret key, non-secret nonce, ciphertext, authentication tag, at gumagawa ng orihinal na mensahe. Kung ang alinman sa mga input ay pinakialaman, ang pag-decryption ay mabibigo.

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

TCP

Ang isang stream ng TCP na naka-encrypt ng AEAD ay nagsisimula sa isang random na nabuong asin upang makuha ang subkey sa bawat session, na sinusundan ng anumang bilang ng mga naka-encrypt na chunks. Ang bawat tipak ay may sumusunod na istraktura:

[naka-encrypt na haba ng payload][haba ng tag][naka-encrypt na payload][tag ng payload]

 

Ang haba ng payload ay isang 2-byte na big-endian na unsigned integer na nilimitahan sa 0x3FFF. Ang mas mataas na dalawang bit ay nakalaan at dapat itakda sa zero. Ang payload ay samakatuwid ay limitado sa 16*1024 – 1 byte.

Ang unang operasyon ng pag-encrypt/pag-decrypt ng AEAD ay gumagamit ng pagbibilang na nonce simula sa 0. Pagkatapos ng bawat operasyon ng pag-encrypt/pag-decrypt, ang nonce ay dinaragdagan ng isa na para bang ito ay isang unsigned little-endian integer. Tandaan na ang bawat TCP chunk ay may kasamang dalawang AEAD encrypt/decrypt operations: isa para sa haba ng payload, at isa para sa payload. Samakatuwid ang bawat tipak ay nagdaragdag ng nonce dalawang beses.

TCP

Ang isang stream ng TCP na naka-encrypt ng AEAD ay nagsisimula sa isang random na nabuong asin upang makuha ang subkey sa bawat session, na sinusundan ng anumang bilang ng mga naka-encrypt na chunks. Ang bawat tipak ay may sumusunod na istraktura:

[naka-encrypt na haba ng payload][haba ng tag][naka-encrypt na payload][tag ng payload]

 

Ang haba ng payload ay isang 2-byte na big-endian na unsigned integer na nilimitahan sa 0x3FFF. Ang mas mataas na dalawang bit ay nakalaan at dapat itakda sa zero. Ang payload ay samakatuwid ay limitado sa 16*1024 – 1 byte.

Ang unang operasyon ng pag-encrypt/pag-decrypt ng AEAD ay gumagamit ng pagbibilang na nonce simula sa 0. Pagkatapos ng bawat operasyon ng pag-encrypt/pag-decrypt, ang nonce ay dinaragdagan ng isa na para bang ito ay isang unsigned little-endian integer. Tandaan na ang bawat TCP chunk ay may kasamang dalawang AEAD encrypt/decrypt operations: isa para sa haba ng payload, at isa para sa payload. Samakatuwid ang bawat tipak ay nagdaragdag ng nonce dalawang beses.

Simulan ang iyong 5-araw na Libreng pagsubok