Hash Nedir? Hash Fonksiyonları Nasıl Çalışır?

Kriptoloji serisine başlangıç makalesi olarak hash fonksiyonları hakkında bilgi aktarmaya çalışacağım. Yazı boyunca yer yer Özetleme Fonksiyonları olarak ya da Hash Fonksiyonları olarak belirtebilirim, ikisi de aynı anlama gelmektedir. Yer yer siber güvenlik ile veya blockchain ile bağlantısına da deyinerek örneklendirmeye çalışacağım. Makale içerisinde bazı İngilizce terimlere Türkçe’ye çevirerek yer vermeye çalıştım. Makale içerisindeki ek bağlantılardan bu terimleri İngilizce olarak da görüntüleyebilirsiniz.

Hash Fonksiyonları

Özet, diğer adıyla hash değerleri karmaşık gözüken, belirli uzunlukta değerlerdir. Hash’ler belirli bir hash algoritması üzerine yazılan hash fonksiyonları ile oluşturulmaktadır. Hash fonksiyonlarında anahtar kullanılmadan şifreleme yapıldığı için yapı olarak diğer şifreleme fonksiyonlarından ayrı sınıfta ele alınmaktadır. Orjinal veriyi (mesajı), sabit boyutlu bir veri koleksiyonu yani hash değeri ile eşlemek için hash fonksiyonları kullanılıyor. Hash fonksiyonları genellikle parola şifrelemek için kullanılmaktadır.

Basit bir hash fonksiyonunun özellikleri aşağıdaki gibi olmalıdır.

  • Tersine çevrilemezlik veya tek yönlü işlev: İyi bir hash, orijinal parolayı çıktıdan veya hashden yeniden oluşturmayı çok zorlaştırmalıdır.
  • Difüzyon veya çığ etkisi: Orijinal parolanın yalnızca bir bitindeki bir değişiklik, hash değerinin yarısında değişiklikle sonuçlanmalıdır. Başka bir deyişle, bir parola biraz değiştirildiğinde, şifrelenmiş metnin çıktısı önemli ölçüde ve tahmin edilemez şekilde değişmelidir.
  • Determinizm: Belirli bir parola her zaman aynı hash değeri veya şifrelenmiş metni oluşturmalıdır.
  • Çarpışma direnci: Aynı hash değerini veren iki farklı şifre bulmak zor olmalı.
  • Tahmin edilemezlik: Hash değeri paroladan tahmin edilebilir olmamalıdır.

Hash özellikleri hakkında daha detaylı bilgi için tıklayın.

Hash fonksiyonları tek yönlü şifreleme yöntemleridir. Her hangi bir boyutta veriden, sabit boyutlu bir hash değeri elde edilir. Bu yüzden hash fonsksiyonu ile elde edilen bir çıktıdan, süreci geri döndürerek orjinal mesajı tekrar elde etmek mümkün değildir.

Dipnot: Günümüzde belli başlı bir çok hashlenmiş veri kayıtlı olarak tutulmaktadır. Örn: “admin” verisinin md5 değeri “21232f297a57a5a743894a0e4a801fc3” olarak bazı hash crackleme sitelerinin veritabanlarında önceden hesaplanarak tutulmaktadır. Bu hash değerini bu tarz sitelerde sorguladığınızda metnin orjinalini verse de bu daha önceden hesaplandığı ve tabloya kaydedildiği için mümkün olmaktadır. Daha önce veriden hash’i alınıp kaydedilmemiş bir hash değerini bu yolla çözmek-eşleştirmek mümkün değildir.

Bu fonksiyonların önemli bir diğer özelliği ise giriş verisindeki en ufak bir değişiklik çıktıyı tamamen değiştirmektedir.

Hashlerin Bazı Kullanım Alanları

