İlişkili Verilerle Kimlik Doğrulaması Yapılmış Şifreleme (AEAD) ilkel, veri şifreleme için en yaygın ilkeldir ve çoğu ihtiyaca uygundur.
AEAD aşağıdaki özelliklere sahiptir:
- Secrecy: Açık metinle ilgili olarak uzunluğu dışında hiçbir şey bilinmez.
- Özgünlük: Şifrelenmiş metnin altındaki şifrelenmemiş metnin değiştirilmesi fark edilmeden mümkün değildir.
- Simetrik: Açık metnin şifrelenmesi ve şifrelenmiş metnin çözülmesi aynı anahtarla yapılır.
- Rastgele hale getirme: Şifreleme rastgele hale getirilir. Aynı açık metne sahip iki mesaj farklı şifre metinleri oluşturur. Saldırganlar, belirli bir şifrelenmemiş metne hangi şifrelenmiş metnin karşılık geldiğini bilemez. Bu durumu önlemek istiyorsanız bunun yerine Deterministik AEAD'ı kullanın.
İlişkili veriler
AEAD, şifrelenmiş metni belirli ilişkili verilere bağlamak için kullanılabilir. user-id
ve encrypted-medical-history
alanlarının bulunduğu bir veritabanınız olduğunu varsayalım. Bu senaryoda, encrypted-medical-history
şifrelenirken user-id
ilişkili veri olarak kullanılabilir. Bu sayede, saldırganlar tıbbi geçmişi bir kullanıcıdan diğerine taşıyamaz.
Anahtar türü seçin
Çoğu kullanım için AES128_GCM'yi öneririz ancak farklı ihtiyaçlar için çeşitli anahtar türleri vardır (256 bit güvenlik için aşağıdaki AES128'i AES256 ile değiştirin). Genel olarak:
- 16 baytlık bir başlatma vektörü (IV) içeren AES128_CTR_HMAC_SHA256, iyi sınırlara sahip en muhafazakar moddur.
- AES128_EAX, AES128_CTR_HMAC_SHA256'dan biraz daha az muhafazakâr ve biraz daha hızlıdır.
- AES128_GCM, genellikle en hızlı moddur ve mesaj sayısı ile mesaj boyutu konusunda en katı sınırlara sahiptir. Açık metin ve ilişkili veri uzunluklarıyla ilgili bu sınırlar (aşağıda) aşıldığında AES128_GCM başarısız olur ve anahtar materyali sızar.
- AES128_GCM_SIV, AES128_GCM ile neredeyse aynı hızdadır. İleti sayısı ve ileti boyutu açısından AES128_GCM ile aynı sınırlara sahiptir ancak bu sınırlar aşıldığında daha az yıkıcı bir şekilde başarısız olur: Yalnızca iki ileti arasında eşleşme olduğunu sızdırabilir. Bu, AES128_GCM'den daha güvenli bir kullanım sağlar ancak pratikte daha az kullanılır. Bu özelliği Java'da kullanmak için Conscrypt'i yüklemeniz gerekir.
- XChaCha20Poly1305, ileti sayısı ve ileti boyutu açısından AES128_GCM'den çok daha yüksek bir sınıra sahiptir ancak başarısız olduğunda (çok düşük bir olasılık) anahtar materyalini de sızdırır. Donanım hızlandırması olmadığından, donanım hızlandırmanın kullanılabildiği durumlarda AES modlarından daha yavaş olabilir.
Güvenlik garantileri
AEAD uygulamaları şunları sunar:
- CCA2 güvenliği.
- En az 80 bit kimlik doğrulama gücü.
- En az 232 iletiyi toplam 250 bayt olarak şifreleme olanağı 232'ye kadar seçili açık metin veya seçili şifre metni içeren hiçbir saldırının başarı olasılığı 2-32'den büyük değildir.
Örnek kullanım alanları
Verileri şifrelemek ve şifre metnini bağlamına bağlamak istiyorum.