Дакументацыя Shadowsocks

AEAD

AEAD расшыфроўваецца як аўтэнтыфікаванае шыфраванне са звязанымі дадзенымі. Шыфры 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 - гэта функцыя, якая прымае сакрэтны ключ, несакрэтны nonce, зашыфраваны тэкст, тэг аўтэнтыфікацыі і стварае арыгінальнае паведамленне. Калі што-небудзь з уводу будзе падроблена, расшыфроўка не атрымаецца.

AE_decrypt(key, nonce, ciphertext, tag) => паведамленне

TCP

TCP-паток, зашыфраваны AEAD, пачынаецца з выпадкова згенераванай солі для атрымання падключа для кожнага сеансу, за якім варта любая колькасць зашыфраваных фрагментаў. Кожны чанк мае наступную структуру:

[даўжыня зашыфраванай карыснай нагрузкі][тэг даўжыні][зашыфраваная карысная нагрузка][тэг карыснай нагрузкі]

 

Даўжыня карыснай нагрузкі - гэта 2-байтавае цэлае без знака ў парадку байтавання, абмежаванае 0x3FFF. Два старэйшыя біты зарэзерваваны і павінны быць усталяваны ў нуль. Таму карысная нагрузка абмежаваная 16*1024 – 1 байтам.

Першая аперацыя шыфравання/дэшыфравання AEAD выкарыстоўвае nonce для падліку, пачынаючы з 0. Пасля кожнай аперацыі шыфравання/дэшыфравання nonce павялічваецца на адзінку, як калі б гэта было цэлае лік без знака з пачаткам маленькага байта. Звярніце ўвагу, што кожны фрагмент TCP уключае дзве аперацыі шыфравання/дэшыфравання AEAD: адну для даўжыні карыснай нагрузкі і другую для карыснай нагрузкі. Такім чынам, кожны чанк павялічвае nonce удвая.

TCP

TCP-паток, зашыфраваны AEAD, пачынаецца з выпадкова згенераванай солі для атрымання падключа для кожнага сеансу, за якім варта любая колькасць зашыфраваных фрагментаў. Кожны чанк мае наступную структуру:

[даўжыня зашыфраванай карыснай нагрузкі][тэг даўжыні][зашыфраваная карысная нагрузка][тэг карыснай нагрузкі]

 

Даўжыня карыснай нагрузкі - гэта 2-байтавае цэлае без знака ў парадку байтавання, абмежаванае 0x3FFF. Два старэйшыя біты зарэзерваваны і павінны быць усталяваны ў нуль. Таму карысная нагрузка абмежаваная 16*1024 – 1 байтам.

Першая аперацыя шыфравання/дэшыфравання AEAD выкарыстоўвае nonce для падліку, пачынаючы з 0. Пасля кожнай аперацыі шыфравання/дэшыфравання nonce павялічваецца на адзінку, як калі б гэта было цэлае лік без знака з пачаткам маленькага байта. Звярніце ўвагу, што кожны фрагмент TCP уключае дзве аперацыі шыфравання/дэшыфравання AEAD: адну для даўжыні карыснай нагрузкі і другую для карыснай нагрузкі. Такім чынам, кожны чанк павялічвае nonce удвая.

Пачніце 5-дзённую бясплатную пробную версію