siηaη
08-08-2006, 10:56
Açık anahtarlı kriptografi ile ilgili ilk makalelerin ortaya atılmasına kadar olanki süreçte kullanılan simetrik kriptografi sistemler göz önünde bulundurulduğunda açık anahtarlı kriptografinin gelişmesi, bütün kriptografi tarihindeki en büyük devrimdir. Her şey gaz ve toz bulutu olduğu sıralardaki, sadece elle hesaplanabilen algoritmalarla çalışabilme döneminden sonra, şifreleme/deşifreleme yapan rotor makinelerinin ortaya çıkması sonucunda, geleneksel kriptografide büyük bir gelişme kaydedildi.
Elektro mekanik rotor (ikinci dünya savaşı ve kriptografi denince akla gelen makineler), çok fazla inceliklere sahip ve karmaşık kriptografik sistemlerin geliştirilebilmesini sağladı... Sonrasında, bilgisayarlarla daha karmaşık sistemler tasarlandı ve en tanınanlarından olan -IBM´in- Lucifer girişimi gelişerek DES´i oluşturdu ve DES`i dünyadaki kriptografi teknikleri arasında en yüksek seviyeye getirdi. Rotor makineleri ve DES (Data Encryption Standart), önemli avantajlar sunmalarına rağmen, halen ilkel süpstütüsyon ve permütasyon işlemlerine bağımlıdırlar. Bu arada DES'in açılımı Data Encryption Standart'tır ve günümüzdeki bir çok simetrik şifreleme algoritması gibi şifreleme için Fiestel yapısı kullanır (fiestel yapısı şifrelenecek bloğun iki parçaya bölünmesi ve her aşamada sadece biri üzerinde işlem yapılması ve bu işlemin sonucunun da bir sonraki aşamada verinin ikinci yarısına etkimesi esasına dayanan sarmal bir yapıdır). DES incelemesi hayli keyifli bir algoritmaya sahiptir, ilerleyen sayılarımızda ayrıntılı şekilde ele almamızın önünde herhangi bir engel yok.
Açık anahtarlı kriptografi, gerçek anlamda daha önceki gelişmelerden radikal bir kopuştur. Açık anahtarlı kriptografik sistemlerin en önemli noktaları matematiksel işlevler üzerine temellenmiş olmalarıdır, aslında açık anahtarlı kriptografi için matematiğin çözüm getiremediği bir takım durumları (örneğin çok büyük bir sayının iki asal çarpanının bulunmasının matematikte herhangi bir doğrudan çözümü olmaması gibi) kullanarak güvenlik sağlar, bu yüzden de incelenmesi ayrı keyif ve heyecan verir. Daha da önemlisi, açık anahtarlı kriptografi, tek anahtar kullanan simetrik geleneksel şifreleme algoritmalarının tersine, iki ayrı anahtarın asimetrik kullanımını öngörür. Birazdan göreceğimiz gibi, anahtar dağıtımı ve kimlik denetimi gibi gizlilik ve güven gerektiren durumlarda, iki anahtar kullanımı etkili sonuçlar ortaya koymuştur.
İlerlemeden önce, açık anahtarlı şifreleme ile ilgili bazı yaygın, yanlış bilgilerden bahsetmeliyiz. Bu yanlış düşüncelerden birisi, açık anahtarlı şifrelemenin, kriptoanalize karşı geleneksel şifreleme yöntemlerinden daha güvenli olduğudur. Örneğin böyle bir iddia, Gardner´ın meşhur Scientific America adlı 1977 yılında yayınladığı makalesinde yapıldı. Aslında, şifrelemenin güvenliği, anahtarın uzunluğuna ve şifreli metnin tabi kaldığı hesapsal işlemlerin karmaşıklığına dayanır. İster geleneksel ister açık anahtarlı şifreleme olsun, kriptonaliz bakış açısına göre birini direğinden üstün tutmak tamamen yanlış olur.
Bir ikinci yanlış düşünce de, genel amaçlı kullanım için geliştirilmiş bir teknik olan açık anahtarlı şifrelemenin, geleneksel şifrelemeyi modası geçmiş kıldığıdır. Tam tersine, geleneksel şifrelemeden vazgeçileceği düşüncesi, açık anahtarlı şifreleme yöntemlerinin, matematiksel fonksiyonlarından dolayı, ihtimal dışı gözüküyor. Açık anahtarlı şifreleme sistemleri çoğunlukla simetrik şifreleme sistemlerinin kullandığı gizli anahtarların değişimi için kullanılır.
Son olarak, açık anahtarlı şifreleme kullanılırken, geleneksel şifrelemenin daha hantal anahtar dağıtım merkezleri (KDC) ile karşılaştırıldığında, açık anahtarlı sistemlerin anahtar dağıtımının üzerinde kafa yorulması gerekmeyen, sıradan ve basit bir iş olduğuna dair yanlış bir anlayış vardır. Aslında, protokolün bazı biçimleri gereklidir fakat, geleneksel şifreleme yöntemlerinin ihtiyaç duyduğu merkez temsilciler ve prosedürler, açık anahtarlı şifrelemenin ihtiyaç duyduklarından daha basit daha karmaşık ya da daha etkili değildir. Anahtar dağıtım senaryoları da hayli keyifli olmasına rağmen bu yazıda ya da sonraki yazılarda değinmeyeceğimiz şeyler.
Şimdi açık anahtarlı şifrelemeye genel bir giriş yapmaya çalışalım. İlk önce, olması gerektiği gibi işin kavramsal çerçevesine bakmaya çalışacağız. Bu noktada açık anahtarlı kriptografi ile ilgili enteresan bir anektodu es geçmek olmaz: Açık anahtarlı kriptografinin, pratik olarak uyarlanışı gösterilmeden, tekniğin mimarisi geliştirildi ve doğru kabul edilerek yayınlandı. Kimse açık anahtarlı kriptografinin pratiğini görmeden, sistemin teorisi kabul gördü (bu bize şu anda da içinde bulunduğumuz benzeri bir durumu hatırlatıyor değil mi?). Daha sonra, açık anahtarlı şifreleme yöntemi için, uygulanabilir olarak gösterilen en önemli şifreleme/deşifreleme algoritması olan, RSA algoritmasını inceleyeceğiz. RSA'nın R'si aynı zamanda RC5 gibi müthiş bir şifreleme algoritmasını da geliştirmiş olan Ron Rivest'a aittir. Diğerleri de Adleman ve Shamir'dir.
Açık anahtarlı kripto sistemlerinin çoğunluğu, sayılar teorisini temel almıştır. Bu bölümde verilen sonuçları algılamak için, sayılar teorisini -neyse ki- anlamanıza yada biliyor olmanıza çok da gerek yoktur. Bununla birlikte, açık anahtarlı şifreleme algoritmaları hakkında kesin bir yargıya varmak için, sayılar teorisinin bazı kısımlarını bilmek gereklidir.
Açık Anahtarlı Kripto Sistemlerin Prensipleri
Açık anahtarlı şifrelemenin temel amacı, gerçekleştireceği devrim ile geleneksel şifrelemenin en büyük problemine çözüm sağlamaktı: gizli anahtarların dağıtımı. Gizli anahtar derken, DES, Blowfish, Twofish, AES, CAST128, RC5 gibi simetrik yani sadece şifreleme işlemini gerçekleştirdiğiniz anahtar ile veriyi de-şifreleyebileceğiniz yapılar sunan geleneksel şifreleme algoritmalarının kullandığı anahatrları kastediyoruz. Biraz ip ucu vermiş oldum, tahmin ettiğiniz gibi açık anahtarlı kriptografide işler bu şekilde yürümüyor (az sonra!)..
Geleneksel şifrelemeden yararlanarak birbirlerine şifrelenmiş metinler gönderecek olan taraflar, şifreleme ve de-şifreleme işlemleri için, ya bir şekilde kendilerine güvenli olduğuna inandıkları bir iletim kanalı yoluyla ulaştırılmış olan anahtarı kullanacaklar, ya da, bir anahtar dağıtım merkezinden faydalanmak zorundadırlar. Açık anahtarlı kriptografinin mucitlerinden birisi olan Whitfield Diffie (diğeri de Stanford Üniversitesinden Martin Hellman'dır), kriptografinin özü olan, “iletişimde %100 güvenlik esası”nı hiçe sayan bir anahtar dağıtım merkezi kullanma gerekliliğini ortadan kaldırdı. Çünkü gayet ortadadır ki güvenli bir ieltişim halinde olmak isteyen tarafların kullanacakları gizli anahtarları bir anahtar dağıtım yetkilisinden almaları, kimi durumlarda üçüncü parti bir kişinin iletişimi anlaşılır kılabileceği tehlikesini barındırmakta idi... Çok çirkin bir durum.
Açık Anahtarlı Kripto Sistemlerin Karakteristikleri
İşte size gerçekten enteresan bir önerme: Açık anahtarlı şifreleme/de-şifreleme algoritmaları, şifreleme için bir anahtara, de-şifreleme içinse bu anahtarla matematiksel ilişkisi olan -ama bu anahtar olmayan- ikinci bir anahtara ihtiyaç duyarlar [3].
Yani şimdi şöyle oluyor öyle mi? Ortada iki anahtar var. Birisi, diğeri ile matematiksel bir ilişki içerisinde, yani beraber üretiliyorlar. Birisini herkes biliyor (genel anahtar tabir ettiğimiz, benimkine de web sayfamdan ulaşabileceğiniz anahtar), diğerini de kimse bilmiyor, ve sonra birisi ile şifrelenen metin sadece diğeri ile açılabiliyor. Ve ben matematiksel ilişkinin ne olduğunu bildiğim, bilmiyorsam da az sonra öğreneceğim, ve anahtarlardan birisine sahip olduğum halde diğer anahtarı (genel anahtar ile ilişkili olan özel anahtarı) bulamıyorum öyle mi? Evet, bulamıyorsunuz, ve evet, bence de hayat çok garip.
İşte, açık anahtarlı kriptosistemler [3] önermesi yolu ile güvenlik sağlamış olurlar. Kafanıza takıldığını bildiğim matematiksel ilişkiye az sonra değineceğiz fakat, önce bu algoritmaların hangi karaktersitikleri sergilediğini görelim ki attığımız başlık boşa gitmesin:
Sadece kriptografik algoritma ve de şifreleme anahtarı verilmişken, bir takım hesaplamalar yolu ile şifreleme anahtarını bulmak mümkün değildir.
Her iki benzer anahtar da şifreleme ve de-şifreleme için kullanılabilir. Bununla beraber, bir anahtar şifreleme için kullanılmışsa, de-şifreleme için diğer anahtar kullanılmalıdır.
Ayrıca kabaca bir açık anahtarlı şifreleme oturumu şu adımlarla gerçekleşir:
Her ağdaki her son sistem, kullanıcı ya da benzeri, mesaj alındığında şifreleme ve de-şifreleme için kullanacak olduğu anahtar parçalarını yaratır.
Her sistem, şifreleme anahtarını herkesçe erişilebilecek bir dosya ya da yazmaç içerisine kaydederek ya da duyurarak herkesce erişilebilecek şekilde paylaşır. Bu anahtarın, genel olan kısmıdır (public key diye geçer). Özel anahtar saklı tutulur.
Eğer, herhangi bir A, herhangi bir B'ye, B'nin bu mesajı kendisinden başka kimsenin görüntüleyemediğine emin olabileceği bir mesaj yollamak isterse, mesajı B'nin genel anahtarını kullanarak şifreler.
B, mesajı aldığında, bu mesajı kendi özel anahtarını kullanarak de-şifre eder. Diğer hiçbir alıcı (diyelim ki bu ağlardan herhangi birindeki bir sniffer) mesajı de-şifreleyemez, çünkü mesajı de-şife edecek olan özel anahtarı sadece B bilir.
Bu yukardaki senaryo ile, B sadece kendisinin okuduğundan ve başka herhangi bir kimsenin görüntüleyemediğinden emin olduğu bir mesaj alır. Fakat bunun kimden geldiğinden emin olamaz. Gizlilik sağlanmış olur. Yukardaki son iki adımın şu şekilde gerçekleşmiş olduğu bir senaryoya bakalım bir de:
Eğer, herhangi bir A, herhangi bir B'ye B'nin A'dan geldiğine emin olarak okuyabileceği bir mesaj yollamak isterse, mesajı kendisinin gizli anahtarını kullanarak şifreler.
B, mesajı aldığında, bu mesajı A'nın genel anahtarı ile de-şifreler. Diğer üçüncü parti alıcıların her biri de bunu yapablilir, çünkü A'nın genel anahtarı herkesce bilinmektedir. Bu durumda B, bu mesajın A'nın ta kendisinden geldiğinden, ve kendisine ulaşana kadar yolda herhangi bir yerinin değiştirilmediğinden emin olur. Çünkü A'nın genel anahtarı ile de-şifrelediği mesajın sadece A'nın bilebileceği özel anahtar ile şifrelenmiş olabileceğini bilir.
Bu senaryo ile de gizlilik yerine kimlik denetimi sağlanmış olur. Hem gizliliğin hem de kimlik denetiminin sağlanabileceği bir senaryo da şu şekilde olabilir bu durumda:
Eğer, herhangi bir A, herhangi bir B'ye, B'nin A'dan geldiğine ve yolda kendisinden başka kimsenin içeriğini görüntüleyemediğine emin olarak okuyabileceği bir mesaj yollamak isterse, mesajı kendisinin gizli anahtarını kullanarak şifreler, daha sonra ortaya çıkan mesajı da B'nin genel anahtarını kullanarak şifreler.
Bu sayede de hem gizlilik hem de iki taraflı kimlik denetimi sağlanmış olur.
Tüm bunların hangi matematiksel yöntemler ile sağlandığı konusundaki merakınızı biraz daha arttırmak için bir de aşağıdaki başlığı inceleyelim, RSA ya da El-Galam bir açık anahtarlı şifreleme algoritması yazmak isterseniz aşağıdaki gereklilikleri sağlamanız gerekecek... Daha sonrasında da RSA'yı biraz inceleyip, onun kullandığı yönteme göz atacağız.
Açık Anahtarlı Kriptografi için Gereklilikler
Daha önce söylediğimiz gibi Diffie ve Hellman, herhangi bir açık anahtarlı algoritmanın varlığını göstermeksizin bu bu bahsettiğimiz sistemi “varsaymışlardır”. Bununla beraber, ilerde yazılması muhtemel algoritmaların yerine getirmeleri gereken durumları şöyle sıralamakatn da geri kalmamışlardır*:
Bir B için, anahtar parçalarını (genel anahtar ve özel anahtar) yaratmak, hesapsal olarak kolay olmalıdır.
Gönderenin (A olsun), mesajı göndereceği kişinin (B olsun) genel anahtarını bildiği ve şifrelenecek olan mesajı (M olsun) bildiği durumda, uygun şifreli metni (C olsun) yaratmak hesapsal olarak kolay olmalıdır.
C = EKUB(M)
Alıcı B`nin, özel anahtarını kullanarak, şifrelenmiş mesajı orijinal haline getirmesi hesapsal olarak kolay olmalıdır.
M = DKRB(C) = DKRB(EKUB(M))
Herhangi bir rakip için, genel anahtarı bilerek, özel anahtarı bulması hesapsal olarak imkansız olmalıdır.
Herhangi bir rakip için, genel anahtarı, şifreli metini (C`yi) bilerek orijinal mesajı (M`yi) elde etmesi hesapsal olarak imkansız olmalıdır.
Bunlara ek olarak, yararlı olmasına rağmen gerekli olmayan altıncı bir maddeyi ekleyebiliriz:
Şifreleme ve de-şifreleme fonksiyonları her iki sıra ile de uygulanabilir olmalıdır.
M = EKUB(DKRB(M))
Bunlar, sağlanması gerçekten zor olan gerekliliklerdir. Bu yüzden, açık anahtarlı kriptografi fikrinin ileri sürüldüğünden bu yana geçen yıllar süresince sadece bir kaç algoritma geniş bir kitle tarafından kabul edilmiştir.
Bu kadar zor gerekliliklerin istenmesinin sebeplerini açıklamadan önce en önemli noktayı, tek yönlü fonksiyonu (one-way function) açıklayalım. Söz konusu olan tek yönlü fonksiyon şöyledir: fonksiyonun bire-bir olduğu bir aralıkta, tersini hesaplamak imkansız iken, fonksiyonun kendisinin hesaplanması kolaydır; açık anahtarlı kriptografinin dehşet dayanak noktası.
Y = f(X) çok kolay iken
X = f-1(Y) işleminin çok zor olması durumu.
Tabi belirtilmesi gereken bir nokta da şudur, "kolay" dan kasıt, fonksiyonun girdi uzunluğuna bağlı olarak polinomal bir z aman süresi içerisinde çözülebilir olmasıdır. Şöyle ki, eğer girdi uzunluğu n bit kadarsa, fonksiyonun hesaplanması için gereken süre, a bir sabit sayı iken, na gibi bir fonksiyonla orantılı olmalıdır. "İmkansız" ise, oldukça bulanık bir durumu ifade etmek için kullanılır. Bir problemin çözümünün matematiksel olarak olanaksız olduğundan, giriş büyüklüğüne bağlı olarak çözüm için harcanan çabanın, polinomal zamandan daha hızlı arttığı durumda bahsedebiliriz.
Örneğin, girdi n bit ile gösterilirken, fonksiyonun çözülme zamanı 2ngibi bir fonksiyona bağlı olarak artıyorsa, bu fonksiyonun çözümünün imkansız olduğunu düşünebiliriz. Hesapsal kompleksliğin geleneksel fikirleri bir algoritmanın kompleksliğini en kötü duruma yada ortalama bir duruma odaklar. Bu oranlar kriptografi için değersizdir, çünkü kriptografide bir fonksiyonu tüm girilenler için tersine çevirmek nerdeyse olanaksızdır, lakin bu genelleme, en kötü durum yada ortalama durum için geçerli değildir.
Şimdi de son olarak, bir taraftan hesaplanması kolay, diğer bir taraftan ise belirli ek bilgiler bilinmedikçe hesaplanması olanaksız olan tuzak kapılı tek yönlü fonksiyonun (trap-door one-way function) açıklanmasına bakalım. Polinominal zamanda fonksiyonun tersi ek bilgiyle hesaplanabilir. Adım-adım özetleyebiliriz: Tuzak kapılı tek yönlü fonksiyon, tersine çevrilebilir fonksiyonların ( fk ) bir ailesidir. Şöyle ki;
Y = fk(X) ----- k ve X biliniyorsa kolay...
X = fk-1(Y) ----- k ve Y biliniyorsa kolay...
X = fk-1(Y) ----- Y biliniyor fakat k bilinmiyorsa çözülemez...
Uygulamalı bir açık anahtarlı kriptografi algoritmasının geliştirilmesi yukardaki gibi bir tuzak kapılı tek yönlü fonksiyonun bulunuşuna bağlıdır, sonrası kolay. Ron Rives ve arkadaşları yukarda bahsettiğimiz her şeyi sağlayan bir yapı geliştirmeyi başarmışlar: RSA. RSA'ya bakalım biraz da ve şu karmaşayı sağlayan matematik probleminin ne olduğunu görelim...
Bir Açık Anahtarlı Kriptosistem Olarak RSA
Diffie ve Hellman'ın 76 yılında yayınladıkları meydan okumaya cevap fazla gecikmeden, 77 yılında MIT'deki Ron Rivest, Adi Shamir ve Len Adleman'dan geldi, ve 78 yılında yayınlanan ünlü makaleleri (A Method for Obtaining Digidal Signatures and Public-Key Cryptosystems, Feb. 1978) ile Diffie ve Hellman'ın bahsettikleri gereklilikleri yerine getiren bir algoritma olan RSA duyuruldu.
RSA yapısı, bir takım n tamsayıları için 0 ile n-1 arasında sonuçlar üreten bir blok şifreleme yapısıdır (smiley). Tamam, algoritmanın tanımına geçelim artık
RSA'da düz metin, bloklar içinde şifrelenir, her blok bir n sayısından daha az bir ikili değere sahiptir. Bloğun büyüklüğü log2(n) değerine eşit ya da daha az olmalıdır; pratikte blok büyüklüğü 2k bittir, bu durumda n için sağlanması gereken durum da 2k < n ≤ 2k+1 eşitsizliğidir. Şifreleme ve de-şifreleme bir düz metin bloğu M ve şifreli metin bloğu C için şu şekildedir (e ve d'nin nereden çıktığından sonra bahsedeceğiz, ayrıca modüler aritmetiği seviyoruz):
C = Me mod n
M = Cd mod n = (Me)d mod n = Med mod n
Hem gönderici, hem de alıcı n değerini bilmelidir. Gönderen, e değerini bilir ve sadece alıcı d değerini bilir. Bu tanımlanan koşullara göre KU = [e,n] bir genel anahtar ve KR = [d,n] de bir özel anahtar olmuş, yukardaki işlem de bir açık anahtarlı şifreleme algoritması olur. Ek olarak, açık anahtarlı şifreleme için tatmin edici olması için bu algoritmanın aşağıdaki gereklilikleri yerine getireni RSA oluyor, RSA'nın e ve d değerlerini nasıl bulduğuna da geleceğiz, merak etmeyin:
M < n olduğu koşulda, Medmod n iken, e, d, n değerlerini bulmak mümkün olmalıdır.
M < n koşulunu sağlayan tüm M değerleri için Me ve Cd değerlerinin hesaplanması nispeten kolay olmalıdır.
Yalnız e ve n verildiğinde, d değerinin hesaplanması imkansız olmalıdır.
Şimdi asıl sorunumuz üzerinde odaklanalım biraz, aşağıdaki form için bir ilişki bulmamız gerekiyor, yoksa bu iş olmayacak:
Med = mod n
Elektro mekanik rotor (ikinci dünya savaşı ve kriptografi denince akla gelen makineler), çok fazla inceliklere sahip ve karmaşık kriptografik sistemlerin geliştirilebilmesini sağladı... Sonrasında, bilgisayarlarla daha karmaşık sistemler tasarlandı ve en tanınanlarından olan -IBM´in- Lucifer girişimi gelişerek DES´i oluşturdu ve DES`i dünyadaki kriptografi teknikleri arasında en yüksek seviyeye getirdi. Rotor makineleri ve DES (Data Encryption Standart), önemli avantajlar sunmalarına rağmen, halen ilkel süpstütüsyon ve permütasyon işlemlerine bağımlıdırlar. Bu arada DES'in açılımı Data Encryption Standart'tır ve günümüzdeki bir çok simetrik şifreleme algoritması gibi şifreleme için Fiestel yapısı kullanır (fiestel yapısı şifrelenecek bloğun iki parçaya bölünmesi ve her aşamada sadece biri üzerinde işlem yapılması ve bu işlemin sonucunun da bir sonraki aşamada verinin ikinci yarısına etkimesi esasına dayanan sarmal bir yapıdır). DES incelemesi hayli keyifli bir algoritmaya sahiptir, ilerleyen sayılarımızda ayrıntılı şekilde ele almamızın önünde herhangi bir engel yok.
Açık anahtarlı kriptografi, gerçek anlamda daha önceki gelişmelerden radikal bir kopuştur. Açık anahtarlı kriptografik sistemlerin en önemli noktaları matematiksel işlevler üzerine temellenmiş olmalarıdır, aslında açık anahtarlı kriptografi için matematiğin çözüm getiremediği bir takım durumları (örneğin çok büyük bir sayının iki asal çarpanının bulunmasının matematikte herhangi bir doğrudan çözümü olmaması gibi) kullanarak güvenlik sağlar, bu yüzden de incelenmesi ayrı keyif ve heyecan verir. Daha da önemlisi, açık anahtarlı kriptografi, tek anahtar kullanan simetrik geleneksel şifreleme algoritmalarının tersine, iki ayrı anahtarın asimetrik kullanımını öngörür. Birazdan göreceğimiz gibi, anahtar dağıtımı ve kimlik denetimi gibi gizlilik ve güven gerektiren durumlarda, iki anahtar kullanımı etkili sonuçlar ortaya koymuştur.
İlerlemeden önce, açık anahtarlı şifreleme ile ilgili bazı yaygın, yanlış bilgilerden bahsetmeliyiz. Bu yanlış düşüncelerden birisi, açık anahtarlı şifrelemenin, kriptoanalize karşı geleneksel şifreleme yöntemlerinden daha güvenli olduğudur. Örneğin böyle bir iddia, Gardner´ın meşhur Scientific America adlı 1977 yılında yayınladığı makalesinde yapıldı. Aslında, şifrelemenin güvenliği, anahtarın uzunluğuna ve şifreli metnin tabi kaldığı hesapsal işlemlerin karmaşıklığına dayanır. İster geleneksel ister açık anahtarlı şifreleme olsun, kriptonaliz bakış açısına göre birini direğinden üstün tutmak tamamen yanlış olur.
Bir ikinci yanlış düşünce de, genel amaçlı kullanım için geliştirilmiş bir teknik olan açık anahtarlı şifrelemenin, geleneksel şifrelemeyi modası geçmiş kıldığıdır. Tam tersine, geleneksel şifrelemeden vazgeçileceği düşüncesi, açık anahtarlı şifreleme yöntemlerinin, matematiksel fonksiyonlarından dolayı, ihtimal dışı gözüküyor. Açık anahtarlı şifreleme sistemleri çoğunlukla simetrik şifreleme sistemlerinin kullandığı gizli anahtarların değişimi için kullanılır.
Son olarak, açık anahtarlı şifreleme kullanılırken, geleneksel şifrelemenin daha hantal anahtar dağıtım merkezleri (KDC) ile karşılaştırıldığında, açık anahtarlı sistemlerin anahtar dağıtımının üzerinde kafa yorulması gerekmeyen, sıradan ve basit bir iş olduğuna dair yanlış bir anlayış vardır. Aslında, protokolün bazı biçimleri gereklidir fakat, geleneksel şifreleme yöntemlerinin ihtiyaç duyduğu merkez temsilciler ve prosedürler, açık anahtarlı şifrelemenin ihtiyaç duyduklarından daha basit daha karmaşık ya da daha etkili değildir. Anahtar dağıtım senaryoları da hayli keyifli olmasına rağmen bu yazıda ya da sonraki yazılarda değinmeyeceğimiz şeyler.
Şimdi açık anahtarlı şifrelemeye genel bir giriş yapmaya çalışalım. İlk önce, olması gerektiği gibi işin kavramsal çerçevesine bakmaya çalışacağız. Bu noktada açık anahtarlı kriptografi ile ilgili enteresan bir anektodu es geçmek olmaz: Açık anahtarlı kriptografinin, pratik olarak uyarlanışı gösterilmeden, tekniğin mimarisi geliştirildi ve doğru kabul edilerek yayınlandı. Kimse açık anahtarlı kriptografinin pratiğini görmeden, sistemin teorisi kabul gördü (bu bize şu anda da içinde bulunduğumuz benzeri bir durumu hatırlatıyor değil mi?). Daha sonra, açık anahtarlı şifreleme yöntemi için, uygulanabilir olarak gösterilen en önemli şifreleme/deşifreleme algoritması olan, RSA algoritmasını inceleyeceğiz. RSA'nın R'si aynı zamanda RC5 gibi müthiş bir şifreleme algoritmasını da geliştirmiş olan Ron Rivest'a aittir. Diğerleri de Adleman ve Shamir'dir.
Açık anahtarlı kripto sistemlerinin çoğunluğu, sayılar teorisini temel almıştır. Bu bölümde verilen sonuçları algılamak için, sayılar teorisini -neyse ki- anlamanıza yada biliyor olmanıza çok da gerek yoktur. Bununla birlikte, açık anahtarlı şifreleme algoritmaları hakkında kesin bir yargıya varmak için, sayılar teorisinin bazı kısımlarını bilmek gereklidir.
Açık Anahtarlı Kripto Sistemlerin Prensipleri
Açık anahtarlı şifrelemenin temel amacı, gerçekleştireceği devrim ile geleneksel şifrelemenin en büyük problemine çözüm sağlamaktı: gizli anahtarların dağıtımı. Gizli anahtar derken, DES, Blowfish, Twofish, AES, CAST128, RC5 gibi simetrik yani sadece şifreleme işlemini gerçekleştirdiğiniz anahtar ile veriyi de-şifreleyebileceğiniz yapılar sunan geleneksel şifreleme algoritmalarının kullandığı anahatrları kastediyoruz. Biraz ip ucu vermiş oldum, tahmin ettiğiniz gibi açık anahtarlı kriptografide işler bu şekilde yürümüyor (az sonra!)..
Geleneksel şifrelemeden yararlanarak birbirlerine şifrelenmiş metinler gönderecek olan taraflar, şifreleme ve de-şifreleme işlemleri için, ya bir şekilde kendilerine güvenli olduğuna inandıkları bir iletim kanalı yoluyla ulaştırılmış olan anahtarı kullanacaklar, ya da, bir anahtar dağıtım merkezinden faydalanmak zorundadırlar. Açık anahtarlı kriptografinin mucitlerinden birisi olan Whitfield Diffie (diğeri de Stanford Üniversitesinden Martin Hellman'dır), kriptografinin özü olan, “iletişimde %100 güvenlik esası”nı hiçe sayan bir anahtar dağıtım merkezi kullanma gerekliliğini ortadan kaldırdı. Çünkü gayet ortadadır ki güvenli bir ieltişim halinde olmak isteyen tarafların kullanacakları gizli anahtarları bir anahtar dağıtım yetkilisinden almaları, kimi durumlarda üçüncü parti bir kişinin iletişimi anlaşılır kılabileceği tehlikesini barındırmakta idi... Çok çirkin bir durum.
Açık Anahtarlı Kripto Sistemlerin Karakteristikleri
İşte size gerçekten enteresan bir önerme: Açık anahtarlı şifreleme/de-şifreleme algoritmaları, şifreleme için bir anahtara, de-şifreleme içinse bu anahtarla matematiksel ilişkisi olan -ama bu anahtar olmayan- ikinci bir anahtara ihtiyaç duyarlar [3].
Yani şimdi şöyle oluyor öyle mi? Ortada iki anahtar var. Birisi, diğeri ile matematiksel bir ilişki içerisinde, yani beraber üretiliyorlar. Birisini herkes biliyor (genel anahtar tabir ettiğimiz, benimkine de web sayfamdan ulaşabileceğiniz anahtar), diğerini de kimse bilmiyor, ve sonra birisi ile şifrelenen metin sadece diğeri ile açılabiliyor. Ve ben matematiksel ilişkinin ne olduğunu bildiğim, bilmiyorsam da az sonra öğreneceğim, ve anahtarlardan birisine sahip olduğum halde diğer anahtarı (genel anahtar ile ilişkili olan özel anahtarı) bulamıyorum öyle mi? Evet, bulamıyorsunuz, ve evet, bence de hayat çok garip.
İşte, açık anahtarlı kriptosistemler [3] önermesi yolu ile güvenlik sağlamış olurlar. Kafanıza takıldığını bildiğim matematiksel ilişkiye az sonra değineceğiz fakat, önce bu algoritmaların hangi karaktersitikleri sergilediğini görelim ki attığımız başlık boşa gitmesin:
Sadece kriptografik algoritma ve de şifreleme anahtarı verilmişken, bir takım hesaplamalar yolu ile şifreleme anahtarını bulmak mümkün değildir.
Her iki benzer anahtar da şifreleme ve de-şifreleme için kullanılabilir. Bununla beraber, bir anahtar şifreleme için kullanılmışsa, de-şifreleme için diğer anahtar kullanılmalıdır.
Ayrıca kabaca bir açık anahtarlı şifreleme oturumu şu adımlarla gerçekleşir:
Her ağdaki her son sistem, kullanıcı ya da benzeri, mesaj alındığında şifreleme ve de-şifreleme için kullanacak olduğu anahtar parçalarını yaratır.
Her sistem, şifreleme anahtarını herkesçe erişilebilecek bir dosya ya da yazmaç içerisine kaydederek ya da duyurarak herkesce erişilebilecek şekilde paylaşır. Bu anahtarın, genel olan kısmıdır (public key diye geçer). Özel anahtar saklı tutulur.
Eğer, herhangi bir A, herhangi bir B'ye, B'nin bu mesajı kendisinden başka kimsenin görüntüleyemediğine emin olabileceği bir mesaj yollamak isterse, mesajı B'nin genel anahtarını kullanarak şifreler.
B, mesajı aldığında, bu mesajı kendi özel anahtarını kullanarak de-şifre eder. Diğer hiçbir alıcı (diyelim ki bu ağlardan herhangi birindeki bir sniffer) mesajı de-şifreleyemez, çünkü mesajı de-şife edecek olan özel anahtarı sadece B bilir.
Bu yukardaki senaryo ile, B sadece kendisinin okuduğundan ve başka herhangi bir kimsenin görüntüleyemediğinden emin olduğu bir mesaj alır. Fakat bunun kimden geldiğinden emin olamaz. Gizlilik sağlanmış olur. Yukardaki son iki adımın şu şekilde gerçekleşmiş olduğu bir senaryoya bakalım bir de:
Eğer, herhangi bir A, herhangi bir B'ye B'nin A'dan geldiğine emin olarak okuyabileceği bir mesaj yollamak isterse, mesajı kendisinin gizli anahtarını kullanarak şifreler.
B, mesajı aldığında, bu mesajı A'nın genel anahtarı ile de-şifreler. Diğer üçüncü parti alıcıların her biri de bunu yapablilir, çünkü A'nın genel anahtarı herkesce bilinmektedir. Bu durumda B, bu mesajın A'nın ta kendisinden geldiğinden, ve kendisine ulaşana kadar yolda herhangi bir yerinin değiştirilmediğinden emin olur. Çünkü A'nın genel anahtarı ile de-şifrelediği mesajın sadece A'nın bilebileceği özel anahtar ile şifrelenmiş olabileceğini bilir.
Bu senaryo ile de gizlilik yerine kimlik denetimi sağlanmış olur. Hem gizliliğin hem de kimlik denetiminin sağlanabileceği bir senaryo da şu şekilde olabilir bu durumda:
Eğer, herhangi bir A, herhangi bir B'ye, B'nin A'dan geldiğine ve yolda kendisinden başka kimsenin içeriğini görüntüleyemediğine emin olarak okuyabileceği bir mesaj yollamak isterse, mesajı kendisinin gizli anahtarını kullanarak şifreler, daha sonra ortaya çıkan mesajı da B'nin genel anahtarını kullanarak şifreler.
Bu sayede de hem gizlilik hem de iki taraflı kimlik denetimi sağlanmış olur.
Tüm bunların hangi matematiksel yöntemler ile sağlandığı konusundaki merakınızı biraz daha arttırmak için bir de aşağıdaki başlığı inceleyelim, RSA ya da El-Galam bir açık anahtarlı şifreleme algoritması yazmak isterseniz aşağıdaki gereklilikleri sağlamanız gerekecek... Daha sonrasında da RSA'yı biraz inceleyip, onun kullandığı yönteme göz atacağız.
Açık Anahtarlı Kriptografi için Gereklilikler
Daha önce söylediğimiz gibi Diffie ve Hellman, herhangi bir açık anahtarlı algoritmanın varlığını göstermeksizin bu bu bahsettiğimiz sistemi “varsaymışlardır”. Bununla beraber, ilerde yazılması muhtemel algoritmaların yerine getirmeleri gereken durumları şöyle sıralamakatn da geri kalmamışlardır*:
Bir B için, anahtar parçalarını (genel anahtar ve özel anahtar) yaratmak, hesapsal olarak kolay olmalıdır.
Gönderenin (A olsun), mesajı göndereceği kişinin (B olsun) genel anahtarını bildiği ve şifrelenecek olan mesajı (M olsun) bildiği durumda, uygun şifreli metni (C olsun) yaratmak hesapsal olarak kolay olmalıdır.
C = EKUB(M)
Alıcı B`nin, özel anahtarını kullanarak, şifrelenmiş mesajı orijinal haline getirmesi hesapsal olarak kolay olmalıdır.
M = DKRB(C) = DKRB(EKUB(M))
Herhangi bir rakip için, genel anahtarı bilerek, özel anahtarı bulması hesapsal olarak imkansız olmalıdır.
Herhangi bir rakip için, genel anahtarı, şifreli metini (C`yi) bilerek orijinal mesajı (M`yi) elde etmesi hesapsal olarak imkansız olmalıdır.
Bunlara ek olarak, yararlı olmasına rağmen gerekli olmayan altıncı bir maddeyi ekleyebiliriz:
Şifreleme ve de-şifreleme fonksiyonları her iki sıra ile de uygulanabilir olmalıdır.
M = EKUB(DKRB(M))
Bunlar, sağlanması gerçekten zor olan gerekliliklerdir. Bu yüzden, açık anahtarlı kriptografi fikrinin ileri sürüldüğünden bu yana geçen yıllar süresince sadece bir kaç algoritma geniş bir kitle tarafından kabul edilmiştir.
Bu kadar zor gerekliliklerin istenmesinin sebeplerini açıklamadan önce en önemli noktayı, tek yönlü fonksiyonu (one-way function) açıklayalım. Söz konusu olan tek yönlü fonksiyon şöyledir: fonksiyonun bire-bir olduğu bir aralıkta, tersini hesaplamak imkansız iken, fonksiyonun kendisinin hesaplanması kolaydır; açık anahtarlı kriptografinin dehşet dayanak noktası.
Y = f(X) çok kolay iken
X = f-1(Y) işleminin çok zor olması durumu.
Tabi belirtilmesi gereken bir nokta da şudur, "kolay" dan kasıt, fonksiyonun girdi uzunluğuna bağlı olarak polinomal bir z aman süresi içerisinde çözülebilir olmasıdır. Şöyle ki, eğer girdi uzunluğu n bit kadarsa, fonksiyonun hesaplanması için gereken süre, a bir sabit sayı iken, na gibi bir fonksiyonla orantılı olmalıdır. "İmkansız" ise, oldukça bulanık bir durumu ifade etmek için kullanılır. Bir problemin çözümünün matematiksel olarak olanaksız olduğundan, giriş büyüklüğüne bağlı olarak çözüm için harcanan çabanın, polinomal zamandan daha hızlı arttığı durumda bahsedebiliriz.
Örneğin, girdi n bit ile gösterilirken, fonksiyonun çözülme zamanı 2ngibi bir fonksiyona bağlı olarak artıyorsa, bu fonksiyonun çözümünün imkansız olduğunu düşünebiliriz. Hesapsal kompleksliğin geleneksel fikirleri bir algoritmanın kompleksliğini en kötü duruma yada ortalama bir duruma odaklar. Bu oranlar kriptografi için değersizdir, çünkü kriptografide bir fonksiyonu tüm girilenler için tersine çevirmek nerdeyse olanaksızdır, lakin bu genelleme, en kötü durum yada ortalama durum için geçerli değildir.
Şimdi de son olarak, bir taraftan hesaplanması kolay, diğer bir taraftan ise belirli ek bilgiler bilinmedikçe hesaplanması olanaksız olan tuzak kapılı tek yönlü fonksiyonun (trap-door one-way function) açıklanmasına bakalım. Polinominal zamanda fonksiyonun tersi ek bilgiyle hesaplanabilir. Adım-adım özetleyebiliriz: Tuzak kapılı tek yönlü fonksiyon, tersine çevrilebilir fonksiyonların ( fk ) bir ailesidir. Şöyle ki;
Y = fk(X) ----- k ve X biliniyorsa kolay...
X = fk-1(Y) ----- k ve Y biliniyorsa kolay...
X = fk-1(Y) ----- Y biliniyor fakat k bilinmiyorsa çözülemez...
Uygulamalı bir açık anahtarlı kriptografi algoritmasının geliştirilmesi yukardaki gibi bir tuzak kapılı tek yönlü fonksiyonun bulunuşuna bağlıdır, sonrası kolay. Ron Rives ve arkadaşları yukarda bahsettiğimiz her şeyi sağlayan bir yapı geliştirmeyi başarmışlar: RSA. RSA'ya bakalım biraz da ve şu karmaşayı sağlayan matematik probleminin ne olduğunu görelim...
Bir Açık Anahtarlı Kriptosistem Olarak RSA
Diffie ve Hellman'ın 76 yılında yayınladıkları meydan okumaya cevap fazla gecikmeden, 77 yılında MIT'deki Ron Rivest, Adi Shamir ve Len Adleman'dan geldi, ve 78 yılında yayınlanan ünlü makaleleri (A Method for Obtaining Digidal Signatures and Public-Key Cryptosystems, Feb. 1978) ile Diffie ve Hellman'ın bahsettikleri gereklilikleri yerine getiren bir algoritma olan RSA duyuruldu.
RSA yapısı, bir takım n tamsayıları için 0 ile n-1 arasında sonuçlar üreten bir blok şifreleme yapısıdır (smiley). Tamam, algoritmanın tanımına geçelim artık
RSA'da düz metin, bloklar içinde şifrelenir, her blok bir n sayısından daha az bir ikili değere sahiptir. Bloğun büyüklüğü log2(n) değerine eşit ya da daha az olmalıdır; pratikte blok büyüklüğü 2k bittir, bu durumda n için sağlanması gereken durum da 2k < n ≤ 2k+1 eşitsizliğidir. Şifreleme ve de-şifreleme bir düz metin bloğu M ve şifreli metin bloğu C için şu şekildedir (e ve d'nin nereden çıktığından sonra bahsedeceğiz, ayrıca modüler aritmetiği seviyoruz):
C = Me mod n
M = Cd mod n = (Me)d mod n = Med mod n
Hem gönderici, hem de alıcı n değerini bilmelidir. Gönderen, e değerini bilir ve sadece alıcı d değerini bilir. Bu tanımlanan koşullara göre KU = [e,n] bir genel anahtar ve KR = [d,n] de bir özel anahtar olmuş, yukardaki işlem de bir açık anahtarlı şifreleme algoritması olur. Ek olarak, açık anahtarlı şifreleme için tatmin edici olması için bu algoritmanın aşağıdaki gereklilikleri yerine getireni RSA oluyor, RSA'nın e ve d değerlerini nasıl bulduğuna da geleceğiz, merak etmeyin:
M < n olduğu koşulda, Medmod n iken, e, d, n değerlerini bulmak mümkün olmalıdır.
M < n koşulunu sağlayan tüm M değerleri için Me ve Cd değerlerinin hesaplanması nispeten kolay olmalıdır.
Yalnız e ve n verildiğinde, d değerinin hesaplanması imkansız olmalıdır.
Şimdi asıl sorunumuz üzerinde odaklanalım biraz, aşağıdaki form için bir ilişki bulmamız gerekiyor, yoksa bu iş olmayacak:
Med = mod n