.NET ve
Şifreleme(Encryption) Teknikleri
Bundan
önceki yazılarımızda sizlere klasik şifreleme tekniklerinden bahsetmiştik. Bu
yazı dizimizde sizlerle .NET ile Şifreleme tekniklerini inceleyeceğiz. Önceleri
çokça bahsettiğimiz şifreleme algoritmalarının uygulamalarını kendimizde
gerçekleyebilirdik. Ancak .NET post-modern şifreleme teknikleri zaten
desteklemektedir. Bir giriş niteliğindeki bu yazımızda .NET'in Cryptography
namespace'ini irdeleyeceğiz.System.Security.Cryptography namespace'i güvenli şifreleme, deşifreleme ve diğer güvenlik hizmetlerini gerçekleştiren hashing, rasgele sayı üretimi ve mesaj doğrulama gibi şifreleme servislerini içerir. Daha önceki makalelerimizde bahsettiğimiz gibi şifreleme genel olarak;
- Gizlilik(Confidentiality)
     
 - Veri
     Bütünlüğü(Data Integrity) 
 - Kimlik
     Doğrulama(Authentication) 
 
- Simetrik
     Şifreleme (symmetric cryptography):
     Private-key encryption olarak da bilinir. Her iki tarafın da bildiği tek
     bir ortak anahtar kullanarak şifrelemeyi ve deşifrelemeyi gerçekleyen
     şifreleme teknikleridir. DES, RC2, Rijndael ve TripleDES(3DES)
     Cryptography namespace'i altında yer alan şifreleme teknikleridir. Bu
     şifreleme tekniğinin en önemli dezavantajı her iki tarafın tek bir anahtar
     üzerinde anlaşması ve sadece bu anahtarı kullanarak şifreleme/deşifreleme
     işlemini gerçeklemesidir. Bu teknikte hiç bir taraf, karşı tarafın
     gerçekten karşı taraf olup olmadığını bilememektedir. Hatta öyle ki iki
     tarafda olması gereken kişiler olmayabilir. Genellikle simetrik şifreleme
     diğer şifreleme tekniklerinde transfer edilecek anahtarlar gibi her iki
     taraf içinde ortak ifadelerin şifrelenmesi gerektiğinde kullanılır. 
 - Asimetrik
     Şifreleme (asymmetric cryptography): Public-key
     encryption olarak da bilinir. İkili anahtar kullanarak şifreleme ve
     deşifrelemenin gerçeklendiği şifreleme tekniğidir. Bu şifreleme tekniğinde
     herkesin 2 anahtarı vardır. Bunlardan biri public'tir, yani herkesce
     bilinir. Diğeri ise private'dır ve sadece şifrelemeyi gerçekleyen tek bir
     taraf tarafından bilinir. Bu iki anahtarın rasgele seçilmiş iki anahtar
     şeklinde değildir. İkisi de birbirini bütünleyen iki anahtar şeklindedir.
     .NET Framework DSA ve RSA algoritmalarını kullanmaktadır. 
 - Cryptographic
     signing: Verinin gerçektende belirli bir kişi ya da
     gruptan geldiğinin anlaşılması için tarafların verileri kendi imzaları ile
     şifrelemesi prensibine dayanır. Bu işlem hash fonksiyonlarını da
     kullanmaktadır. Veriyi gönderenin ve alanın gerçekten de kendilerinin
     olduğunu kanıtlamalarını sağlar. Gönderen kendi private anahtarı ile
     şifrelerken gönderenin public anahtarını bilen herhangi biri veriyi
     gönderenin gerçekten de gönderen olup olmadığını anlayabilir ancak
     alıcıdan başka kimse gönderilen bilgiyi deşifre edemez. Yine .NET
     Framework DSA ve RSA bu tür şifreleme teknikleri için kullanmaktadır. Bir
     önceki şifreleme tekniği ile kullanım ayrılıklarını daha sonraki
     makalelerimizde detaylı olarak irdeleyeceğiz. 
 - Cryptographic
     hashes: Herhangi bir boyuttaki bir bilgiyi sabit
     uzunluktaki bir byte dizisiyle eşleştirir. Hashler istatiksel olarak
     tektir(unique), yani iki farklı byte diziliminin aynı hash değerine sahip
     olamaz. Hash işlemi genellikle tek yönlü fonksiyonlarla gerçeklenir. Tek
     yönlü fonksiyonlar, matematikteki tersi alınamayan fonksiyonlardır. Örnek
     olarak bir sayının belirli bir sayıya göre modunun alınmasını verebiliriz.
     25 ve sayısının mod 10 daki karşılığı 5 iken mod 10 daki karşılığı 5 olan
     sayı sadece 25 değildir. Yani şifrelenmiş metni kaybettik! Geri dönüşümüz
     yoktur. Verdiğimiz örnekten de dikkat edeceğiniz üzere iki farklı sayı
     aynı hash değerine karşılık geldi. Oysa demin farklı iki byte diziliminin
     aynı hash değerine sahip olamayacağını söylemiştik. Bu noktada kendimizle
     çelişiyor gibi olabiliriz. Ama günümüzde kullanılan hiç bir hash
     fonksiyonu verdiğimiz örnekteki kadar basit ve dar alanlı değildir.
     HMACSHA1, MACTripleDES, MD5, SHA1, SHA2, SHA3, SHA5 .NET Framework'te yer
     alan bu tür şifreleme teknikleri örneklerindendir. 
 
