Документация на Shadowsocks

НАЧАЛО

НАЧАЛО означава Удостоверено шифроване със свързани данни. AEAD шифрите осигуряват едновременно поверителност, цялост и автентичност. Те имат отлична производителност и енергийна ефективност на модерен хардуер. Потребителите трябва да използват AEAD шифри, когато е възможно.

Препоръчват се следните AEAD шифри. Съвместимите реализации на Shadowsocks трябва да поддържат AEAD_CHACHA20_POLY1305. Реализациите за устройства с хардуерно AES ускорение също трябва да прилагат AEAD_AES_128_GCM и AEAD_AES_256_GCM.

 

 

 

Име

Псевдоним

Размер на ключ

Размер на солта

Nonce Размер

Размер на маркера

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

Моля, вижте Регистър на IANA AEAD за схема за именуване и спецификация.

Извличане на ключ

Главният ключ може да бъде въведен директно от потребителя или генериран от парола.

HKDF_SHA1 е функция, която взема таен ключ, несекретна сол, информационен низ и произвежда подключ, който е криптографски силен, дори ако входният таен ключ е слаб.

HKDF_SHA1(ключ, сол, информация) => подключ

Информационният низ свързва генерирания подключ към конкретен контекст на приложение. В нашия случай това трябва да е низът „ss-subkey“ без кавички.

Ние извличаме подключ за сесия от предварително споделен главен ключ, използвайки HKDF_SHA1. Солта трябва да бъде уникална през целия живот на предварително споделения главен ключ.

Удостоверено криптиране/декриптиране

AE_encrypt е функция, която взема таен ключ, нетаен nonce, съобщение и произвежда шифрован текст и таг за удостоверяване. Nonce трябва да бъде уникален за даден ключ при всяко извикване.

AE_encrypt(key, nonce, message) => (шифрован текст, етикет)

 

AE_decrypt е функция, която взема таен ключ, non-sekret nonce, шифрован текст, таг за удостоверяване и създава оригинално съобщение. Ако някой от въведените данни бъде манипулиран, декриптирането ще бъде неуспешно.

AE_decrypt(key, nonce, ciphertext, tag) => съобщение

TCP

AEAD криптиран TCP поток започва с произволно генерирана сол за извличане на подключа за сесия, последван от произволен брой криптирани парчета. Всяка част има следната структура:

[дължина на шифрован полезен товар][етикет за дължина][шифрован полезен товар][етикет на полезен товар]

 

Дължината на полезния товар е 2-байтово цяло число без знак с начален край на порядъка, ограничено до 0x3FFF. По-високите два бита са запазени и трябва да бъдат зададени на нула. Следователно полезният товар е ограничен до 16*1024 – 1 байта.

Първата операция за шифроване/декриптиране на AEAD използва еднократно число за отчитане, започващо от 0. След всяка операция за шифроване/декриптиране, еднократното число се увеличава с единица, сякаш е цяло число без знак с малък ред. Обърнете внимание, че всяка TCP част включва две AEAD операции за криптиране/декриптиране: една за дължината на полезния товар и една за полезния товар. Следователно всяка част увеличава nonce два пъти.

TCP

AEAD криптиран TCP поток започва с произволно генерирана сол за извличане на подключа за сесия, последван от произволен брой криптирани парчета. Всяка част има следната структура:

[дължина на шифрован полезен товар][етикет за дължина][шифрован полезен товар][етикет на полезен товар]

 

Дължината на полезния товар е 2-байтово цяло число без знак с начален край на порядъка, ограничено до 0x3FFF. По-високите два бита са запазени и трябва да бъдат зададени на нула. Следователно полезният товар е ограничен до 16*1024 – 1 байта.

Първата операция за шифроване/декриптиране на AEAD използва еднократно число за отчитане, започващо от 0. След всяка операция за шифроване/декриптиране, еднократното число се увеличава с единица, сякаш е цяло число без знак с малък ред. Обърнете внимание, че всяка TCP част включва две AEAD операции за криптиране/декриптиране: една за дължината на полезния товар и една за полезния товар. Следователно всяка част увеличава nonce два пъти.

Започнете своя 5-дневен безплатен пробен период