Nyaraka za Shadowsocks
Navigation
AEAD
AEAD inawakilisha Usimbaji Umeidhinishwa na Data Husika. Sifa za AEAD kwa wakati mmoja hutoa usiri, uadilifu na uhalisi. Wana utendaji bora na ufanisi wa nguvu kwenye vifaa vya kisasa. Watumiaji wanapaswa kutumia misimbo ya AEAD inapowezekana.
Nakala zifuatazo za AEAD zinapendekezwa. Utekelezaji wa Shadowsocks unaotii sheria lazima usaidie AEAD_CHACHA20_POLY1305. Utekelezaji wa vifaa vilivyo na kuongeza kasi ya maunzi ya AES lazima pia utekeleze AEAD_AES_128_GCM na AEAD_AES_256_GCM.
jina | Alias | Ukubwa muhimu | Ukubwa wa Chumvi | Ukubwa wa Nonce | Ukubwa wa 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 |
Tafadhali rejea kwa Usajili wa IANA AEAD kwa mpango wa kutaja na vipimo.
Utoaji Muhimu
Ufunguo mkuu unaweza kuingizwa moja kwa moja kutoka kwa mtumiaji au kuzalishwa kutoka kwa nenosiri.
HKDF_SHA1 ni chaguo la kukokotoa ambalo huchukua ufunguo wa siri, chumvi isiyo ya siri, kamba ya maelezo, na kutoa ufunguo mdogo ambao una nguvu ya siri hata kama ufunguo wa siri wa kuingiza ni dhaifu.
HKDF_SHA1(ufunguo, chumvi, maelezo) => kitufe kidogo
Mfuatano wa maelezo hufunga kitufe kidogo kilichozalishwa kwa muktadha mahususi wa programu. Kwa upande wetu, lazima iwe kamba "ss-subkey" bila nukuu.
Tunapata ufunguo mdogo wa kila kipindi kutoka kwa ufunguo mkuu ulioshirikiwa awali kwa kutumia HKDF_SHA1. Chumvi lazima iwe ya kipekee katika maisha yote ya ufunguo mkuu ulioshirikiwa awali.
Usimbaji/Usimbuaji Ulioidhinishwa
AE_encrypt ni chaguo la kukokotoa ambalo huchukua ufunguo wa siri, nonce isiyo ya siri, ujumbe, na kutoa maandishi ya siri na lebo ya uthibitishaji. Nonce lazima iwe ya kipekee kwa ufunguo fulani katika kila ombi.
AE_encrypt(ufunguo, nonce, ujumbe) => (maandishi ya siri, lebo)
AE_decrypt ni chaguo la kukokotoa ambalo huchukua ufunguo wa siri, nonce isiyo ya siri, maandishi ya siri, lebo ya uthibitishaji, na kutoa ujumbe asili. Iwapo ingizo lolote litaingiliwa, usimbaji fiche hautafaulu.
AE_decrypt(key, nonce, ciphertext, tag) => ujumbe
TCP
Mtiririko wa TCP uliosimbwa kwa njia fiche wa AEAD huanza na chumvi inayozalishwa nasibu ili kupata ufunguo wa kila kipindi, ikifuatiwa na idadi yoyote ya vipande vilivyosimbwa. Kila sehemu ina muundo ufuatao:
[urefu wa mzigo uliosimbwa kwa njia fiche][lebo ya urefu][mzigo uliosimbwa kwa njia fiche][lebo ya malipo]
Urefu wa upakiaji ni nambari kamili isiyo na saini ya baiti 2 iliyo na 0x3FFF. Biti mbili za juu zimehifadhiwa na lazima ziwekwe hadi sifuri. Kwa hivyo, upakiaji ni mdogo kwa baiti 16 * 1024 - 1.
Operesheni ya kwanza ya usimbaji/usimbuaji wa AEAD hutumia nukta ya kuhesabu kuanzia 0. Baada ya kila usimbaji fiche/usimbuaji, nonce huongezwa kwa moja kana kwamba ni nambari kamili ya mwisho isiyo na saini. Kumbuka kuwa kila sehemu ya TCP inahusisha shughuli mbili za usimbaji/usimbuaji wa AEAD: moja kwa urefu wa upakiaji, na moja ya upakiaji. Kwa hivyo kila chunk huongeza nonce mara mbili.
TCP
Mtiririko wa TCP uliosimbwa kwa njia fiche wa AEAD huanza na chumvi inayozalishwa nasibu ili kupata ufunguo wa kila kipindi, ikifuatiwa na idadi yoyote ya vipande vilivyosimbwa. Kila sehemu ina muundo ufuatao:
[urefu wa mzigo uliosimbwa kwa njia fiche][lebo ya urefu][mzigo uliosimbwa kwa njia fiche][lebo ya malipo]
Urefu wa upakiaji ni nambari kamili isiyo na saini ya baiti 2 iliyo na 0x3FFF. Biti mbili za juu zimehifadhiwa na lazima ziwekwe hadi sifuri. Kwa hivyo, upakiaji ni mdogo kwa baiti 16 * 1024 - 1.
Operesheni ya kwanza ya usimbaji/usimbuaji wa AEAD hutumia nukta ya kuhesabu kuanzia 0. Baada ya kila usimbaji fiche/usimbuaji, nonce huongezwa kwa moja kana kwamba ni nambari kamili ya mwisho isiyo na saini. Kumbuka kuwa kila sehemu ya TCP inahusisha shughuli mbili za usimbaji/usimbuaji wa AEAD: moja kwa urefu wa upakiaji, na moja ya upakiaji. Kwa hivyo kila chunk huongeza nonce mara mbili.