Şimdiye kadar bahsettiğimiz şifreleme tekniklerine ek olarak çok basit anlamda çalışan kendi şifreleme tekniğimizi geliştirebiliriz. Sizlere daha önceki makalelerimizde bahsettiğimiz şifreleme tekniklerinden Ceaser şifreleme tekniğini gerçekleyen ve kullanan bir web servisi uygulamasını geliştirelim.
Ceaser Cipher
Örnek Ceaser Cipher uygulamamýz için öncelikle bir web servisi uygulamasý baþlatalým. Bu ve bundan sonraki örneklerimiz bizim kullanacaðýmýz isim konvansiyonu doðrultusunda web servisimize SYCryptologyServices adýný verelim. Ve bu web servisi projesine "CeaserCipher.asmx" isimli bir web servisi oluþturalým. Aþaðýdaki kod parçaçýklarýný da sýrasýyla kodumuza ekleyelim;
| 
  private byte CeaserCipherIncrement=2;              [WebMethod] public string CeaserCipherEncrypt(string plainText) { StringBuilder sb=new StringBuilder(); for (int i=0;i<plainText.Length;i++) { byte b=(byte)plainText[i]; b+=CeaserCipherIncrement; sb.Append((char)b); } return sb.ToString(); }  | 
 
| 
  [WebMethod]                     public string CeaserCipherDecrypt(string encryptedText) { StringBuilder sb=new StringBuilder(); for(int i=0;i<encryptedText.Length;i++) { byte b=(byte)encryptedText[i]; b-=CeaserCipherIncrement; sb.Append((char)b); } return sb.ToString(); }  | 
 
Bu
yazýmýzda System.Security.Cryptography namespace'i altýnda yer alan
þifreleme tekniklerinden bahsettik. Bundan sonraki yazýlarýmýzda bu
þifreleme tekniklerinin her birini detaylý olarak inceleyeceðiz ve her birine
iliþkin bir örnek uygulama geliþtireceðiz. Ayrýca bu yazýmýzda Ceaser þifreleme
tekniðine benzer bir þifreleme ve deþifreleme gerçekleþtiren bir web
servisi geliþtirdik. Siz de daha önceleri sizlerle paylaþtýðýmýz þifreleme
teknikleri için benzer uygulamalar geliþtirebilirsiniz. 
Suphi
UÇAR – Yunus Emre ALPÖZEN
Hiç yorum yok:
Yorum Gönder
isterseniz anonim seçeneginden kayıtsız gönderebilirsiniz iyi günler