Shadowsocks pepa aloaia
tuʻuvaʻaga
AEAD
AEAD o lo'o fa'atusaina mo le Fa'amaonia Fa'amaonia ma Fa'amatalaga Fa'atasi. AEAD ciphers e tu'uina atu i le taimi e tasi le agatapuia, fa'amaoni, ma le fa'amaoni. O lo'o i ai a latou fa'atinoga lelei ma le fa'aogaina o le malosi i mea fa'aonaponei. E tatau i tagata fa'aoga ona fa'aoga AEAD ciphers pe a mafai.
O fa'ailoga AEAD nei e fautuaina. O fa'atinoga o le Shadowsocks e tatau ona lagolagoina AEAD_CHACHA20_POLY1305. Fa'atinoga mo masini e iai meafaigaluega AES fa'avavevave e tatau fo'i ona fa'atino AEAD_AES_128_GCM ma AEAD_AES_256_GCM.
igoa | igoa pepelo | Tele Ki | Tele masima | Nonce Size | pine tele |
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 |
Faamolemole silasila i IANA AEAD resitala mo le fa'aigoaina o polokalame ma fa'amatalaga.
Fa'afuaaga Autu
O le ki matai e mafai ona tu'u sa'o mai le tagata fa'aoga pe fa'atupu mai se fa'aupuga.
HKDF_SHA1 o se galuega e ave ai se ki faalilolilo, se masima e le faalilolilo, se manoa faʻamatalaga, ma maua ai se subkey e malosi faʻataʻitaʻi e tusa lava pe vaivai le ki faalilolilo ulufale.
HKDF_SHA1(ki, masima, fa'amatalaga) => subkey
O le manoa fa'amatalaga e fusifusia ai le so'oga fa'atupu i se fa'amatalaga fa'atatau. I la matou tulaga, e tatau ona avea ma manoa "ss-subkey" e aunoa ma ni upusii.
Matou te maua se subkey ta'itasi mai se ki matua fa'asoa muamua e fa'aaoga ai le HKDF_SHA1. E tatau ona tulaga ese le masima i le olaga atoa o le ki matua fa'asoa muamua.
Fa'amaonia Fa'ailoga/Decryption
AE_encrypt o se galuega e manaʻomia ai se ki faalilolilo, se mea e le faalilolilo, se feʻau, ma maua ai le ciphertext ma se faʻamaoniga faʻamaonia. O le Nonce e tatau ona tulaga ese mo se ki e tu'uina atu i talosaga ta'itasi.
AE_encrypt(ki, leai, fe'au) => (ciphertext, tag)
AE_decrypt o se galuega e ave ai se ki faalilolilo, leai se mea lilo, faʻamatalaga, se pine faʻamaonia, ma maua ai se feʻau muamua. Afai e iai se mea e fa'aogaina e fa'afefeteina, o le a fa'aletonu le decryption.
AE_decrypt(key, nonce, ciphertext, tag) => feʻau
TCP
O le AEAD encrypted TCP stream e amata i se masima fa'atupu fa'afuase'i e maua mai ai le subkey ta'itasi, sosoo ai ma so'o se numera o pusi fa'ailoga. O pusa taʻitasi e iai lona faʻatulagaga:
[fa'ailogaina le umi o le uta [fa'ailoga umi][fa'ailoga le uta fa'ailoga][tag fa'ailoga]
Ole umi ole uta ole 2-byte big-endian unsigned integer fa'apipi'i ile 0x3FFF. O pito maualuga e lua o loʻo faʻaagaga ma e tatau ona seti i le zero. O lea la e fa'atapula'aina le uta i le 16*1024 - 1 bytes.
O le fa'ailoga muamua a le AEAD e fa'aaoga ai le numera nonce e amata mai i le 0. A mae'a ta'itasi encrypt/decrypt fa'agaioiga, o le nonce e fa'aopoopoina e le tasi e pei o se numera itiiti-endian e le'i sainia. Manatua o pusa TCP taʻitasi e aofia ai le lua AEAD encrypt/decrypt faagaioiga: tasi mo le umi o le uta, ma le tasi mo le uta. O le mea lea e fa'aopoopoina fa'aluaina e pusi ta'itasi le nonce.
TCP
O le AEAD encrypted TCP stream e amata i se masima fa'atupu fa'afuase'i e maua mai ai le subkey ta'itasi, sosoo ai ma so'o se numera o pusi fa'ailoga. O pusa taʻitasi e iai lona faʻatulagaga:
[fa'ailogaina le umi o le uta [fa'ailoga umi][fa'ailoga le uta fa'ailoga][tag fa'ailoga]
Ole umi ole uta ole 2-byte big-endian unsigned integer fa'apipi'i ile 0x3FFF. O pito maualuga e lua o loʻo faʻaagaga ma e tatau ona seti i le zero. O lea la e fa'atapula'aina le uta i le 16*1024 - 1 bytes.
O le fa'ailoga muamua a le AEAD e fa'aaoga ai le numera nonce e amata mai i le 0. A mae'a ta'itasi encrypt/decrypt fa'agaioiga, o le nonce e fa'aopoopoina e le tasi e pei o se numera itiiti-endian e le'i sainia. Manatua o pusa TCP taʻitasi e aofia ai le lua AEAD encrypt/decrypt faagaioiga: tasi mo le umi o le uta, ma le tasi mo le uta. O le mea lea e fa'aopoopoina fa'aluaina e pusi ta'itasi le nonce.