Hash Kullanım AlanlarıBlockchain olarak bildiğimiz blokzincir yapısı da aslında buna benzer şekilde çalışmaktadır. Önceden yazılan bir veriyi değiştirdiğinizde çıktı tamamen değişeceği için değişmezlik kuralını ihlal edecektir. Blockchain yapısındaki her bir blokta hash fonksiyonları kullanılmaktadır.

Yine parola kullanımlarında da hash kullanımı oldukça yaygın ve önerilen bir yöntemdir. Son kullanıcıdan alınan parololar veritabanlarında hash fonksiyonu ile şifrelenerek saklanır.

Hash’ler Kırılabilir veya Çözülebilir mi?

Hash fonksiyonları tek yönlü olduğundan şifre çözme gibi bir durum söz konusu değildir. Siber güvenlik ile ilgili olan arkadaşlar, “bazı araçlar hash çözebiliyor” diye itiraz edebilir (hashcat vb.). Fakat hash çözülmesi gibi bir durum uygulamada ‘mümkün gözüküyor’ olsa da teoride mümkün değildir. Aslında önceden toplanan bir takım veri setleri kullanılarak hash çıktıları kaydediliyor. Bu hash çıktıları ile eşleştirme kontrolü yaparak verinin orjinal hali tespit edilmeye çalışılıyor. Bu noktada “4mgnu93.&^+^234g3ofj34nv802348hv38vh” gibi tamamen uydurma ve rastgele oluşturacağınız bir metnin hash değerinin kırılması neredeyse imkansızdır. Hash cracking hakında daha detaylı bilgi için tıklayın.

Örneğin sha256 ile şifrelenen “silexi” metinin çıktısına baktığımızda aşağıdaki gibi bir sonuç elde etmeliyiz. Bu değer zamandan ve diğer etmenlerden bağımsız olarak her zaman aynı çıktıyı üretmelidir.

silexi = 10503030a76bd048e68e847e7ebe7895f887fd9df909b55a038fddb974530011

Girişteki verinin sonuna bir harf daha ekleyip “silexii” yaptığımızda hash’in ne kadar değiştiğini, deyim yerindeyse tamamen değiştiğini gözlemleyebiliriz.

silexii = e299389d6b9b26dd625a70516cb6b72590c11e803f2c578e496cc27a0d580b18

Siz de kendi girişlerinizi kullanarak aşağıdaki bağlantıdan test edebilirsiniz.

Blockchain Hash Demo

Hash’ler Güvenilir mi?

Bu bilgilerin ışığında bir hash fonksiyonu olan MD5 hakkında ilginç bir bilgi paylaşalım. Yukarıda bahsettiğimiz gibi hash fonksiyonlarından beklenen özelliklerden birisi çarpışma direncidir. Bu özellik, benzersiz şifrelenen değerlerin güvenilirliğini yükseltiyor. Fakat 2 akademisyen 1993 yılında MD5 üzerine yayınlanan bir makale ile MD5 fonksiyonunun iki farklı giriş için aynı çıktıyı ürettiğini kanıtladı. Bundan dolayı MD5’e olan güven oldukça sarsılmıştır. 2004 yılında MD5CRK adı altında bir proje ile MD5 algoritmasının zaafları ve zayıf noktaları belgelenmiştir.

İlgili hash çarpışması hakkında daha detaylı bilgi için 1993’te yazılan aşağıdaki makaleden faydalanabilirsiniz.

Collisions for the compression function of MD5

Serinin devamında hash fonskiyonlarından MD5, SHA1, SHA2, SHA3 ve Merkle Ağacı ile ilgili bilgiler aktarmaya çalışacağım.

 

Doldur be meyhaneci.
Yazı oluşturuldu 10

Hash Nedir? Hash Fonksiyonları Nasıl Çalışır?” üzerine 2 görüş

    1. Kullanım yerine de bağlı olarak genellikle SHA2 kullanıyorum. Popüler olanlar MD5, SHA1, SHA2, SHA3 bunlara göz atabilirsin. Yakında yeni bir yazıda bu konuyu daha detaylı ele alacağım

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön