Bu makalemizde kısaca şifreleme yöntemlerinden biri olan hash fonksiyonlarından bahsedeceğim. Bunun devamında ise ayrıntılı olarak hash fonksiyonlarının ne olduğunu ve genel mantığı, en çok kullanılan hash fonksiyonları ve kullanım alanlarını anlatacağım. Konuyu anlatabilmek açısından bir örnekle başlamak istiyorum. Aslında bu örnek hash fonksiyonlarının temel kullanım alanlarına da örnektir.
Veritabanınızda binlerce kullanıcı var. Bu kullanıcıların şifreleri veri tabanında nasıl tutulmalıdır. Şifreleri olduğu gibi veri tabanına yazmanın çok tehlikeli olabileceğinin farkında mısınız? Veritabanınıza erişebilecek bir kişinin ilk bakacağı yer kullanıcı adı ve şifreleri olacaktır çünkü. Veri tabanına kadar gelebiliyorsa şifreleri da alsın artık diyebilirsiniz ama hırsızları her zaman dışarıda aramak da doğru değil.
Kısa örneğimin amacı hash fonksiyonlarının neden kullanıldığı ile ilgili aklınızda fikir oluşturmaktı. İsterseniz şifreme yöntemi olarak hash fonksiyonlarının özelliklerine bakarak "Hash Fonksiyonları Nedir?" sorusunun cevabını aramaya çalışalım.
Genel şifreleme mantığında simetrik yada asimetrik olması farketmeden belirli bir mesajı anahtar veya anahtarla şifreledikten sonra aynı anahtar ve ya başka bir anahtarla bu mesajı tekrar görüntüleyebilirsin. Hash fonksiyonlarının farkı ise mesajı hash fonsiyonları ile şifreledikten sonra bu mesajların tekrar elde edilebilmesini engellemektir. Hah fonksiyonlarının temel amacı belirli bir mesajın veya metnin bizim istediğimiz metin olup olmasını kontrol etmektir. Yukarıdaki şifreleri kaydetme işleminde de şifrelerin hash fonksiyonları ile şifrelendikten sonra kontrol edilmesi ve tekrar elde edilememesinin de mantığının altında bu yatar.
Önemli olduğu için bu noktayı tekrar vurgulamak istiyorum. Hash fonksiyonlarının diğer şifreleme tekniklerinden farkı şifrelenen mesajların tekrar elde edilmesini engellemektir. Doğruluğunu kontrol etmek içinse mesaja tekrar algoritma uygulanır ve eski şifrelenmiş mesajla aynı olup olmaması kontrol edilir.
İsterseniz bu senaryoya göre şifrelerimi veritabanında nasıl tutmalıyız konusuna da bir bakalım.
Öncelikle kullanıcı kayıt olduğunda ve ya şifresini değiştirmek istediğinde kullanıcıdan aldığımız şifreyi makalenin devamında anlatacağım hash fonksiyonlarından birini kullanarak şifreliyoruz ve şifrelenmiş halini veritabanına kaydediyoruz. Kullanıcı her login olmaya çalıştığında girdiği şifreyi tekrar algoritmadan geçirerek bu sonucun veritabanındaki şifre ile aynı olup olmasını test ediyoruz. Teknik açıdan bakıldığında bu işlem için belirli bir kaynak tüketsek bile bu işlemi sadece login olarken yaptığımız için performans açısından sistemi etkilemiyor. Etkilese bile güvenlik için yapılması gereken en önemli konulardan bir tanesidir.
Örnek üzerinden de açıkladıktan sonra Hash fonksiyonlarının diğer tipik özelliği olan sabit uzunluktan bahsetmek istiyorum. Aslında temeline bakılırsa hash fonksiyonları Cheksum konusunun bir alt konusu olduğunu da görebilirsiniz. Checksum mantığında da büyük boyuttaki veriyi temsil eden sabirt uzunlukta bir numara üretilir. (Konu ile ilgili ayrıntılı bilgi almak isterseniz buradaki makaleye göz atabilirsiniz) Hash fonksiyonları da böyledir. Her algoritmanın kendisine özgü karakter uzunluğu vardır. Yani şifreleyeceğiniz mesajın uzunluğundan bağımsız olarak algoritma çıktısı herzaman sabit uzunluktadır.
Blog içinde hash algoritmaları ile ilgili bir çok makale de yer almaktadır. Bu makalelere aşağıdaki linklerden erişebilirsiniz.
1. Checksum Nedir? Kullanım Alanları Nelerdir?
2. C# Hash Fonksiyonları Kütüphanesi
3. C# Programlama Dilinde SHA1 Hash Algoritması VE Uygulama Örneği
4. C# Programlama Dilinde HMACSHA1 Hash Algoritması VE Uygulama Örneği
5. C# Programlama Dilinde SHA256 Hash Algoritması VE Uygulama Örneği
6. C# Programlama Dilinde HMACSHA256 Hash Algoritması VE Uygulama Örneği
7. C# Programlama Dilinde SHA384 Hash Algoritması VE Uygulama Örneği
8. C# Programlama Dilinde HMACSHA384 Hash Algoritması VE Uygulama Örneği
9. C# Programlama Dilinde SHA512 Hash Algoritması VE Uygulama Örneği
12. C# Programlama Dilinde HMACMD5 Hash Algoritması VE Uygulama Örneği
13. C# Programlama Dilinde RIPEMD160 Hash Algoritması VE Uygulama Örneği
14. JavaScript - MD5 Algoritması ve Kullanım Örneği
15. C# Programlama Dilinde HASH ALGORİTMALARI ve Kullanımı
Tüm algoritmaların kodları arşivimde var. Çalışma mantıklarını bu şekilde çıkartabilirsiniz. İsteyen yoruma yazarsa paylaşabilirim.
Son olarak konuyu özetleyecek olursak şifreleme yöntemi olarak hash fonksiyonlarının iki temel özelliği vardır. Bunlar şifrelenmiş verinin sabit uzunlukta olması ve şifrelenmiş verinin tekrar elde edilememesidir.
Son olarak ta en çok kullanılan hash algoritmalarından bahsetmek istiyorum. Bu alanda en eski algoritmalardan biri MD5 olsa da şuanda en çok kullanılan algoritmalar SHA1, SHA256, SHA384, SHA512 algoritmalarıdır. Bunlar arasında SHA384 algoritması Facebook tarafından da kullanılmaktadır. Bu algoritmaların çeşitli uygulamaları ve algoritma detaylarını yukarıdaki linklerden erişebilirsiniz.
Konu ile alakalı sorularınız olursa lütfen sormaktan çekinmeyin.
En kısa sürede yanıtlamaya çalışacağım...
Yorumlar
Yorum Gönder