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. Yukarıda saydığımız şifreleme tekniklerinin .NET ile gerçeklenmesini bu yazı dizimizin ilerki makalelerinde bulabilirsiniz. Yine şifreleme teknikleri kadar önemli bir noktada “Random Number Generation” rasgele sayı üretimidir. .NET Framework RNGCryptoServiceProvider sınıfı ile bu sorunun üstesinden gelmeyi bilmiştir. Ş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.