İlişkili Verilerle Kimliği Doğrulanmış Şifreleme (AEAD) temeli, veri şifreleme için en yaygın kullanılan temeldir ve çoğu ihtiyaca uygundur.
AEAD'nin aşağıdaki özellikleri vardır:
- Secrecy: Uzunluğu dışında şifrelenmemiş metin hakkında hiçbir şey bilinmez.
- Özgünlük: Şifrelenmiş düz metin, şifreli metnin temelini oluşturur ve fark edilmeden değiştirilemez.
- Simetrik: Şifrelenmemiş metnin şifrelenmesi ve şifrelenmiş metnin şifresinin çözülmesi aynı anahtarla yapılır.
- Rastgeleleştirme: Şifreleme rastgele yapılır. Aynı şifrelenmemiş metne sahip iki ileti farklı şifrelenmiş metinler oluşturur. Saldırganlar, hangi şifreli metnin belirli bir şifrelenmemiş metne karşılık geldiğini bilemez. Bu durumu önlemek istiyorsanız bunun yerine Deterministic AEAD'yi kullanın.
İlişkili veriler
AEAD, şifreli metni belirli ilişkili verilere bağlamak için kullanılabilir. user-id ve encrypted-medical-history alanlarını içeren bir veritabanınız olduğunu varsayalım. Bu senaryoda, user-id, encrypted-medical-history şifrelenirken ilişkili veri olarak kullanılabilir. Bu, saldırganların tıbbi geçmişi bir kullanıcıdan diğerine taşımasını engeller.
İlişkili veriler isteğe bağlıdır. Belirtilmişse şifre çözme işlemi yalnızca hem şifreleme hem de şifre çözme çağrılarına aynı ilişkili veriler iletilirse başarılı olur.
Anahtar türü seçin
Çoğu kullanım için AES128_GCM'yi önersek de farklı ihtiyaçlar için çeşitli anahtar türleri vardır. AES128, 128 bit güvenlik, AES256 ise 256 bit güvenlik sunar.
Bir mod seçerken dikkat edilmesi gereken iki önemli güvenlik kısıtlaması vardır:
- QPS: Aynı anahtarla kaç ileti şifrelenir?
- İleti boyutu: İletiler ne kadar büyük?
Desteklenen anahtar türleri:
- 16 baytlık bir Başlatma Vektörü (IV) ile AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256), iyi sınırlara sahip en muhafazakar moddur.
- Anahtar oluşturma.
- AES-EAX (AES128_EAX, AES256_EAX), AES128_CTR_HMAC_SHA256'ya kıyasla biraz daha az muhafazakar ve biraz daha hızlıdır.
- MLGR'nin anahtarını oluşturmamış olabilirsiniz.
- AES-GCM (AES128_GCM, AES256_GCM), genellikle mesaj sayısı (232) ve mesaj boyutu (~64 GB/mesaj) konusunda en katı sınırlara sahip en hızlı moddur. Bu sınırlar aşıldığında AES-GCM, şifrelenmemiş metni ve AES-GCM dahili anahtarının kimlik doğrulama bölümünü sızdırarak feci şekilde başarısız olur.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV), AES-GCM kadar hızlıdır.
İleti sayısı ve ileti boyutu konusunda AES-GCM ile aynı sınırlara sahiptir ancak bu sınırlar aşıldığında daha az felaketle sonuçlanacak şekilde başarısız olur: Yalnızca iki iletinin eşit olduğu bilgisi sızabilir. Bu nedenle, AES-GCM'den daha güvenli olsa da pratikte daha az kullanılır. Java'da bunu kullanmak için Conscrypt'i yüklemeniz gerekir.
- ADGKLS anahtarı oluşturulmuyor.
- XChaCha20-Poly1305 (XCHACHA20_POLY1305), ileti sayısı ve ileti boyutu konusunda AES-GCM'den çok daha yüksek bir sınıra sahiptir. Ancak başarısız olduğunda (çok düşük bir ihtimal) anahtar materyali de sızdırır. Donanım hızlandırması olmadığından, donanım hızlandırmasının kullanılabildiği durumlarda AES modlarından daha yavaş olabilir.
- Anahtar oluşturma işlemi yapılmayan LGR.
AEAD şifreli metninin kablolu biçimi hakkında daha fazla bilgi edinin.
Güvenlik garantileri
AEAD uygulamaları şunları sunar:
- CCA2 güvenliği.
- En az 80 bit kimlik doğrulama gücü.
- Toplam 250 baytlık en az 232 mesajı şifreleme özelliği. 232 seçilmiş düz metin veya seçilmiş şifreli metinle yapılan saldırıların başarı olasılığı 2-32'den yüksek değildir.
Örnek kullanım alanları
Verileri şifrelemek ve şifrelenmiş metni bağlamına bağlamak istiyorum.