Herkese merhaba, bu yazıda sizlere günümüz teknolojilerinde şifreleme ve güvenliğin odak noktalarından biri olan Hash fonksiyonlarından, kullanım alanlarından, neden kullanıldığı ve güvenliğinden bahsedeceğiz.
Değişken boyutta verilen bir girdinin çıktısının sabit bir boyutta olması ve bu işlemin tek yonlu olmasına olanak sağlayan algoritmalardır Hash fonksiyonları. Bir karakteri (örn : ‘a’) hash fonksiyonuna soktuğumuzda çıktısı sabit bir boyutta veya bir kitap hatta bir kütüphanedeki tüm metinleri hash fonksiyonuna soktuğumuzda yine sabit bir boyutta çıktı alırız. Üstelik dünyanın neresine giderseniz gidin kullandığınız tek bir hash algoritması aynı girdi ile aynı sonucu verecektir. Tek yonlu olmasından kastımız ise bu fonksiyon ile alınan çıktının eski haline döndürülemeyeceğidir. Evet doğru okudunuz. Bu şifreleme fonksiyonun çıktısı eski haline dönmüyor ! Peki ya dönmüyor ise bunu ne için kullanıyoruz ?
Günümüzde yaygın olarak sanal alemdeki hesaplarımızın şifreleri o kuruma ait veritabanında Hash fonksiyonu ile şifrelenmiş bir biçimde saklanıyor. Bu biraz da kurumun tercihine kalmış bir durumdur lakin doğabilecek zaafiyetler ile kötü niyetli saldırılar sonucunda veritabanında saklanan bilgilerin dışarı sızdırılması sonucunda bu şifrelerin çözümlenmesi hiç kolay olmayacaktır. Veritabanında şifrelerin fonksiyon çıktısı tutuluyor ise login istekleri nasıl gerçekleşiyor ? sorusuna cevap verelim. Sizler login olmak için kullanıcı adı / mail / telefon ardından şifrenizi girdiğiniz zaman şifreniz Hash fonksiyonundan geçirilir ve şifrelenmiş hali veritabanındaki hali ile uyuşuyor mu ? diye kontrol edilir.
Login isteklerinin yanı sıra dosya transfer işlemlerinde de kullanılabilir. Ahmet özgeye bir dosya göndermek istiyor ve bu dosyanın tamami ile güvenli bir şekilde değiştirilmeden gittiğinden de emin olmak istiyor. Bu durumda dosyanın Hash fonksiyonu ile özetini alır ve özgeye önden gönderebilir. Özge kendisine iletilen dosyanın özeti ile Ahmetin gönderdiği özeti karşılaştırabilir.
Parmak izi doğrulama sistemlerinden elektronik imzalara kadar Hash fonksiyonlarının faydaları say say bitmez 🙂 Fazla detaya girmeden bir kaç hash fonksiyonu ve çıktı boyutlarından bahsedip örneklere geçmek istiyorum. Aşağıda bazı hash fonksiyonları ve verecekleri çıktıların boyutlarını göreceksiniz.
MD5 – 128 bitlik sabit uzunlukta çıkış verir.
MD6 – 256 bitlik sabit uzunlukta çıkış verir.
SHA1- 160 bitlik sabit uzunlukta çıkış verir.
SHA256- bitlik sabit uzunlukta çıkış verir.
Şimdi SHA256 ile bir kaç özetleme yapalım. Bunun için online olarak bu siteyi kullanacağım siz de deneyebilirsiniz.
İlk olarak ‘Yazılım Köyü’ metninin SHA256 ile şifrelendiğinde nasıl bir özet verdiğine bakalım :
Şimdi de sonundaki ü harfini u ile değiştirelim yani özetleyeceğimiz metin : ‘Yazılım Köyu’ :
Gördüğünüz gibi çıktının boyutunun sabit olması ile beraber bir karakterin bile değişmesi neredeyse özetin tamamının değişmesine sebebiyet vermektedir.
Özetlerin hash fonksiyonun türüne göre farklı boyutta çıktı verdiğinden ve geri döndürülemez olduğundan bahsettik. Peki kırılamaz mı bu özetler ? Burada dikkat çekmek istediğim bir konu var. Geri döndürülmesi ayrı kırılması ayrı konulardır. Çünkü günümüzde bazı sistemler kelime ve cümle öbeklerinin orjinal hallerini ve özetlenmiş fonksiyonlarını veritabanlarında saklarlar. X sitesinin SHA256 encode sisteminde ”Cemal” ismini encode ettiğim zaman özetlenmiş halini ve orjinali hemen depolanır. Birileri ‘Cemal’ isminin özetinin orjinal halini elde etmek istediğinde bu sistemlere verirler. Sistem özeti veritabanında arar ve bulursa bireye orjinal halini verir.
Güvenlik
Gelelim güvenlik kısmına. Hash fonksiyonlarının değişen çıktı boyutlarının güvenlik konusunda farklılıklar yaratır lakin bir konuya dikkat çekmekte fayda var. Örneğin x hash fonksiyonu çıktıda 10 karakter verecektir. Bu 10 karakterin alabileceği 1 milyon farklı durum olsun. Siz 1.000.001 farklı giriş yaparsanız 2 özetin birbiri ile aynı olma olasılığı doğar. Yani çok düşük bir ihtimal de olsa instagram veritabanında sizin şifrenizin özeti ile bir başkasının şifresinin özetinin aynı olma olasılığı var. Tabii bu durumda Unique kullanıcı adları bu tür düşük olasılıkları da ört bas eder 🙂
Buraya kadar okuduğunuz için teşekkür ederim. Kendinize iyi bakın 🙂