Shadowsocks dokumentaro

AEAD

AEAD signifas Aŭtentikigitan Ĉifradon kun Rilata Datumo. AEAD-ĉifroj samtempe disponigas konfidencon, integrecon kaj aŭtentikecon. Ili havas bonegan rendimenton kaj potencan efikecon sur moderna aparataro. Uzantoj devus uzi AEAD-ĉifrojn kiam ajn eblas.

La sekvaj AEAD-ĉifroj estas rekomenditaj. Konformaj efektivigoj de Shadowsocks devas subteni AEAD_CHACHA20_POLY1305. Efektivigoj por aparatoj kun aparataro AES-akcelo ankaŭ devus efektivigi AEAD_AES_128_GCM kaj AEAD_AES_256_GCM.

 

 

 

Nomo

alias

Ŝlosila Grandeco

Sala Grandeco

Nonce Grandeco

etikedo Grandeco

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

Bonvolu raporti IANA AEAD-registro por nomskemo kaj specifo.

Ŝlosila Derivado

La ĉefa ŝlosilo povas esti enigita rekte de la uzanto aŭ generita de pasvorto.

HKDF_SHA1 estas funkcio kiu prenas sekretan ŝlosilon, ne-sekretan salon, informŝnuron, kaj produktas subŝlosilon kiu estas kriptografie forta eĉ se la eniga sekreta ŝlosilo estas malforta.

HKDF_SHA1(ŝlosilo, salo, informoj) => subŝlosilo

La informĉeno ligas la generitan subŝlosilon al specifa aplikaĵa kunteksto. En nia kazo, ĝi devas esti la ĉeno "ss-subkey" sen citiloj.

Ni derivas po-seancan subŝlosilon de antaŭ-kunhavita ĉefŝlosilo uzante HKDF_SHA1. Salo devas esti unika dum la tuta vivo de la antaŭdividita ĉefŝlosilo.

Aŭtentikigita Ĉifrado/Malĉifrado

AE_encrypt estas funkcio kiu prenas sekretan ŝlosilon, ne-sekretan nonce, mesaĝon, kaj produktas ĉifrtekston kaj aŭtentikigetikedon. Nonce devas esti unika por donita ŝlosilo en ĉiu alvoko.

AE_encrypt(ŝlosilo, nonce, mesaĝo) => (ĉifrteksto, etikedo)

 

AE_decrypt estas funkcio kiu prenas sekretan ŝlosilon, ne-sekretan nonce, ĉifrtekston, aŭtentikigetikedon, kaj produktas originalan mesaĝon. Se iu el la enigo estas mistraktita, la malĉifrado malsukcesos.

AE_decrypt(ŝlosilo, nonce, ĉifroteksto, etikedo) => mesaĝo

TCP

AEAD ĉifrita TCP-rivereto komenciĝas per hazarde generita salo por derivi la po-seian subŝlosilon, sekvitan per iu ajn nombro da ĉifritaj pecoj. Ĉiu peco havas la sekvan strukturon:

[ĉifrita utila ŝarĝolongo][longa etikedo][ĉifrita utila ŝarĝo][utila etikedo]

 

Utila ŝarĝa longo estas 2-bajta big-endian sensigna entjero limigita je 0x3FFF. La pli altaj du bitoj estas rezervitaj kaj devas esti agordita al nulo. Utila ŝarĝo estas do limigita al 16*1024 – 1 bajtoj.

La unua operacio de ĉifri/malĉifri de AEAD uzas nombran nonce komencantan de 0. Post ĉiu ĉifra/malĉifri operacio, la nonce estas pliigita per unu kvazaŭ ĝi estus sensigna eta-endian entjero. Notu, ke ĉiu TCP-peco implikas du AEAD-ĉifri/malĉifri operaciojn: unu por la utila ŝarĝo, kaj unu por la utila ŝarĝo. Tial ĉiu peco pliigas la nonce dufoje.

TCP

AEAD ĉifrita TCP-rivereto komenciĝas per hazarde generita salo por derivi la po-seian subŝlosilon, sekvitan per iu ajn nombro da ĉifritaj pecoj. Ĉiu peco havas la sekvan strukturon:

[ĉifrita utila ŝarĝolongo][longa etikedo][ĉifrita utila ŝarĝo][utila etikedo]

 

Utila ŝarĝa longo estas 2-bajta big-endian sensigna entjero limigita je 0x3FFF. La pli altaj du bitoj estas rezervitaj kaj devas esti agordita al nulo. Utila ŝarĝo estas do limigita al 16*1024 – 1 bajtoj.

La unua operacio de ĉifri/malĉifri de AEAD uzas nombran nonce komencantan de 0. Post ĉiu ĉifra/malĉifri operacio, la nonce estas pliigita per unu kvazaŭ ĝi estus sensigna eta-endian entjero. Notu, ke ĉiu TCP-peco implikas du AEAD-ĉifri/malĉifri operaciojn: unu por la utila ŝarĝo, kaj unu por la utila ŝarĝo. Tial ĉiu peco pliigas la nonce dufoje.

Komencu vian 5-tagan Senpagan provon