You are on page 1of 5

RSA FRELEME ALGORTMASI

lk defa 1977 ylnda Ron Rivest, Adi Shamir ve Leonard Adleman tarafndan oluturulan RSA algoritmas gelitiricilerinin soyisimlerinin ilk harfleriyle anlmaktadr. Bu yazmzda RSA algoritmasn ve bu algoritmann Microsoft .NET teknolojileri ile nasl gereklenebileceini inceleyeceiz. Anahtar Szckler: ifreleme Algoritmas, RSA, Microsoft .NET, Kriptoloji RSA algoritmas, Amerika da 1983 ylnda MITten patent almtr. Bu patent 21 Eyll 2000 de son bulmutur. Ancak patenti daha nce bir uygulamaya ait olduu iin bir baka lkede patent alnamaz. Bir genel anahtarl ifreleme teknii olan RSA, ok byk tamsaylar oluturma ve bu saylar ileminin zorluu zerine dnlmtr. Anahtar oluturma ilemi iin asal saylar kullanlarak daha gvenli bir yap oluturulmutur. Anahtar oluturma algoritmas u ekildedir: P ve Q gibi ok byk iki asal say seilir. Bu iki asal saynn arpm N = P.Q ve bu bir eksiklerinin (N)=(P-1)(Q-1) hesaplanr. 1den byk (N)den kk (N) ile aralarnda asal bir E tamsays seilir. Seilen E tamsaysnn mod (N)de tersi alnr, sonu D gibi bir tamsaydr. E ve N tamsaylar genel anahtar, D ve N tamsaylar ise zel anahtar oluturur.

Genel ve zel anahtarlar oluturduktan sonra gnderilmek istenen bilgi genel anahtar ile ifrelenir. ifreleme ilemi u ekilde yaplmaktadr: ifrelenecek bilginin saysal karlnn E ninci kuvveti alnr ve bunun mod N deki karl ifrelenmi metni oluturmaktadr. Genel anahtar ile ifrelenmi bir metin ancak zel anahtar ile alabilir. Bu yzden ifrelenmi metin, yine ayn yolla, ifrelenmi metnin saysal karlnn Dninci kuvveti alnr ve bunun mod N deki karl orijinal metni oluturur. Basit bir rnek ile algoritmay tekrar anlatalm. rnein basitlii asndan daha kk asal saylarla alacaz. ncelikle genel ve zel anahtarlarmz oluturalm. P=7 ve Q=17 gibi iki asal say seelim. Bu iki asal saynn arpm N=P.Q; N=119 ve bu iki asal saynn bir eksiklerinin arpm (N)=(P-1)(Q-1); (N)=96 olarak hesaplanr. 1den byk 96dan kk 96 ile aralarnda asal bir E=5 tamsays seelim. Seilen E=5 tamsaysnn mod 96da tersi alnr, sonu D=77 gibi bir tamsaydr. 5 ve 119 tamsaylar genel anahtar, 77 ve 119 tamsaylar ise zel anahtar oluturur.

Bu algoritmada iki asal saynn arpmn kullanarak anahtar oluturulmasnn sebebi, iki asal saynn arpmn asal arpanlarna ayrmak asal olmayan saylar ayrmaktan daha zorlu olmasdr. imdi oluturduumuz {5, 119} ve {77, 119} anahtarlarmz kullanarak ifreleme yapalm. rnek olarak, 19 saysn genel anahtarmzla {5, 119} ifreleyelim. 19 saysnn 5inci kuvvetinin mod 119 daki karl olan 66, 19 saysnn RSA ifrelenmi halidir. zel anahtarmz {77, 119} kullanarak 66nn 77nci kuvvetinin mod 119 daki karl tahmin de edebileceiniz gibi 19 dur. ki tamsaynn aralarnda asal olup olmadnn testi iin matematikten de bildiimiz klid algoritmas kullanlr. ok byk asal say oluturmak olduka zor bir itir. RSA ile gnmzde 1024 bitlik bir anahtar (yaklak 300 basamakl bir say) basit uygulamalar iin yeterli bir ifreleme teknii olarak kullanlabilir. RSA algoritmas, bir ifreleme algoritmas iin olduka basit bir algoritmadr. Buna karn srekli ok byk asal say oluturmak olduka zor bir ilemdir. Asal saylarnn bilinen bir forml 1

yoktur. RSA algoritmasn biz de yazabiliriz, ancak algoritmann tm detaylaryla teker teker uramak zorunda kalrdk. Bunun iin, Microsoft .NET Framework te hali hazrda RSA uygulamas gelitirebilmek iin RSA snf bulunmaktadr. Kullanm olduka basit olduu iin bir web servisi ile rneklendirebiliriz. Bunun iin bir web servisi oluturalm. Bu web servisine rsa isimli snfndan bir deiken tanmlayalm. Bu web servisine ifreleme ve deifreleme iin aadaki iki web metodu ekleyelim. C# [WebMethod] public string Encrypt(string stringToEncrypt) { byte[] buffer = Encoding.UTF8.GetBytes(stringToEncrypt); return Encoding.UTF8.GetString(rsa.Encrypt(buffer,false)); } [WebMethod] public string Decrypt(string stringToDecrypt) { byte[] buffer = Encoding.UTF8.GetBytes(stringToDecrypt); return Encoding.UTF8.GetString(rsa.Decrypt(buffer,false)); } VB.NET <WebMethod()> _ Public Function Encrypt(ByVal stringToEncrypt As String) As String Dim buffer As Byte() = Encoding.UTF8.GetBytes(stringToEncrypt) Return Encoding.UTF8.GetString(rsa.Encrypt(buffer, False)) End Function <WebMethod()> _ Public Function Decrypt(ByVal stringToDecrypt As String) As String Dim buffer As Byte() = Encoding.UTF8.GetBytes(stringToDecrypt) Return Encoding.UTF8.GetString(rsa.Decrypt(buffer, False)) End Function C++.NET [System::Web::Services::WebMethod] String __gc* Encrypt(String __gc * stringToEncrypt) { Byte buffer[] = Encoding::UTF8->GetBytes(stringToEncrypt); return Encoding::UTF8->GetString(rsa->Encrypt(buffer,false)); } [System::Web::Services::WebMethod] String __gc* Decrypt(String __gc * stringToDecrypt) { Byte buffer[] = Encoding::UTF8->GetBytes(stringToDecrypt); return Encoding::UTF8->GetString(rsa->Decrypt(buffer,false)); } J# /** @attribute WebMethod() */ public String Encrypt(String stringToEncrypt) { ubyte[] buffer = Encoding.get_UTF8().GetBytes(stringToEncrypt); return Encoding.get_UTF8().GetString( rsa.Encrypt(buffer,false) ); } /** @attribute WebMethod() */ public String Decrypt(String stringToDecrypt)

{ ubyte[] buffer = Encoding.get_UTF8().GetBytes(stringToDecrypt); return Encoding.get_UTF8().GetString( rsa.Decrypt(buffer,false) ); } Bu iki metot RSA algoritmasn kullanarak ifreleme ve deifreleme ilemini yapabilmektedir. Ancak bu kodu denerseniz Encrypt metodu ile ifrelediiniz metni Decrypt ile aamadnz greceksiniz. Bunun sebebi kullanlan anahtarlar saklamamzdr. Dikkatinizi ekecek ikinci bir zellikte RSACryptoServiceProvider snfnn Encrypt ve Decrypt metotlarnn ikinci parametresidir. Burada rnek iin false verdiimiz deer, Microsoft Windows XP ve zeri iletim sistemleri tarafndan salanan bir zelliktir. OAEP (Optimal Asymmetric Encryption Padding) doldurmann kullanlp kullanlmayacan belirtir. imdi System.Security.Cryptgraphy altndaki RSA ve RSACryptoServiceProvider snflarn inceleyelim. RSA snf RSA algoritmasn kullanmak isteyen kodlarn tretilmesi gereken ana snf tanmlar. RSA snf, AsymmetricAlgorithm snfndan treyen soyut bir snftr. Bu snfn eriilebilir zellikleri unlardr: KeyExchangeAlgorithm, anahtar deiimi algoritmasnn ismini belirtir. RSA iin RSAPKCS1-KeyEx tir. KeySize, ifreleme ve deifreleme iin kullanlacak anahtarlarn ka bitten oluacan gsterir. Bu zelliin deerini deitirerek, kullanlacak bit saysn ayarlayabilirsiniz. Varsaylan anahtar boyutu 1024 bittir. LegalKeySize, bu algoritma tarafndan desteklenen geerli anahtarlar bit olarak bykln gsterir. RSA algoritmas iin anahtar bykl en az 384 bit en fazla 16384 bittir. 16384 bit 2KB byklnde bir anahtar anlamna gelmektir. Bu da yaklak 5000 basamakl bir say anlamna gelmektedir. SignatureAlgorithm, imzalama iin kullanlacak algoritmann adn gsterir. RSA iin http://www.w3.org/2000/09/xmldsig#rsa-sha1 dir.

Bu snfn eriilebilir metotlar ise unlardr: Clear, RSA tarafndan kullanlan tm kaynaklar sisteme geri verir. Create, RSA'nn zel uygulamalarnn yazld durumlarda nesnenin oluturulduunda yaplacak ileri ierir. DecryptValue, zel anahtar ile verilen bilgiyi deifrelemek iin kullanlr. EncryptValue, genel anahtar ile verilen bilgiyi ifrelemek iin kullanlr. Equals, iki nesnenin birbirine eit olup olmadn test eder. ExportParameters, RSA'in tm parametreleri zel RSAParameter yapsndan bir nesne iine kaydeder. ve genel anahtarlar dahil

FromXmlString, XML Deseriletirme gibidir. ToXMLString metodu ile XML'e aktarlm nesneyi yeniden oluturur, nesneyi XML'e yklenmeden nceki durumuna getirir. GetHashCode, bellekteki o nesneye zg bir hash kodu oluturur. GetType, bu nesnenin tipini verir. ImportParameters, RSAParameters yapsndan bir nesne iindeki, RSA'nn kullanaca tm parametreleri zel ve genel anahtarlar dahil geri ykler. ToString, u anki nesneyi ifade eden bir metin oluturur. ToXmlString, XML Seriletirme gibidir. oluturulabilecek bir ekilde XML'e aktarr. Nesnenin o anki durumunu yeniden

imdi, RSA snfndan bahsederken ismi geen RSAParameters yapsn inceleyelim. Bu yap da yine System.Security.Cryptography altnda yer almaktadr. Bu yapnn en nemli zellii seriletirilebiliyor olmasdr. Bu zellii sayesinde Binary(ikili) ve ya XML olarak bu yapy seriletirip, aktarabiliriz. Bu yap ierisinde algoritmay anlatrken kullandmz P ve Q gibi semboller ile ifade ettiimiz algoritmann temel parametreleri yer almaktadr. rneklerimizde de yer alan RSACryptoServiceProvider snf ise dorudan RSA ifrelemesi iin kullanlacak snf ifade eder. Bu snf biraz evvel bahsettiimiz RSA snfndan treyen mhrl bir snftr. Mhrl snf, hi bir snfn kendisinden tretilemeyeceini ifade eder. Bu snfn eriilebilir zellikleri unlardr: KeyExchangeAlgorithm, anahtar deiimi algoritmasnn ismini belirtir. RSA iin RSAPKCS1-KeyEx tir. KeySize, ifreleme ve deifreleme iin kullanlacak anahtarlarn ka bitten oluacan gsterir. Bu zelliin deerini deitirerek, kullanlacak bit saysn ayarlayabilirsiniz. Varsaylan anahtar boyutu 1024 bittir. LegalKeySize, bu algoritma tarafndan desteklenen geerli anahtarlar bit olarak bykln gsterir. RSA algoritmas iin anahtar bykl en az 384 bit en fazla 16384 bittir. 16384 bit 2KB byklnde bir anahtar anlamna gelmektir. Bu da yaklak 5000 basamakl bir say anlamna gelmektedir. PersistKeyInCsp, anahtarn CSP (Cryptographic Service Provider) ierisinde kalc olarak tutulup tutulmayacan belirten zelliktir. Bu zelliin deerini deitirerek dardan bu zellii aktif/pasif klabilirsiniz. SignatureAlgorithm, imzalama iin kullanlacak algoritmann adn gsterir. RSA iin http://www.w3.org/2000/09/xmldsig#rsa-sha1 dir. UseMachineKeyStore, PersistKeyInCsp ile bilgisayar zerinde kalc olarak tutulmas istenen anahtarlar o an ki kullanc profilinde mi yoksa tm kullanclar iin ortak olan bir yerde mi tutulacan belirtir.

Bu snfn eriilebilir metotlar ise unlardr: Clear, RSA tarafndan kullanlan tm kaynaklar sisteme geri verir. Decrypt, RSA algoritmas ile verilen bilgiyi deifre eder. DecryptValue, zel anahtar ile verilen bilgiyi deifrelemek iin kullanlr. Ancak Microsoft .NET Framework n 1.1 versiyonunda bu metot desteklenmemektedir. Encrypt, RSA algoritmas ile verilen bilgiyi ifreler. EncryptValue, genel anahtar ile verilen bilgiyi ifrelemek iin kullanlr. Ancak Microsoft .NET Framework n 1.1 versiyonunda bu metot desteklenmemektedir. Equals, iki nesnenin birbirine eit olup olmadn test eder. ExportParameters, RSA'in tm parametreleri zel RSAParameter yapsndan bir nesne iine kaydeder. ve genel anahtarlar dahil

FromXmlString, XML Deseriletirme gibidir. ToXMLString metodu ile XML'e aktarlm nesneyi yeniden oluturur, nesneyi XML'e yklenmeden nceki durumuna getirir. GetHashCode, bellekteki o nesneye zg bir hash kodu oluturur. GetType, bu nesnenin tipini verir. ImportParameters, RSAParameters yapsndan bir nesne iindeki, RSA'nn kullanaca tm parametreleri zel ve genel anahtarlar dahil geri ykler. SignData, verilen bilginin hash deerini hesaplar ve bu deer ile veriyi imzalar.

SignHash, belirtilen hash deeri iin imzay hesaplar ve zel anahtar ile bu bilgiyi ifreler. ToString, u an ki nesneyi ifade eden bir metin oluturur. ToXmlString, XML Seriletirme gibidir. oluturulabilecek bir ekilde XML'e aktarr. Nesnenin o anki durumunu yeniden

VerifyData, belirtilen bilgi iin imzay tekrar hesaplayp var olan imza ile karlatrr. VerifyHash, belirtilen hash deeri iin imzay tekrar hesaplayp var olan imza ile karlatrr.

RSA ifreleme tekniini algoritmik olarak incelediimiz bu makalemizde, RSA snfnn kullanmndan bahsettik. Bir sonraki makalemizde RSA anahtarlarnn datm ve RSA kullanarak dijital imza oluturmay inceleyeceiz. Bir sonraki makalemizde grnceye kadar gvende kaln... Yunus Emre ALPZEN 25.03.2005