Crypto 101 – [3] DES’e Yönelik Saldırılar, 3DES ve AES metodları

Merhaba

Crypto 101 yazı serisinin üçünü makalesi olan “” başlıklı konuya hoşgeldiniz. Bu makaleye devam etmeden önce,  “Crypto 101 – [2] Block Cipher Encryption ve DES Analizi” başlıklı yazıyı okumanızı öneririm.

Yazı serinin Github projesine erişmek ve kullanılan Python uygulamalarına erişmek için; https://github.com/mmetince/crpyto101-egitim

DES’e Yönelik Saldırılar

Bir önceki yazımıda DES (Data Encryption Standart) algoritmasının tarihini ve derinlemesine teknik analizini gerçekleştirmiştik. Şüphesiz ki bu analiz daha da derinlemesine gerçekleştirilebilir, detaylarına girilmeyen Initial Permutation, Expansion gibi fonksiyonların look-up table’ları ve algoritmaları ele alınabilirdi. Bu noktada “derinlemesine” kelimesine bir sınır getirerek, detaylara boğulmaktan uzaklaşıp olayı anlayacak düzeyde yakından analiz gerçekleştirmeye çalıştık. Umuyorum ki tarihin bilinen en eski block cipher algoritmalarından birisi olan DES algoritması siz okurlar tarafından anlaşılmıştır. 

DES algoritmasının özelliklerine hakim olduğumuza göre artık sıra DES’e yönelik gerçekleştirilmiş saldırıların analizine geldi.

DES algoritmasında gizli anahtarın maksimum uzunluğu 56 (Asıl uzunluk 64 bit olmasına karşın 8 bit pariti biti olarak kullanılır ve anahtar gizliliği ile ilgisi yoktur.) bit olarak sınırlandırılmıştır. Bu nedenle DES algoritması günümüzde güvensiz bir şifreleme algoritması olarak kabul edilmektedir.

56-bit Key Lenght

DES algoritmasının anahtar uzunluğu 56 bit olarak belirlenmiştir. Ki buda tam olarak; 2^56 = 72,057,594,037,927,936 yani yaklaşık 72 quadrillion ihtimal anlamına gelir. Bu olasılık ilk bakışta son derece büyük gözüküyor olsa da bilgisayar bilimleri ve kriptoloji dünyası için son derece küçük bir rakamdır. Bu rakam o denli küçüktür ki; 1976 yılında Stanford Üniversitesi’nden  Martin Hellman and Whitfield Diffie isimli iki araştırmacının tasarladığı ve maliyeti -o yıllar için- 20 milyon dolar olan bir makina ile 1 gün içerisinde  tüm olasılıkların denenebileceğini ispatlamışlardır. ( Şüphesiz ki 20 milyon dolar ülkelerin istihbarat birimleri için makûl olarak görülebilecek bir rakamdır. )

DES’in  anahtar uzunluğu sınırının neden olduğu bu problemler nedeniyle 1997 yılında “DES Challenges” isimli yarışmanın ilk düzenlendi. İlk yarışmanın ardından üç kere daha düzenlenmiş olan bu yarışma serisinde elde edilen sonuçlar aşağıdaki şekildedir.

  1. DES Challenges = 1997 yılında düzenlendi ve cipher-text metnin çözülmesi 96 gün sürdü.
  2. DES Challenges = 1998 yılında 39 gün içerisinde çözüm bulundu. Yarışmada kullanılan metin ise  “The secret message is: Many hands make light work.” idi.
  3. DES Challenges = Gene aynı yıl EFF firması tarafından 250.000 dolar maliyeti tutan özel tasarım bilgisayar ile DES ile şifrelenmi metin tam olarak 56 saatte bulundu. Yarışmada kullanılan metin son derece anlamlıydı. “The secret message is: It’s time for those 128-, 192-, and 256-bit keys.”
  4. DES Challenges = Son olarak 1999 yılında 22 saat 15 dakika içerisinde çözümlenen mesaj daha manidar bir metne aittir. “See you in Rome (second AES Conference, March 22-23, 1999)”

Bu sonuçlar bize ve o zaman ki “DES Challenges” organizatörlerine gösterdi ki, DES güvenilemeyecek kadar güvensiz bir algoritmaydı.

