Merhaba sevgili e-bergi okuyucuları! Sizlere bu ay kriptoloji konulu yazılarda adından sıkça söz ettiren, internet üzerinde özellikle ticari amaçlı eylemlerin güvenliğini sağlamak için kullanılan ve şu anki bilgisayar sistemlerinde kırılması oldukça güç olan bir şifreleme algoritması olan RSA'yı anlatacağım. RSA algoritması hakkında yazı yazma isteğim genelde kriptoloji konulu yazılarda üzerinde hiç durulmadan: "Bakın, bir de bu isme sahip güzel bir algoritma var." denilip geçilmesinden ve bu algoritmayla ilgili çok az bilgi verilmesinden kaynaklanmaktaydı. Bence bu algoritmanın isminden daha fazlasını bilmemizde yarar var.

RSA, MIT'deki üç gencin 1976'da başladıkları yeni bir kriptolojik şema arayışlarının sonucu olarak ortaya çıkmıştır. Bu üç gençten Ronald Rivest ve Adi Shamir bilgisayar bilimci, Leonard Adleman ise sayı kuramcıydı. Tahmin edeceğiniz üzere RSA ismi onların soyadlarının baş harflerinden gelmektedir. Hikaye kısmına biraz daha kaçacak olursak aslında çalışma yöntemleri de çok enteresandı. Ronald ve Adi (bilgisayar bilimci olanlar) o zamanlar Diffie ve Hellman'nın yeni yazmış olduğu bir makaledeki matematiksel prensipleri kullanarak mümkün olduğunca güçlü bir yöntem geliştirmeye çalışıyorlardı. Bu yöntemle kötü kimseler mesajların nasıl kilitlendiğini bilse bile nasıl açılacağını bulamamalıydı. Tabii ki aralarında onlara yardım edebilecek bir sayı kuramcı olduğu için geliştirmeye çalıştıkları yöntemlerde de genelde bu konuyla ilgili yöntemler deniyorlardı. Ronald ve Adi sürekli yeni yöntemler geliştiriyordu ve Leonard bu yöntemlerin açıklarını buluyordu. Yalnız burada dikkat edilmesi gereken bir nokta var: kriptolojide şu ana kadar bilinen bütün yöntemlerin açığı var. Açığı olmayan sistem derken kastedilen, çözmek için gereken zamanın karmaşıklığının çok büyük olmasıdır. Zaten az önce söylediğim "Nasıl kilitlendiğini bilse bile nasıl açılacağını bulamamalıydı." lafı da bunu düşünerek söylediğim bir laftı; yani bulması çok uzun zaman gerektirmelidir. Bu mantığı kullanarak elimizdekilere bakacak olursak aslında başlangıç düzeyinde bile bilinen bir problem mevcut: bir sayının çarpanlarına ayrılması problemi, şu ana kadar bulunan algoritmalarla yaklaşıldığında çözülmesi için çok fazla adım gerektirmektedir. Buradan da eğer bu problem bir şekilde kriptolojik çalışmalarda uygulanırsa sonuçta çözülmesi güç şifreleme yöntemleri ortaya çıkabilir anlamına gelmektedir. İşte bu temel fikri kullanan Ronald ve Adi geliştirdikleri yeni algoritmayı Leonard ile paylaştıklarında Leonard direk olarak bu yeni algoritmanın kırılmasının zor olduğunu anlamıştı. Artık buldukları bu yeni yöntemi bir makalede yazıp yayımlamaları gerekiyordu. Her makalede olduğu gibi bu makalede de Ronald yazarların soyisim sırasıyla yazılması gerektiğini ve Leonard'ın da eklenmesi gerektiğini düşünüyordu; ancak yaptığı işleri önemsiz gördüğü için Leonard makalenin yazarı olarak gösterilmek istemedi. Sonunda Leonard ve Ronald orta yolu, Leonard'ın soyadı 'A' harfiyle başlamasına rağmen onun adını yazarlar arasında en sona koymakta bulmuştu ve böylelikle algoritmanın adı ARS değil, RSA oldu.

