Shadowsocks баримт бичиг

НЭГЭН

НЭГЭН Холбоотой өгөгдөлтэй баталгаажуулсан шифрлэлтийн товчлол. AEAD шифрүүд нь нууцлал, бүрэн бүтэн байдал, жинхэнэ байдлыг нэгэн зэрэг хангадаг. Тэд орчин үеийн техник хангамж дээр маш сайн гүйцэтгэл, эрчим хүчний хэмнэлттэй байдаг. Хэрэглэгчид боломжтой бол AEAD шифрийг ашиглах хэрэгтэй.

Дараах AEAD шифрийг ашиглахыг зөвлөж байна. Тохиромжтой Shadowsocks хэрэгжүүлэлт нь AEAD_CHACHA20_POLY1305-г дэмжих ёстой. Техник хангамжийн AES хурдатгалтай төхөөрөмжүүдийн хэрэгжилт нь AEAD_AES_128_GCM болон AEAD_AES_256_GCM-г мөн хэрэгжүүлэх ёстой.

 

 

 

нэр

Alias

Түлхүүр хэмжээ

Давсны хэмжээ

Хэмжээгүй

Tag Хэмжээ

AEAD_CHACHA20_POLY1305

chacha20-ietf-poly1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-гсм

32

32

12

16

AEAD_AES_128_GCM

aes-128-гсм

16

16

12

16

Лавлана уу IANA AEAD бүртгэл нэршлийн схем болон тодорхойлолтод зориулагдсан.

Түлхүүр гарал үүсэл

Мастер түлхүүрийг хэрэглэгчээс шууд оруулах эсвэл нууц үгээр үүсгэж болно.

HKDF_SHA1 нь нууц түлхүүр, нууц бус давс, мэдээллийн мөрийг авч, оролтын нууц түлхүүр сул байсан ч криптографийн хувьд хүчтэй дэд түлхүүр үүсгэдэг функц юм.

HKDF_SHA1(түлхүүр, давс, мэдээлэл) => дэд түлхүүр

Мэдээллийн мөр нь үүсгэсэн дэд түлхүүрийг тодорхой програмын контексттэй холбодог. Манай тохиолдолд энэ нь хашилтгүй "ss-subkey" гэсэн мөр байх ёстой.

Бид HKDF_SHA1 ашиглан урьдчилан хуваалцсан мастер түлхүүрээс сесс бүрийн дэд түлхүүр гаргаж авдаг. Давс нь урьдчилан хуваалцсан мастер түлхүүрийн ашиглалтын туршид өвөрмөц байх ёстой.

Баталгаажсан шифрлэлт/шифр тайлах

AE_encrypt нь нууц түлхүүр, нууц бус мессеж, мессежийг авч, шифр текст болон баталгаажуулалтын шошго үүсгэдэг функц юм. Nonce нь дуудлага бүрт өгөгдсөн түлхүүрийн хувьд өвөрмөц байх ёстой.

AE_encrypt(түлхүүр, үл мэдэгдэх, мессеж) => (шифр текст, шошго)

 

AE_decrypt нь нууц түлхүүр, нууц бус нууц үг, шифр текст, баталгаажуулалтын шошго авч, анхны мессеж үүсгэдэг функц юм. Хэрэв оролтын аль нэгийг нь өөрчилсөн бол шифрийг тайлах ажиллагаа амжилтгүй болно.

AE_decrypt(түлхүүр, нууц үг, шифр текст, шошго) => мессеж

TCP

AEAD шифрлэгдсэн TCP урсгал нь сесс бүрийн дэд түлхүүрийг гаргаж авахын тулд санамсаргүй байдлаар үүсгэгдсэн давсаар эхэлж, дараа нь хэдэн ч шифрлэгдсэн хэсгүүд орно. Хэсэг бүр дараах бүтэцтэй байна.

[шифрлэгдсэн ачааны урт][урт шошго][шифрлэгдсэн ачаалал][ачааллын шошго]

 

Ачааллын урт нь 2x0FFF-ээр хязгаарлагдсан 3 байт том-эндиан тэмдэггүй бүхэл тоо юм. Дээд хоёр битийг нөөцөлсөн бөгөөд тэг болгож тохируулах ёстой. Тиймээс ачааллыг 16*1024 – 1 байтаар хязгаарласан.

Анхны AEAD шифрлэх/тайлах үйлдэл нь 0-ээс эхлэн тоолох nonce-г ашигладаг. Шифрлэх/тайлах үйлдэл бүрийн дараа nonce нь тэмдэггүй жижиг-эндиан бүхэл тоо мэт нэгээр нэмэгддэг. TCP хэсэг бүр нь хоёр AEAD шифрлэх/шифрлэх үйлдлүүдийг агуулж байгааг анхаарна уу: нэг нь даацын урт, нөгөө нь даацын хувьд. Тиймээс хэсэг бүр нь хоёр дахин нэмэгддэг.

TCP

AEAD шифрлэгдсэн TCP урсгал нь сесс бүрийн дэд түлхүүрийг гаргаж авахын тулд санамсаргүй байдлаар үүсгэгдсэн давсаар эхэлж, дараа нь хэдэн ч шифрлэгдсэн хэсгүүд орно. Хэсэг бүр дараах бүтэцтэй байна.

[шифрлэгдсэн ачааны урт][урт шошго][шифрлэгдсэн ачаалал][ачааллын шошго]

 

Ачааллын урт нь 2x0FFF-ээр хязгаарлагдсан 3 байт том-эндиан тэмдэггүй бүхэл тоо юм. Дээд хоёр битийг нөөцөлсөн бөгөөд тэг болгож тохируулах ёстой. Тиймээс ачааллыг 16*1024 – 1 байтаар хязгаарласан.

Анхны AEAD шифрлэх/тайлах үйлдэл нь 0-ээс эхлэн тоолох nonce-г ашигладаг. Шифрлэх/тайлах үйлдэл бүрийн дараа nonce нь тэмдэггүй жижиг-эндиан бүхэл тоо мэт нэгээр нэмэгддэг. TCP хэсэг бүр нь хоёр AEAD шифрлэх/шифрлэх үйлдлүүдийг агуулж байгааг анхаарна уу: нэг нь даацын урт, нөгөө нь даацын хувьд. Тиймээс хэсэг бүр нь хоёр дахин нэмэгддэг.

5 өдрийн үнэгүй туршилтаа эхлүүлээрэй