Shadowsocks belgeleri
Navigasyon
AEAD
AEAD İlişkili Verilerle Doğrulanmış Şifreleme anlamına gelir. AEAD şifreleri aynı anda gizlilik, bütünlük ve özgünlük sağlar. Modern donanımda mükemmel performansa ve güç verimliliğine sahiptirler. Kullanıcılar mümkün olduğunda AEAD şifrelerini kullanmalıdır.
Aşağıdaki AEAD şifreleri önerilir. Uyumlu Shadowsocks uygulamaları, AEAD_CHACHA20_POLY1305'i desteklemelidir. Donanım AES hızlandırmalı cihazlara yönelik uygulamalar ayrıca AEAD_AES_128_GCM ve AEAD_AES_256_GCM'yi de uygulamalıdır.
İsim | Takma ad | Anahtar Boyutu | Tuz Ölçüsü | Nonce Boyut | Etiket boyutu |
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 |
Bakın IANA AEAD kaydı adlandırma şeması ve özellikleri için.
Anahtar Türetme
Ana anahtar, doğrudan kullanıcıdan girilebilir veya bir paroladan oluşturulabilir.
HKDF_SHA1 gizli bir anahtar, gizli olmayan bir salt, bir bilgi dizesi alan ve giriş gizli anahtarı zayıf olsa bile kriptografik olarak güçlü bir alt anahtar üreten bir işlevdir.
HKDF_SHA1(anahtar, tuz, bilgi) => alt anahtar
Bilgi dizesi, oluşturulan alt anahtarı belirli bir uygulama içeriğine bağlar. Bizim durumumuzda, tırnak işaretleri olmadan “ss-subkey” dizisi olmalıdır.
HKDF_SHA1 kullanarak önceden paylaşılan bir ana anahtardan oturum başına bir alt anahtar türetiyoruz. Salt, önceden paylaşılan ana anahtarın tüm ömrü boyunca benzersiz olmalıdır.
Kimliği Doğrulanmış Şifreleme/Şifre Çözme
AE_encrypt, gizli bir anahtar, gizli olmayan bir nonce, bir mesaj alan ve şifreli metin ve bir kimlik doğrulama etiketi üreten bir işlevdir. Nonce, her çağrıda belirli bir anahtar için benzersiz olmalıdır.
AE_encrypt(anahtar, nonce, mesaj) => (şifreli metin, etiket)
AE_decrypt, gizli bir anahtar, gizli olmayan nonce, şifreli metin, bir kimlik doğrulama etiketi alan ve orijinal bir mesaj üreten bir işlevdir. Girişlerden herhangi biri kurcalanırsa, şifre çözme başarısız olur.
AE_decrypt(key, nonce, ciphertext, tag) => mesaj
TCP
AEAD şifreli bir TCP akışı, oturum başına alt anahtarı türetmek için rastgele oluşturulmuş bir salt ile başlar ve ardından herhangi bir sayıda şifrelenmiş yığın gelir. Her yığın aşağıdaki yapıya sahiptir:
[şifreli yük uzunluğu][uzunluk etiketi][şifreli yük][yük etiketi]
Yük uzunluğu, 2x0FFF ile sınırlandırılmış 3 baytlık bir big-endian işaretsiz tamsayıdır. Daha yüksek olan iki bit ayrılmıştır ve sıfıra ayarlanmalıdır. Yük bu nedenle 16*1024 – 1 bayt ile sınırlıdır.
İlk AEAD şifreleme/şifre çözme işlemi, 0'dan başlayan bir nonce sayımı kullanır. Her şifreleme/şifre çözme işleminden sonra, nonce, sanki işaretsiz bir küçük endian tamsayıymış gibi bir artırılır. Her TCP yığınının iki AEAD şifreleme/şifre çözme işlemi içerdiğini unutmayın: biri yük uzunluğu için ve diğeri yük için. Bu nedenle, her bir yığın no'yu iki kez artırır.
TCP
AEAD şifreli bir TCP akışı, oturum başına alt anahtarı türetmek için rastgele oluşturulmuş bir salt ile başlar ve ardından herhangi bir sayıda şifrelenmiş yığın gelir. Her yığın aşağıdaki yapıya sahiptir:
[şifreli yük uzunluğu][uzunluk etiketi][şifreli yük][yük etiketi]
Yük uzunluğu, 2x0FFF ile sınırlandırılmış 3 baytlık bir big-endian işaretsiz tamsayıdır. Daha yüksek olan iki bit ayrılmıştır ve sıfıra ayarlanmalıdır. Yük bu nedenle 16*1024 – 1 bayt ile sınırlıdır.
İlk AEAD şifreleme/şifre çözme işlemi, 0'dan başlayan bir nonce sayımı kullanır. Her şifreleme/şifre çözme işleminden sonra, nonce, sanki işaretsiz bir küçük endian tamsayıymış gibi bir artırılır. Her TCP yığınının iki AEAD şifreleme/şifre çözme işlemi içerdiğini unutmayın: biri yük uzunluğu için ve diğeri yük için. Bu nedenle, her bir yığın no'yu iki kez artırır.