DES Cracker “Deep Crack”

DES algoritmasının geliştiricileri tarafından “differential cryptanalysis” adı verilen yöntem bilinmekteydi. Bu nedenle DES algoritması “differential cryptanalysis” sonucu olarak 2^47 seçilmiş plain-text ile teorik olarak kırılabilir olduğu ispatlanmıştır ki bu skor o yıllar için yeterli derecede güvenli anlamına gelmektedir -günümüzde gene yetersizdir.

1992 yılında Matsui tarafından geliştirilmiş olan “linear cryptanalysis” yöntemi, 2^43 adet bilinen plain-text data ile DES’in kırılabileceğini ispatlamıştır. Yani yaklaşık olarak 64 küsür terabyte block üzerinden DES anahtarı tespit edilebilir.

Yukarı bahsi geçen her iki yöntem de teorik olarak gerçek olsa da, pratikte malesef gerçekleştirilmesi imkansızdır.  Herhangi bir gerçek hayat senaryosunda, aynı DES anahtarı ile şifrelenmiş 64 terabyte verinin toplanması ve analizi mümkün değildir. Bu nedenle yine bilinen en eski yöntemlerden birisi olan Brute-Force yardıma koşacaktır ama bir farkla.

Hatırlatmak isterim ki, DES 1970’li yılların başında geliştirilmiş bir algoritmadır. Bu yıllarda bilgisayar bilimlerinde donanım sistemleri, günümüze oranlar yazılım sistemlerinden çok daha ön plandaydı. Bir önceki yazıda analiz edilen DES algoritmasının akış diagramına bakılırsa, algoritmanın logic kapılar ile donanımsal olarak implemente edilmesinin son derece kolay olduğu fark edilmektedir.

Deep-Crack, bir önce ki bölümde anlatılan DES Challenges’lara damgasını vuran Electronic Frontier Foundation firması tarafından DES algoritmasına yönelik saldırılar için özel olarak tasarlanmış microchip’lerden oluşmaktadır.
Board300

NSA ile ilgili DES Hurafeleri

Amerika Birleşik Devletleri bundan yıllar önce “Bizim bir kriptoloji algoritması standartına ihtiyacımız var. Bunu kim yapabilir ?” sorusuyla çıka geldi demiştik. Bu çağrıya cevap olarak, IBM tarafından kapalı kapılar ardından geliştirilmiş olan DES şifreleme algoritması doğdu ve hemen akabinde NSA tarafından dünyaya şifreleme standartı olarak sunuldu. Bu duyurudan sonra hemen hemen tüm ülkeler tarafında  DES kullanılmıştır.

Başta DES’in kapalı kapılar ardından geliştirilmiş olması, ikicni olarak anahtar uzunluğundan kaynaklanan brute-force’a karşı zaafının olması nedeniyle bir çok kişi tarafından “NSA, rahatça çözümleyebilmek adına bir algoritma geliştirdi ve tüm dünyaya sundu. Böylece diğer ülkelerin şifreli verilerini elde ettiğinde rahatça plain-text verilere ulaşmış olacaktı.” Bu  öneri kağıt üzerinde her ne kadar mantıklı duruyor olsada, kriptoloji uzmanları tarafından 1970 yıllarında ki teknolojinin vaziyeti ve ortaya konan algoritmanın özelleri göz önüne alındığında, bu önermenin hurafeden başka bir şey olmadığı düşünülmektedir.

3DES

DES’in zafiyetleri 3DES’in doğmasına neden oldu. 3DES son derece basit bir algoritmadır ve adından anlaşıldığı üzere DES’in 3 kere iç içe kullanılması ile gerçeklenir.

C = E(k1,D(k2, E(k3,p)))

3DES, plain-text verinin önce şifrelenip, ardından deşifrelenerek en son şifrelemeye gönderilmesi ile gerçekleşmektedir. Böylece aşağıdaki 2 iyileştirme gerçekleştirilmiş olur;

  • Algoritmanın 3 kez iç içe kullanılması ile doğrudan yapılacak olan kriptoanaliz saldırılarına karşı korunmuş olur.
  • Algoritmanın 3 defa çağırılması nedeniyle brute-force kullanımı son derece performansız bir hal almıştır.

