Shadowsocks dokumentācija

AEAD

AEAD apzīmē autentificētu šifrēšanu ar saistītajiem datiem. AEAD šifri vienlaikus nodrošina konfidencialitāti, integritāti un autentiskumu. Tiem ir lieliska veiktspēja un jaudas efektivitāte mūsdienu aparatūrā. Kad vien iespējams, lietotājiem jāizmanto AEAD šifri.

Ieteicams izmantot šādus AEAD šifrus. Saderīgām Shadowsocks implementācijām ir jāatbalsta AEAD_CHACHA20_POLY1305. Ierīcēm ar aparatūras AES paātrinājumu ir jāievieš arī AEAD_AES_128_GCM un AEAD_AES_256_GCM.

 

 

 

Vārds

Alias

Atslēgas izmērs

Sāls izmērs

Nonce izmērs

Atzīmes izmērs

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

Lūdzu atsaucies uz IANA AEAD reģistrs nosaukumu shēmai un specifikācijai.

Atslēgu atvasināšana

Galveno atslēgu var ievadīt tieši no lietotāja vai ģenerēt no paroles.

HKDF_SHA1 ir funkcija, kas izmanto slepeno atslēgu, neslepeno sāli, informācijas virkni un izveido apakšatslēgu, kas ir kriptogrāfiski spēcīga pat tad, ja ievades slepenā atslēga ir vāja.

HKDF_SHA1(atslēga, sāls, informācija) => apakšatslēga

Informācijas virkne saista ģenerēto apakšatslēgu ar noteiktu lietojumprogrammas kontekstu. Mūsu gadījumā tai ir jābūt virknei “ss-subkey” bez pēdiņām.

Mēs iegūstam vienas sesijas apakšatslēgu no iepriekš koplietotas galvenās atslēgas, izmantojot HKDF_SHA1. Sālim ir jābūt unikālam visā iepriekš koplietotās galvenās atslēgas darbības laikā.

Autentificēta šifrēšana/atšifrēšana

AE_encrypt ir funkcija, kas ņem slepeno atslēgu, neslepeno atslēgu, ziņojumu un izveido šifrētu tekstu un autentifikācijas tagu. Nonce ir jābūt unikālai noteiktai atslēgai katrā izsaukumā.

AE_encrypt(atslēga, nonce, ziņojums) => (šifrēts teksts, tags)

 

AE_decrypt ir funkcija, kas izmanto slepeno atslēgu, neslepeno atslēgu, šifrētu tekstu, autentifikācijas tagu un izveido oriģinālu ziņojumu. Ja kāds no ievades datiem tiek manipulēts, atšifrēšana neizdosies.

AE_decrypt(atslēga, nonce, šifrētais teksts, tags) => ziņojums

TCP

AEAD šifrēta TCP straume sākas ar nejauši ģenerētu sāli, lai iegūtu sesijas apakšatslēgu, kam seko jebkurš šifrētu daļu skaits. Katram gabalam ir šāda struktūra:

[šifrētās kravas garums][garuma tags][šifrēta kravnesība][kravas atzīme]

 

Lietderīgās slodzes garums ir 2 baitu liels neparakstīts vesels skaitlis, kura ierobežojums ir 0x3FFF. Divi augstākie biti ir rezervēti, un tiem jābūt iestatītiem uz nulli. Tāpēc derīgā slodze ir ierobežota līdz 16 * 1024 - 1 baits.

Pirmajā AEAD šifrēšanas/atšifrēšanas operācijā tiek izmantots skaitīšanas nonce, sākot no 0. Pēc katras šifrēšanas/atšifrēšanas darbības nonce tiek palielināts par vienu tā, it kā tas būtu neparakstīts mazs-endian vesels skaitlis. Ņemiet vērā, ka katrs TCP gabals ietver divas AEAD šifrēšanas/atšifrēšanas darbības: vienu lietderīgās slodzes garumam un otru lietderīgajai slodzei. Tāpēc katrs gabals palielina nonce divreiz.

TCP

AEAD šifrēta TCP straume sākas ar nejauši ģenerētu sāli, lai iegūtu sesijas apakšatslēgu, kam seko jebkurš šifrētu daļu skaits. Katram gabalam ir šāda struktūra:

[šifrētās kravas garums][garuma tags][šifrēta kravnesība][kravas atzīme]

 

Lietderīgās slodzes garums ir 2 baitu liels neparakstīts vesels skaitlis, kura ierobežojums ir 0x3FFF. Divi augstākie biti ir rezervēti, un tiem jābūt iestatītiem uz nulli. Tāpēc derīgā slodze ir ierobežota līdz 16 * 1024 - 1 baits.

Pirmajā AEAD šifrēšanas/atšifrēšanas operācijā tiek izmantots skaitīšanas nonce, sākot no 0. Pēc katras šifrēšanas/atšifrēšanas darbības nonce tiek palielināts par vienu tā, it kā tas būtu neparakstīts mazs-endian vesels skaitlis. Ņemiet vērā, ka katrs TCP gabals ietver divas AEAD šifrēšanas/atšifrēšanas darbības: vienu lietderīgās slodzes garumam un otru lietderīgajai slodzei. Tāpēc katrs gabals palielina nonce divreiz.

Sāciet savu 5 dienu bezmaksas izmēģinājumu