it-swarm-tr.com

Düz metin ve şifre metni verilen AES şifreleme anahtarını hesapla?

Oracle'da şifreli dizeler (yani, sütunlar RAW) içeren veritabanı tabloları oluşturmakla görevlendirildim. Dizeler uygulama tarafından şifrelenir (AES, 128 bit anahtar kullanılarak) ve Oracle'da depolanır, daha sonra Oracle'dan alınır ve şifresi çözülür (yani, Oracle'ın kendisi şifrelenmemiş dizeleri asla görmez).

İki dizeden biri olacak bu bir sütuna rastladım. Birisinin AES anahtarını bulmak için bu iki değerin ne olduğunu fark edip muhtemelen anlayacağından endişeleniyorum.

Örneğin, birisi sütunun Ciphertext # 1 veya # 2 olduğunu görürse:

  • Şifreleme # 1:

    BF,4F,8B,FE, 60,D8,33,56, 1B,F2,35,72, 49,20,DE,C6.
    
  • Şifre metni # 2:

    BC,E8,54,BD, F4,B3,36,3B, DD,70,76,45, 29,28,50,07.
    

ve karşılık gelen Düz Metinleri bilir:

  • Düz metin # 1 ("Detroit"):

    44,00,65,00, 74,00,72,00, 6F,00,69,00, 74,00,00,00.
    
  • Düz metin # 2 ("Chicago"):

    43,00,68,00, 69,00,63,00, 61,00,67,00, 6F,00,00,00.
    

şifreleme anahtarının "Buffalo" olduğunu söyleyebilir mi?

42,00,75,00, 66,00,66,00, 61,00,6C,00, 6F,00,00,00.

Plaintext # 1'i Ciphertext # 1'e dönüştürebilecek tek bir 128 bit anahtar olması gerektiğini düşünüyorum. Bu, bunun yerine 192 bit veya 256 bit anahtarına gitmem veya başka bir çözüm bulmam gerektiği anlamına mı geliyor?

(Bir yana, burada aynı düz metinler için ancak farklı bir anahtarla iki şifre daha var.)

  • Şifre metni 1 A ("Detroit"):

    E4,28,29,E3, 6E,C2,64,FA, A1,F4,F4,96, FC,18,4A,C5.
    
  • Şifre metni 2 A ("Chicago"):

     EA,87,30,F0, AC,44,5D,ED, FD,EB,A8,79, 83,59,53,B7.
    

[İlgili soru: AES ve CBC kullanırken IV, düz metnin karması olabilir mi? ]

31

Topluluk wiki'si olarak bir cevap ekliyorum çünkü kabul edilen cevabın tehlikeli yanıltıcı olduğuna inanıyorum. İşte benim akıl yürütmem:

Soru, AES anahtarlarını türetebilmeyi sormak. Bu bağlamda kabul edilen cevap doğrudur: buna Bilinen Düz Metin Saldırısı denir ve AES bu tür saldırılara karşı dayanıklıdır. Böylece bir saldırgan, anahtarı türetmek ve tüm veritabanıyla başa çıkmak için bundan yararlanamaz.

Ama burada tehlikeli ve potansiyel olarak tehlikeli bir saldırı daha var: a Ciphertext Indistinguishablity Attack . Wikipedia'dan:

Şifreli metin ayırt edilemezliği birçok şifreleme düzeninin bir özelliğidir. Sezgisel olarak, eğer bir şifreleme sistemi ayırt edilemezlik özelliğine sahipse, bir düşman şifreleme mesajına göre şifreleme çiftlerini ayırt edemez.

OP bize bu sütunun iki olası değerden birini içerdiğini ve şifrelemenin deterministik olduğu (yani rastgele bir IV kullanmadığı) gösterdi ve saldırgan hangi satırların birbiriyle aynı değere sahip olduğunu görebilir. Saldırganın tek yapması gereken, tek bir satır için o sütunun düz metnini bulmak ve tüm sütundaki şifrelemeyi kırmaktır. Verilerin gizli kalmasını istiyorsanız kötü haber - ki ilk başta neden şifrelediğinizi varsayıyorum.

Etki Azaltma: Buna karşı korumak için, şifrelemenizi belirleyici olmayan (veya en azından saldırgan için belirleyici olmayan görünecek şekilde) yapın, böylece aynı tekrarlanan şifrelemeler düz metin farklı şifre metinleri verir. Örneğin bunu Şifreleme Blok Zinciri (CBC) mod içinde rastgele Başlatma Vektörü (IV) ile AES kullanarak yapabilirsiniz. Her satır için yeni bir IV oluşturmak ve tablodaki IV'ü depolamak için güvenli rasgele sayı üreteci kullanın. Bu şekilde, anahtar olmadan saldırgan hangi satırların eşleşen düz metne sahip olduğunu söyleyemez.

45
Mike Ounsworth

n - bit anahtarına sahip bir blok şifresi için, düz metin bloğu ve karşılık gelen şifre metni verildiğinde, anahtar 2n-1 adımda, bu blok şifrenin "kırıldığı" söylenir ve kriptograflar bunu kullanmamaya özen gösterir. AES kırık değil (henüz). Yani endişelenme.