Bu iyileştirmelere karşın aynı algoritmanın 3 kez çağırılması sistemde performans problemlerine neden olacaktır. Örneğin; AES ile 12.6 cycle ile tamamlanacak işlem, aynı derecede güvenli olacak 3DES ile 135 cycle’da tamamlanacaktır.

AES ( Advanced Encryption Standart )

DES şifreleme algoritmasının 1990’lı yıllarda bir çok saldırıya uğradı. Bu nedenle 1997 yılında NIST ( National Institute of Standards and Technology ) yeni bir kripto algoritması geliştirilmesi gerektiğini düşündü ve topluluğa açık bir yarışma düzenledi. Ağustos 1998 tarihine gelindiğinde kriptoloji bilimi ile ilgilinen çevreler tarafından 15 adet algoritma başvurusu yapılmıştı. Tam bir yıl sonra Ağustos 1999 yılında 10 adet başvuru elenerek 5 adet finalist algoritma seçildi. AES isimli şifreleme metodu bu 5 adet algoritmadan bir tanesi olacaktı. Aradan 2 yıl geçtikten sonra 2 Ekim 2000 tarihinde Rijndael isimli algoritma birinci olarak seçildi ve AES böylece doğmuş oldu. İsimleri Joan Daemen ve Vincent Rijmen olan iki Belçikalı “kriptocu” uzman tarafından geliştirilmiş olan bu algoritma ailesinden 128, 192 ve 256 key yani anahtar uzunluklarını kabul eden yaklaşımlar NIST tarafından kabul edilmiştir. Belki de bu süreçte ki en ilginç olaylardan bir tanesi 5’li finalistlerin arasında Bruce Schneier abimizin var olması ve yarışmayı kazanamamış olmasıdır.

AES algoritmasının derinlemesine analizini gerçekleştirmeyi planlamamaktayım. Buna karşın belli başlı önemli özelliklerinden bahsedip hızlıca stream-cipher algoritmalarına gideceğiz. ( eğer talep olursa AES analizi isimli özel bir bonus yazı hazırlayabilirim.)

AES ile DES’i yan yana koyup kıyasladığımızda neden AES’in çok daha güçlü ve güvenilir bir şifreleme algoritması olduğu görülecektir.

des_vs_aes

İlk göze çarpan madde DES’in başına ciddi problemler açan Key Length’in AES’te 256 bite kadar yükselmiş olmasıdır. Ayrıca block size olarak 128 bit’in kullanılıyor olması ile birlikte DES’te %50 olan “cipher-text’te 1 bit değişimi plain-text’in en az %50’sini değiştirmelidir” önergesini %100’e yakın değerlere çıkartmaya imkan sağlamaktadır. Bunu aşağıda ki gibi basit bir Python testi ile tespit edebiliriz.

from Crypto.Cipher import AES

key = "g1zl1KEYa1b2c3d6"
plain_text = "Mehmet-Ince-Blog"

aes = AES.new(key, AES.MODE_ECB)
cipher_text = aes.encrypt(plain_text)
print "Original CipherText   = {0}".format(repr(cipher_text))

# Original CipherText   = 'U\xe6\xbf\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'
# Change one byte       = 'U\xe6\xbe\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'

print "Change only one thing = {0}".format(repr('U\xe6\xbe\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'))

print "Original CipherText decryption  = {0}".format(aes.decrypt(cipher_text))
manipulated_ciphertext = 'U\xe6\xbe\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'
print "One thing changed CipherText    = {0}".format(aes.decrypt(manipulated_ciphertext))

Çıktısı ise aşağıda ki gibi olacaktır.

Original CipherText   = 'U\xe6\xbf\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'
Change only one thing = 'U\xe6\xbe\xbc\x14\xcf\x1a\xfc\x06~\xc1\xb1\xd6\x92{\xd3'
Original CipherText decryption  = Mehmet-Ince-Blog
One thing changed CipherText    = �z�u����<Zb|4a��

Yazıyı sonuna kadar okuyan tüm herkese iki kere teşekkürler. Düşünelerinizi, varsa yanlış olan yerleri veya soruları yorum olarak iletebilirsiniz.