İlişkilendirilmiş Veriler (AEAD) ile Kimliği Doğrulanmış Şifreleme

İ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: Düz metinle ilgili olarak yalnızca uzunluğu bilinir.
  • Özgünlük: Şifrelenmiş düz metin, şifreli metnin temelini oluşturur ve fark edilmeden değiştirilemez.
  • Simetrik: Düz metnin şifrelenmesi ve şifreli metnin şifresinin çözülmesi aynı anahtarla yapılır.
  • Rastgele hale getirme: Şifreleme rastgele hale getirilir. Aynı düz metne sahip iki ileti farklı şifreli metinler oluşturur. Saldırganlar, hangi şifrelenmiş 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 aynı ilişkili veriler hem şifreleme hem de şifre çözme çağrılarına 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:

  1. QPS: Aynı anahtarla kaç ileti şifrelenir?
  2. İleti boyutu: İletiler ne kadar büyük?

Genel olarak:

  • 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.
  • AES-EAX (AES128_EAX, AES256_EAX), AES128_CTR_HMAC_SHA256'ya kıyasla biraz daha az muhafazakar ve biraz daha hızlıdır.
  • AES-GCM (AES128_GCM, AES256_GCM), genellikle en hızlı moddur ve ileti sayısı ile ileti boyutu konusunda en katı sınırlara sahiptir. Düz metin ve ilişkili veri uzunluklarıyla ilgili bu sınırlar (aşağıda) aşıldığında AES-GCM felaketle sonuçlanacak şekilde başarısız olur ve anahtar materyali sızdırır.
  • 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.
  • 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 materyalini de sızdırır. Donanım hızlandırma özelliği desteklenmediğinden, donanım hızlandırma özelliğinin 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ü.
  • Toplam 250 bayt boyutunda en az 232 iletiyi şifreleyebilme Seçilen 232 düz metin veya şifreli metinle yapılan hiçbir saldırının başarı olasılığı 2-32'den yüksek değildir.

Örnek kullanım alanları

Verileri şifrelemek ve şifreli metni bağlamına bağlamak istiyorum.