Shadowsocks hujjatlari

AEAD

AEAD Bog'langan ma'lumotlar bilan autentifikatsiya qilingan shifrlash degan ma'noni anglatadi. AEAD shifrlari bir vaqtning o'zida maxfiylik, yaxlitlik va haqiqiylikni ta'minlaydi. Ular zamonaviy uskunada mukammal ishlash va quvvat samaradorligiga ega. Foydalanuvchilar iloji boricha AEAD shifrlaridan foydalanishlari kerak.

Quyidagi AEAD shifrlari tavsiya etiladi. Mos Shadowsocks ilovalari AEAD_CHACHA20_POLY1305 ni qo‘llab-quvvatlashi kerak. Uskuna AES tezlashuviga ega qurilmalar uchun ilovalar, shuningdek, AEAD_AES_128_GCM va AEAD_AES_256_GCMni ham qo'llashi kerak.

 

 

 

Ism

afsus

Kalit hajmi

Tuz hajmi

Keraksiz o'lcham

Tag hajmi

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

Iltimos, qarang IANA AEAD reestri nomlash sxemasi va spetsifikatsiyasi uchun.

Kalit hosilasi

Asosiy kalit to'g'ridan-to'g'ri foydalanuvchi tomonidan kiritilishi yoki paroldan yaratilishi mumkin.

HKDF_SHA1 maxfiy kalitni, maxfiy bo'lmagan tuzni, ma'lumot qatorini oladigan va kirish maxfiy kaliti zaif bo'lsa ham kriptografik jihatdan kuchli bo'lgan pastki kalitni ishlab chiqaradigan funksiyadir.

HKDF_SHA1 (kalit, tuz, ma'lumot) => pastki kalit

Ma'lumot qatori yaratilgan pastki kalitni ma'lum bir dastur kontekstiga bog'laydi. Bizning holatda, bu tirnoqsiz "ss-subkey" qatori bo'lishi kerak.

Biz HKDF_SHA1 yordamida oldindan ulashilgan asosiy kalitdan har bir sessiya uchun pastki kalitni olamiz. Tuz oldindan ulashilgan asosiy kalitning butun umri davomida noyob bo'lishi kerak.

Autentifikatsiya qilingan shifrlash/deshifrlash

AE_encrypt - bu maxfiy kalitni, maxfiy bo'lmagan xabarni, xabarni qabul qiladigan va shifrlangan matn va autentifikatsiya tegini ishlab chiqaradigan funksiya. Nonce har bir chaqiruvda berilgan kalit uchun noyob bo'lishi kerak.

AE_encrypt(kalit, bo'lmagan, xabar) => (shifrlangan matn, teg)

 

AE_decrypt - bu maxfiy kalit, maxfiy bo'lmagan, shifrlangan matn, autentifikatsiya tegini oladigan va original xabarni ishlab chiqaradigan funksiya. Agar kirishlardan birortasi buzilgan bo'lsa, shifrni ochish muvaffaqiyatsiz bo'ladi.

AE_decrypt(kalit, nonce, shifrlangan matn, teg) => xabar

TCP

AEAD shifrlangan TCP oqimi har bir seans uchun pastki kalitni olish uchun tasodifiy yaratilgan tuzdan boshlanadi, keyin esa istalgan miqdordagi shifrlangan bo'laklar keladi. Har bir bo'lak quyidagi tuzilishga ega:

[shifrlangan foydali yuk uzunligi][uzunlik yorlig'i][shifrlangan foydali yuk][foydali yuk yorlig'i]

 

Foydali yuk uzunligi 2x0FFF bilan chegaralangan 3 baytli katta-endian belgisiz butun son. Yuqori ikki bit ajratilgan va nolga o'rnatilishi kerak. Shuning uchun foydali yuk 16 * 1024 - 1 bayt bilan cheklangan.

Birinchi AEAD shifrlash/shifrini yechish operatsiyasi 0 dan boshlanadigan hisoblash noncesidan foydalanadi. Har bir shifrlash/shifrini yechish operatsiyasidan so‘ng, notans bir belgisiz kichik endian butun songa o‘xshab bittaga oshiriladi. E'tibor bering, har bir TCP bo'lagi ikkita AEAD shifrlash/shifrini ochish amaliyotini o'z ichiga oladi: biri foydali yuk uzunligi uchun, ikkinchisi foydali yuk uchun. Shuning uchun har bir bo'lak nonceni ikki marta oshiradi.

TCP

AEAD shifrlangan TCP oqimi har bir seans uchun pastki kalitni olish uchun tasodifiy yaratilgan tuzdan boshlanadi, keyin esa istalgan miqdordagi shifrlangan bo'laklar keladi. Har bir bo'lak quyidagi tuzilishga ega:

[shifrlangan foydali yuk uzunligi][uzunlik yorlig'i][shifrlangan foydali yuk][foydali yuk yorlig'i]

 

Foydali yuk uzunligi 2x0FFF bilan chegaralangan 3 baytli katta-endian belgisiz butun son. Yuqori ikki bit ajratilgan va nolga o'rnatilishi kerak. Shuning uchun foydali yuk 16 * 1024 - 1 bayt bilan cheklangan.

Birinchi AEAD shifrlash/shifrini yechish operatsiyasi 0 dan boshlanadigan hisoblash noncesidan foydalanadi. Har bir shifrlash/shifrini yechish operatsiyasidan so‘ng, notans bir belgisiz kichik endian butun songa o‘xshab bittaga oshiriladi. E'tibor bering, har bir TCP bo'lagi ikkita AEAD shifrlash/shifrini ochish amaliyotini o'z ichiga oladi: biri foydali yuk uzunligi uchun, ikkinchisi foydali yuk uchun. Shuning uchun har bir bo'lak nonceni ikki marta oshiradi.

5 kunlik bepul sinov muddatini boshlang