Bu kadar hikayeden sonra artık algoritmayı anlatmaya geçebiliriz. RSA asimetrik olarak da bilinen açık anahtarlı bir şifreleme sistemidir; yani bu sistemi kullananların 2 anahtarı vardır: biri herkes tarafından ulaşılabilir, diğeri ise kişiye özeldir. Asimetrik denmesinin sebebi şifreleme işlemi için gerekli anahtar ile şifrenin çözülmesi için gerekli anahtarların farklı olmalarıdır. Eğer RSA'yı kullanarak birine bir mesaj yollamak istiyorsanız o kişinin açık anahtarını alıp şifreleme işlemini gerçekleştirirsiniz ve daha sonra şifreli mesajı yollarsınız. Karşı taraf ise bu şifreli mesajı alır ve özel anahtarıyla açar. Böylelikle mesajınızı gizli bir şekilde iletmiş olursunuz. Bu işlem esnasında temel olarak yapılan 3 iş vardır:

  1. Anahtar üretimi
  2. Şifreleme
  3. Şifreyi çözme

Anahtar üretimi

  • Başlangıçta iki farklı rastgele asal sayının seçilmesi gerekmektedir. Bu sayıların mümkün olduğunca büyük olması ve basamak sayıları birbirlerine yakın seçilmesi, şifrelemenin kırılmasını zorlaştırırken uygulanmasını kolaylaştırır.
  • Bu iki asal sayı p ve q ise şimdi n = p*q'yu hesaplamak gerekmektedir. Bu n sayısı açık ve kapalı anahtar için modülü ifade etmektedir.
  • Şimdi n'nin kendinden küçük kaç tane sayıyla aralarında asal olduğunu bulabilmek için İsviçre'li matematikçi Euler'in bu sayıyı ifade eden phi fonksiyonunu kullanmak gerekir. Bu fonksiyonun özelliklerine göre phi(n) = (p-1)*(q-1)'dir.
  • Şimdi sıra geldi rastgele bir e sayısı seçmeye. Bu sayı 1 < e < phi(n) şartını sağlamalı ve phi(n) ile aralarında asal olmalıdır. Bu özellikleri sağlayan e seçildiğinde artık bu sayı açık anahtar olarak ifade edilebilir.
  • Artık gizli anahtarı bulmamız gerekmektedir. Gizli anahtarımız d'yi, e'nin phi(n) mod'unda çarpımsal tersi olarak seçmeliyiz. Yani e*d = 1 mod(phi(n)) olmalıdır.

Anahtar üretimi için bu adımlar yeterli olduğu halde daha sonra gerek hız gerekse güvenlik gibi sebeplerden ötürü bu adımlara bazı kısıtlamalar eklenmiştir; ancak şu an için bunlar önemli değil. Ayrıca bu adımda neden bunları yaptığımızı da algoritma kısmını geçtikten sonra açıklayacağım.*

Şifreleme

Şifreleme adımı önceki adıma göre oldukça basit bir adım. Daha önce yazdığım İkilik Sistemler yazımda bilgisayar dünyasında her şeyi sayılar ile ifade edebileceğimizden, hatta aslında her şeyin sayılarla ifade edildiğinden, de bahsetmiştim. Dolayısıyla göndereceğimiz mesaj her ne ise onu bir sayı olarak düşünebiliriz. Bu sayıya m dersek, m üssü (az önce bulduğumuz açık anahtar olan) e'yi n modunda hesaplayıp şifrelenmiş sayıyı elde ederiz ve bunu artık güvenle karşı tarafa gönderebiliriz.

Şifreyi çözme

Şifreyi çözme kısmı da şifrelemede olduğu gibi basit. Gelen şifrelenmiş sayıya c dersek, c üssü (kapalı anahtar) d n modunda bize m'yi verecektir.

