Shadowsocks документтери

AEAD

AEAD Ассоциацияланган маалыматтар менен аныкталган шифрлөө дегенди билдирет. AEAD шифрлери бир эле учурда купуялуулукту, бүтүндүктү жана аныктыгын камсыз кылат. Алар заманбап аппараттык жабдыктарда мыкты аткарууга жана кубаттуулукка ээ. Колдонуучулар мүмкүн болушунча AEAD шифрлерин колдонушу керек.

Төмөнкү AEAD шифрлери сунушталат. Шайкеш Shadowsocks ишке ашыруулары AEAD_CHACHA20_POLY1305 колдоого алышы керек. Аппараттык AES акселерациясы бар түзмөктөр үчүн ишке ашыруулар AEAD_AES_128_GCM жана AEAD_AES_256_GCM да ишке ашырылышы керек.

 

 

 

ысым

жашыруун ысымы

Key Size

Туз өлчөмү

Nonce Size

Tag Көлөм

AEAD_CHACHA20_POLY1305

chacha20-ietf-poly1305

32

32

12

16

AEAD_AES_256_GCM

aes-256-гсм

32

32

12

16

AEAD_AES_128_GCM

aes-128-гсм

16

16

12

16

Көрө IANA AEAD реестри схемасы жана спецификациясы үчүн.

Key Derivation

Башкы ачкыч колдонуучудан түз киргизилиши же сырсөздөн түзүлүшү мүмкүн.

HKDF_SHA1 жашыруун ачкычты, жашыруун эмес тузду, маалыматтык сапты алып, киргизүү жашыруун ачкычы алсыз болсо да криптографиялык жактан күчтүү субачкычты чыгарган функция.

HKDF_SHA1(ачкыч, туз, маалымат) => ички ачкыч

Маалымат сабы түзүлгөн субачкычты белгилүү бир колдонмо контекстине байланыштырат. Биздин учурда, ал тырмакчасыз "ss-subkey" сабы болушу керек.

HKDF_SHA1 аркылуу алдын ала бөлүшүлгөн башкы ачкычтан ар бир сессиянын ички ачкычын чыгарабыз. Туз алдын ала бөлүшүлгөн башкы ачкычтын бүткүл өмүр бою уникалдуу болушу керек.

Аныкталган шифрлөө/дешифрлөө

AE_encrypt – бул жашыруун ачкычты, жашыруун эмес билдирүүнү, билдирүүнү алып, шифрленген текстти жана аутентификация тегин чыгарган функция. Nonce ар бир чакырууда берилген ачкыч үчүн уникалдуу болушу керек.

AE_encrypt(ачкыч, бир жолу, билдирүү) => (шифрленген текст, тег)

 

AE_decrypt - бул жашыруун ачкычты, жашыруун эмес сырды, шифрленген текстти, аутентификация тегин алган жана оригиналдуу билдирүүнү чыгарган функция. Киргизүүнүн кайсынысы болбосун бурмаланса, чечмелөө ишке ашпай калат.

AE_decrypt(ачкыч, жок, шифрленген текст, тэг) => билдирүү

TCP

AEAD шифрленген TCP агымы туш келди түзүлгөн туз менен башталат, андан кийин ар кандай сандагы шифрленген бөлүктөр менен ар бир сессиянын ички ачкычын чыгарат. Ар бир бөлүкчө төмөнкү түзүлүшкө ээ:

[шифрленген пайдалуу жүктүн узундугу][узундугу теги][шифрленген пайдалуу жүк][пайдалуу жүгү теги]

 

Пайдалуу жүктүн узундугу 2x0FFF менен чектелген 3 байт чоң-эндиан белгиси жок бүтүн сан. Жогорку эки бит сакталган жана нөлгө коюлушу керек. Демек, жүктөө 16*1024 – 1 байт менен чектелген.

Биринчи AEAD шифрлөө/шифрди чечмелөө операциясы 0дөн баштап санап чыгууну колдонот. Ар бир шифрлөө/шифрди чечмелөө операциясынан кийин, нонс кол коюлбаган кичинекей эндиан бүтүн сан сыяктуу бирге көбөйтүлөт. Ар бир TCP бөлүгү эки AEAD шифрлөө/шифрлөө операциясын камтыганын эске алыңыз: бири пайдалуу жүктүн узундугу үчүн, экинчиси пайдалуу жүк үчүн. Ошентип, ар бир кесим эки эсеге көбөйөт.

TCP

AEAD шифрленген TCP агымы туш келди түзүлгөн туз менен башталат, андан кийин ар кандай сандагы шифрленген бөлүктөр менен ар бир сессиянын ички ачкычын чыгарат. Ар бир бөлүкчө төмөнкү түзүлүшкө ээ:

[шифрленген пайдалуу жүктүн узундугу][узундугу теги][шифрленген пайдалуу жүк][пайдалуу жүгү теги]

 

Пайдалуу жүктүн узундугу 2x0FFF менен чектелген 3 байт чоң-эндиан белгиси жок бүтүн сан. Жогорку эки бит сакталган жана нөлгө коюлушу керек. Демек, жүктөө 16*1024 – 1 байт менен чектелген.

Биринчи AEAD шифрлөө/шифрди чечмелөө операциясы 0дөн баштап санап чыгууну колдонот. Ар бир шифрлөө/шифрди чечмелөө операциясынан кийин, нонс кол коюлбаган кичинекей эндиан бүтүн сан сыяктуу бирге көбөйтүлөт. Ар бир TCP бөлүгү эки AEAD шифрлөө/шифрлөө операциясын камтыганын эске алыңыз: бири пайдалуу жүктүн узундугу үчүн, экинчиси пайдалуу жүк үчүн. Ошентип, ар бир кесим эки эсеге көбөйөт.

5 күндүк акысыз сынамык версияңызды баштаңыз