biraz daha derinlemesine asimetrik şifreleme

11 Ağustos
2008

Daha önce yüzeysel olarak anlattığım asimetrik şifrelemeyi biraz daha teknik inceleyim istedim, sonrada dijital imzalama ve elektronik imza altyapısından bahsederim.

İki tane anahtarımız vardı public ve private, bunlardan public sadece sifreleme yapabilirken, private sifre acma islemi yapabiliyordu. Simdi biraz daha derin matematiksel kısma bakalım, basit bir asimetrik şifreleme işlemi yapayım matematiksel olarak; (RSA algoritması üzerinden anlatacağım işlemleri)

En başta iki tane asal sayı seçiyoruz ve bunlara p ve q diyoruz (terminoloji gereği tabi ki, isterseniz ahmetle mehmet deyin)

p = 29 ve q=31 olsun, sonra bu iki sayının çarpımından oluşan bir sayımız oluyor buna da n diyoruz

n= 29 * 31 = 899 ,sonra p ve q’dan bir çıkartıp çarpıyoruz tekrar, bu sayının adı da totient oluyor (kısaca t)

t= 28 * 30 = 840 , sonra 1 den büyük ve totient’den küçük bir tam sayı seçiyoruz ve adına “e” diyoruz, önemli nokta e ile totient’in ortak böleni olmaması lazım, (bir sayısı dışında tabi)

e= 11 olsun, son olarak bir d sayısı hesaplamamız gerekiyor, e * d=1 +  (A * t) denkliğini sağlayan bir d sayısı, yani; 801 * d = 1 + (A * 840) burada A sayısının bir önemi yok. Yazımı farklı bir açıdan ele alırsak; d * e ≡ 1 Mod(t) de denebilir yani öyle bir d sayısı bulacağız ki, e ile çarpımının t ye bölümü 1 sayısını kalan olarak verecek. Hesaplarsak (excel tablosu sayesinde hesapladım el ile pek mümkünatı yok) d= 611 buluruz.

Anahtarlarımız oluşmuş durumda, e ve n çifti public key (açık anahtar), d ve n çifti ise private key (kapalı anahtar), Asimetrik şifrelemede encrypt ve decrypt içinde hemen hemen aynı şema kullanıyor:

public key ile şifrelerken; (A ^ e) Mod (n) [yani şifrelenecek sayı üzeri e, sonra Mod n]
private key ile şifre çözülürken; (A ^ d) Mod (n) [şifrelenmiş sayı üzeri d, sonra Mod n]

bir örnek yapalım, elimizde bir sayı var diyelim ki 25 bunu yarattığımız anahtarları kullanarak şifreleyelim;
(25 ^ 11) Mod (899) = 749 yukarıdaki yarattığımız anahtara göre 25 sayısının sifrelenmiş hali 749, bunu private key ile açarsak bu sefer (749 ^ 611) Mod 899 = 25 sonucu ortaya çıkar. Böylece 10 bitlik anahtar ile işlemi gerçekleştirmiş olduk.

Aynı zamanda asimetrik şifrelemedeki sıkıntıları da görmüş oluyoruz, şöyleki öncelikle 10 bitlik bir anahtarla bile ortaya çıkan sayıların büyüklüğünü görmüş olduk, decrypt işleminde hesapladığımız sayı (749 üzeri 611) yaklaşık olarak 2,0341857815358837008249608508583e+1756 gibi bir sayıdır, yani 1756 basamaklı bir sayı, bu sayıyı mod işleminden geçirdik vs. normal şartlarda min. 1024 bitlik anahtarlar kullanıldığından işlemin nasıl sayılarla yapıldığını siz hesap edin. İşte temelde mantığı yüzünden asimetrik şifreleme asla simetrik şifreleme kadar hızlı çalışamaz.

İkinci olarak görüldüğü üzere Mod(n) işlemi dolayısı ile anahtar boyutu (yani n’in boyutu) ndan daha uzun veriler asimetrik şifreleme olarak şifrelenemez. Girdi her zaman, en fazla anahtar boyutu kadar olur.

Son olarak da, (şu anda çok uçuk gibi görülse de) her zaman bir kırılma olasılığı barındırmasıdır, şöyleki biz zaten public key olarak e ve n sayılarını saldırgana veriyoruz, e sayısının özelliği t den küçük ve ortak böleni olmayan bir sayı, t’nin özelliği ise p ve q sayılarının birer eksiklerinin çarpımı ile oluşturulmuş olması, p ve q ise asal iki sayı ve bütün anahtarın bel kemiği. Bu saydığım özellikleri bir araya getirip oluşturulacak bir atakla bütün sistemin çökmesi mümkün, tek sorun zaman. Örnekte 10 bit ile çalıştık biraz bir zaman içerisinde ortalama bir bilgisayar bile brute-force ile p ve q ya ulaşabilir. 1024 bitlik bir anahtar için sistemin biraz biraz daha (hesaplamalara göre günümüz bilgisayarları için 1000 yıl) uzun zamana ihtiyaç vardır, ama teknoloji gelişim göz önüne alındığında elbet bir gün 1024 bitlik anahtarda rahatça kırılabilir hale gelecektir. Tabi o zamana 4096 lık anahtarları kullanmaya başlamış oluruz ama bu kedi-fare durumu ne zaman nasıl sonlanır.

Anlatmak isteğim şu aslında; mesela 10 bitlik anahtarlar kullanıyoruz ve teknoloji makul sürelerde 5 bitlik anahtarı kırabiliyor. zaman geçiyor biz 20 bitlik anahtara terfi ederken aynı hızla 10 bitlik anahtarlar kırılmaya başlıyor ama, 20 bitlik anahtarın bize yeni yarattığı oluşturma ve şifreleme maliyeti ile diğer tarafın gelişen teknolojiden dolayı artan faydası aynı oranda mıdır? Değilse bir zaman sonra ek bitleri anahtarla eklemenin yaratığı fayda onu kırmaya çalışan bilgisayarların kazandığı gücün gerisinde kalır ki bu da mesela işte 8096 bitlik anahtlarlar kullanılmaya başlayamadan onu rahatlıkla kıran teknolojilerin kullanılmaya başlaması demek anlamına gelir, kısaca sistemin çöküşü…

(Tamam bu ara fazla futurist takılıyorum…)

Yorumlar kapalı.

başa dön