Şimdi tüm bu adımlarda ne yapmaya çalıştığımızı, neden c üssü d'nin aradığımız mesaj olduğunu açık bir şekilde anlatmanın zamanı geldi. Bu noktada RSA'nın hangi temel mantığa oturduğunu anladıktan sonra adımları anlamak çok kolay olacağından öncelikle bu temel mantığı açıklayalım. Az önce de söylediğimiz gibi çarpanlara ayırma probleminin algoritmik çözümü çok fazla adım gerektirmektedir; yani eğer bulunan yöntemin deşifresi bunu gerektiriyorsa şifreleme yöntemi işe yarayacaktır. Bunu sağlamak için kullanılan teorem sayı kuramının en temel ve en çok bilinen teoremlerinden olan Fermat'ın küçük teoremi olmuştur. Bu teoreme göre, m ve n birbirlerine göre asal iki sayı ise m'nin phi(n) üssü, n mod'unda 1'e denktir. Her iki tarafı da m ile çarpacak olursak denklik şuna dönüşür: m'nin ( phi(n)+1 ) üssü, n mod'unda m'ye denktir. Tabii ki burada m'nin n'den daha küçük olduğunu ve aralarında asal olduğunu unutmamalıyız. m'nin mesajımız olduğunu düşünürsek çarpımları phi(n) + 1 olan iki sayı bulduğumuz anda aslında aradığımız anahtarlara ulaşmışız demektir. e ve d'nin birbirlerinin phi(n) modunda çarpımsal tersleri olduğunu hatırlayın. (e * d) , phi(n) modunda 1'e denktir; yani e*d = phi(n) + 1. Aslında kullanılan mantık bu kadar basit ve bu kadar adım sadece aslen kullanılacak olan e, d ve n'yi üretmek için izleniyor. Ufak bir kafa karışıklığını engellemek adına şunu söylemem gerekiyor: sonuçta uygulama esnasında bizim kullanacağımız m mesajımız olacağı için m üzerinde direk bir kontrolümüz olmayacak; ancak yine de her zaman n ile aralarında asal olduğundan emin olmamız gerekiyor. Aksi takdirde teorem kullanılamaz; yani iletmek istediğimiz mesaj yerine anlamsız bir mesaj iletilir. Uygulamada bu problemden kurtulmak aslında oldukça basit; çünkü zaten seçilen n değeri en azından 256-bitlik bir değere sahip. Eğer onun iki asal çarpanını da en az yaklaşık 128-bit civarı tutarsak n'nin mesajımız m ile aralarında asal olmaması için mesajın da en az en az 128-bit olması gerekmektedir. Ancak yollanan paketler bunun çok daha altında tutulmaktadır; böylelikle yöntemin çalışması için gerekli koşullar daima sağlanır.

Yazımı bitirmeden önce en başta söylediğim bir cümleye de ufakça bir açıklama getirmek istiyorum: “RSA şu anki bilgisayar sistemlerinde kırılması güç bir yöntem”. Bahsettiğim gibi henüz yeterince iyi bir çarpanlarına ayırma algoritması olmadığı için kırılmasının güç olduğunu söylüyoruz; ancak bu problemi aşmanın tek yolu yeni bir algoritma değil. Yeni bir algoritma bulunmasa bile kuantum bilgisayarlarının çıkışı ve yaygınlaşmasının ardından bu problemi çözmek artık eskisi kadar zor olmayacak. Bu güçlü oyuncakların karşısında bunun gibi birçok problem kolaylıkla çözülebilecek. Yine de siz şifreler kırılacak diye telaş yapmayın; çünkü teorisyenler kuantum bilgisayarlarıyla birlikte kırılması mümkün olmayan şifreleme metodlarının da geleceğine işaret ediyor. Bir dahaki yazımda tekrar görüşmek üzere; kendinize iyi bakın.

Kaynaklar