Yine de birkaç şey söylenebilir:

  • Düz metin ve karşılık gelen şifre metnine sahip olmak, bir saldırganın potansiyel bir anahtar değerini doğrulamasına izin verir .
  • 2n-1 değeri aslında anahtar boşluğunun yarısı kadardır. Fikir, saldırganın eşleşene kadar olası tüm anahtarları deneyebilmesidir. Ortalama olarak, doğru olana çarpmadan önce anahtarların yarısını denemek zorunda kalacak. Bu, anahtar alanın boyutu olduğunu varsayar 2n. Anahtar alanını azaltma olasılığınız hala var: örneğin, anahtarınızın bir ABD kasabasının adı olduğuna karar verirseniz, olası anahtarların sayısı çok daha düşüktür (ABD'de 100.000'den fazla kasaba olmamalıdır) . Bu nedenle, söz verilen 128 bit güvenliği yalnızca anahtar oluşturma işleminiz gerçekten de 128 bit anahtar üretebiliyorsa alırsınız.
  • Görünüşe göre her değeri doğrudan AES çekirdeğine doldurarak şifreliyorsunuz. AES deterministiktir, bu aynı değere sahip iki hücrenin aynı şifreli bloğu vereceği ve herhangi bir saldırganın bunu fark edebileceği anlamına gelir. Başka bir deyişle, hangi hücrelerin birbirine eşit olduğu hakkında bilgi sızdırıyorsunuz. Durumunuza bağlı olarak, bu bir sorun olabilir veya olmayabilir; farkında olmalısın.
  • 16 bayttan daha uzun değerleri nasıl işlediğinizi söylemezsiniz. Bu basit bir mesele değil. Tüm genel olarak, bu CBC gibi bir zincirleme mod ve Başlatma Vektörü (moda bağlıdır; için CBC, 16 baytlık rastgele bir değer - her biri için yeni bir IV şifreli değer) (bu, önceki noktadan bilgi sızıntısını da düzeltebilir).
15
Thomas Pornin

Cevap: Hayır, bu senaryoda AES anahtarı kurtarılamaz. AES bilinen düz metin saldırısına karşı güvenlidir. Bu, bir saldırgan düz metni ve karşılık gelen şifreleme metnini (bilinmeyen bazı AES anahtarları altında şifrelemesi) bilse bile, saldırganın AES anahtarını kurtaramayacağı anlamına gelir. Özellikle, saldırgan AES anahtarını birbiri ardına olası anahtarları denemekten daha hızlı kurtaramaz - bu, AES anahtarının rastgele seçildiği varsayılarak, medeniyetimizin ömründen daha uzun sürecek bir süreçtir.

Not; Şifreleme için kullandığınız her şeyin bir IV kullanmadığını fark ettim. Bu bir güvenlik riskidir. Hangi çalışma modunu kullandığınızı bilmiyorum, ancak rastgele bir IV ile saygın bir şifreleme modu (örn. CBC modu şifrelemesi, CTR modu şifrelemesi) kullanmalısınız. Aynı iletinin birden çok kez şifrelenmesinin her seferinde size aynı şifreleme metnini vermesi, kaçınılması daha iyi bir güvenlik sızıntısıdır. Uygun bir IV ile standart bir çalışma modu kullanarak bu sızıntıyı önleyebilirsiniz. (Ayrıca, şifreleme metninin kimliğini doğrulamak ve üzerinde değişiklik yapılmasını önlemek için bir ileti kimlik doğrulama kodu (MAC) da kullanmalısınız.)

5
D.W.

Şifrelemeni tuzla.

Bu şekilde şifrelemenizde herhangi bir desen olmaz. (Başka faydaları da var!)

https://stackoverflow.com/questions/5051007/what-is-the-purpose-of-salt

3
Morons

AES sadece bir Rainbow masası oluşturmak kadar kolay değil. Fark etmeniz gereken ilk şey, tablonun bir başlatma vektörü gerektirmesidir. Bunu yarı düzenli olarak değiştirdiğiniz müddetçe (gerçekten gerçekçi olmayan) bir Gökkuşağı masası inşa etmek çok uzun zaman alacaktır. Büyüklük dereceleri uzun. Tipik bir Rainbow tablosu temelde 2 boyut olacağından, hem IV hem de anahtarı anlamak için sonuç kümelerinin bir küpüne ihtiyacınız olacaktır.

Thomas Pornin'in gönderisini okursanız, sonucun kaba kuvvetlendirilmesi açısından bunun ne anlama geldiği konusunda oldukça büyük ayrıntılara girer.

Gerçekçi endişe, veritabanına erişimi olan birisinin başka bir alandan bir dize enjekte edebilmesidir (muhtemelen öğe başına sütunda rastgele bir dolgu değeri kullanmamanızdır. Veya tohumlama.)

Değeri tohumlarsanız, bu sorun olmaz ve şifre metnine tek (gerçekçi) saldırı çok daha zor hale gelir.

2
Ori