Shadowsocks dokumentaro
Navigado
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.