.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