İ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: Uzunluğu dışında düz 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: 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 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 (256 bit güvenlik için aşağıda AES128 yerine AES256'yı kullanın). Genel olarak:

  • 16 baytlık başlatma vektörüne (IV) sahip AES128_CTR_HMAC_SHA256, iyi sınırlara sahip en muhafazakar moddur.
  • AES128_EAX, AES128_CTR_HMAC_SHA256'ya kıyasla biraz daha az muhafazakar ve biraz daha hızlıdır.
  • AES128_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 (aşağıda) ilgili bu sınırlar aşıldığında AES128_GCM başarısız olur ve anahtar materyali sızdırır.
  • AES128_GCM_SIV, AES128_GCM kadar hızlıdır. İleti sayısı ve 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 iletinin eşit olduğu bilgisi sızabilir. Bu nedenle AES128_GCM'den daha güvenli olsa da 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 konusunda AES128_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ırmalı 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ü.
  • 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.