Hashing Nedir?
Ana sayfa
Makaleler
Hashing Nedir?

Hashing Nedir?

İleri Seviye
Yayınlanma: Jul 29, 2019Güncellenme: Jan 31, 2023
7m
Hashing, farklı büyüklükteki girdilerden sabit büyüklükte bir çıktı yaratma sürecine verilen isimdir. Bu işlem, hash fonksiyonları olarak bilinen matematiksel formüllerin (hashing algoritmaları olarak uygulanır) kullanımıyla yapılır. 
Tüm hash fonksiyonları kriptografi kullanımını içermese de, kriptografik hash fonksiyonları kripto paraların temelini oluşturur. Bu fonksiyonlar sayesinde blockchainler ve diğer dağıtılmış sistemler yüksek seviyede veri bütünlüğü ve güvenlik elde edebilirler.

Hem geleneksel hem de kriptografik hash fonksiyonları deterministiktir. Deterministik olması bir hashing algoritmasının girdi değişmediği müddetçe her zaman aynı çıktıyı (hash ya da özet olarak bilinir) vereceği anlamına gelir.

Kripto paraların hashing algoritmaları tipik olarak tek yönlü fonksiyonlar şeklinde tasarlanmıştır, yani çok büyük miktarlarda hesaplama süresi ve kaynak harcanmadan tersine çevrilemez. Diğer bir deyişle, girdiden çıktı yaratmak oldukça kolay olsa da diğer yönde işlem yapmak zordur (yalnızca çıktıya dayanarak girdiyi oluşturmak). Genel olarak girdiyi bulmak ne kadar zorsa, hashing algoritmasının da o kadar güvenli olduğu kabul edilir.


Bir hash fonksiyonu nasıl çalışır?

Farklı hash fonksiyonları farklı büyüklüklerde çıktı yaratır fakat her bir hashing algoritması için olası çıktı büyüklüğü her zaman sabittir. Örneğin, SHA-256 algoritması yalnızca 256 bit çıktılar üretebilirken SHA-1 her zaman 160-bitlik bir özet yaratır.

Örnek olarak, "Binance" ve "binance" kelimelerini SHA-256 hashing algoritmasından geçirelim (Bitcoin'de kullanılan).

SHA-256

Girdi

Çıktı (256 bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Çok küçük bir farkın (ilk harfin büyük ya da küçük olması) nasıl tamamen farklı bir hash değeri yarattığına dikkat edin. Fakat biz SHA-256 kullandığımız için, çıktılar her zaman sabit 256 bit (ya da 64 karakter) boyutunda olur - girdi boyutundan bağımsız olarak. Ayrıca, bu iki kelimeyi algoritmadan kaç kere geçirirsek geçirelim, iki çıktı her zaman aynı kalacaktır.

Bunun aksine, aynı girdileri SHA-1 hashing algoritmasından geçirirsek şu sonuçları elde ederiz:

SHA-1

Girdi

Çıktı (160 bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Buradaki önemli nokta, SHA'nın Güvenli Hash Algoritmasının (Secure Hash Algoritm) kısaltması olmasıdır. SHA-0 ve SHA-1 algoritmalarıyla birlikte SHA-2 ve SHA-3 gruplarını dahil eden kriptografik hash fonksiyonları grubunu ifade eder. SHA-256, SHA-512 ve diğer varyantlarla birlikte SHA-2 grubunun bir parçasıdır. Şu anda yalnızca SHA-2 ve SHA-3 grupları güvenli olarak kabul edilir.


Hashing Fonksiyonları Neden Önemlidir?

Geleneksel hash fonksiyonları, veritabanı aramaları, büyük dosya analizleri ve veri yönetimini de dahil geniş çaplı kullanım alanlarına sahiptir. Diğer yandan kriptografik hash fonksiyonları, mesaj doğrulama ve dijital parmak izi gibi bilgi güvenliği uygulamalarında sıklıkla kullanılır. Konu Bitcoin olduğunda, kriptografik hash fonksiyonları madencilik sürecinin önemli bir parçasıdır ve ayrıca yeni adreslerin ve anahtarların oluşturulmasında rol oynar.

Hashingin asıl gücü çok büyük miktarlarda bilgiyle başa çıkılması gerektiğinde ortaya çıkar. Örneğin, bir kişi büyük bir dosya ya da veri setini hash fonksiyonu ile çalıştırabilir ve daha sonra bu fonksiyonun çıktısını kullanarak verinin doğruluğunu ve bütünlüğünü hızla doğrulayabilir. Bunu yapmak hash fonksiyonunun deterministik doğası sayesinde mümkün olur: girdi her zaman basitleştirilmiş, yoğunlaştırılmış bir çıktı (hash) yaratır. Böylesi bir teknik büyük boyutlarda verilerin "hatırlanması" ve kaydedilmesi zorunluluğunu ortadan kaldırır.

Hashing özellikle blockchain teknolojisi bağlamında kullanışlıdır. Bitcoin blockchaini hashing'i dahil eden birkaç operasyona sahiptir ve bunların çoğu madencilik sürecinin parçasıdır. Aslında neredeyse tüm kripto para protokolleri, işlem gruplarını bloklara yoğunlaştırmak ve bağlamak ve ayrıca her bir blok arasında kriptografik bağlantı yaratarak bir blockchain oluşturmak için hashing kullanır.


Kriptografik hash fonksiyonları

Yine kriptografik teknikleri içeren bir hash fonksiyonu bir kriptografik hash fonksiyonu olarak tanımlanabilir. Genel olarak, bir kriptografik hash fonksiyonunu kırmak çok sayıda kaba-kuvvet girişimi gerektirir. Bir kişinin, kriptografik hash fonksiyonunu "geri döndürmesi" için istenen çıktı yaratılana kadar girdinin ne olduğunu deneme yanılma yoluyla tahmin etmesi gerekir. Fakat farklı girdilerin tam olarak aynı çıktıları yaratması da olasılık dahilindedir. Bu durumda bir "çakışma" meydana gelir.

Teknik olarak, bir kriptografik hash fonksiyonunun etkin şekilde güvenli kabul edilmesi için üç özelliğe sahip olması gerekir. Bunları çakışmaya dayanıklılık, ters görüntüye dayanıklılık, ve ikincil ters görüntüye dayanıklılık olarak tanımlayabiliriz.

Her bir özelliği ayrıntılı incelemeden önce altlarında yatan mantığı üç kısa cümle ile açıklamak gerekirse:

  • Çakışmaya dayanıklılık: herhangi iki farklı girdinin aynı hashi çıktı olarak üretmemesi.

  • Ters görüntüye dayanıklılık: hash fonksiyonunu "geri döndürülememesi" (verilen bir çıktıdan girdiyi bulmak).

  • İkincil ters görüntüye dayanıklılık: belirli girdiyle çakışan ikinci bir girdi bulunamaması.


Çakışmaya dayanıklılık

Daha önceden belirttiğimiz gibi, farklı girdiler tam olarak aynı hashi ürettiğinde meydana gelir. Dolayısıyla, bir hash fonksiyonu birisi bir çakışma bulana kadar çakışmaya dayanıklı olarak kabul edilir. Çakışmalar herhangi bir hash fonksiyonu için her zaman var olacaktır çünkü olası girdiler sonsuzken olası çıktılar sınırlı sayıdadır.

Diğer bir deyişle, çakışma ihtimalinin milyonlarca yıllık hesaplama gerektirecek kadar düşük olduğu koşullarda bir hash fonksiyonu çakışmaya dayanıklıdır. Dolayısıyla hiçbir çakışmaya dayanıklı hash fonksiyonu olmasa da, bazı fonksiyonlar dayanıklı kabul edilecek kadar güçlüdür (ör. SHA-256).

Çeşitli SHA algoritmaları arasından, SHA-0 ve SHA-1 grupları artık güvenli kabul edilmez çünkü bu gruplarda çakışmalar keşfedilmiştir. Şu anda, SHA-2 ve SHA-3 grupları çakışmaya dayanıklı kabul edilmektedir.


Ters görüntüye dayanıklılık

Ters görüntüye dayanıklılık özelliği tek yönlü fonksiyon kavramıyla ilişkilidir. Bir hash fonksiyonunun, birisinin belirli bir çıktı yaratan bir girdi bulma olasılığının çok düşük olması durumunda ters görüntüye dayanıklı olduğu kabul edilir.

Bu özellik bir öncekinden farklıdır çünkü bir saldırgan belirli bir çıktıya bakarak girdinin ne olduğunu tahmin etmeye çalışır. Diğer yandan bir çakışma birisinin aynı çıktıyı yaratan iki farklı girdi bulması durumunda görülür fakat hangi girdilerin kullanıldığının önemi yoktur.

Ters görüntü dayanıklılığı verinin korunmasına yönelik değerli bir özelliktir çünkü mesajın basit bir hashi bilgiyi paylaşma gereksinimi olmadan bu mesajın doğruluğunu kanıtlayabilir. Uygulamada birçok hizmet sağlayıcı ve web uygulaması, düz metin olarak şifreler yerine şifrelerden oluşturulmuş hashleri saklar ve kullanır.


İkincil ters-görüntü dayanıklılığı

Basitleştirmek için, ikincil ters görüntü dayanıklılığının diğer iki özellik arasında bir yerde olduğunu söyleyebiliriz. İkincil ters görüntü saldırıları, bir kişinin halihazırda bilinen bir girdinin yarattığı bir çıktıyla aynı çıktıyı yaratan belirli bir girdiyi bulması durması durumunda gerçekleşir.

Diğer bir deyişle, ikincil ters görüntü saldırısı bir çakışma bulmayı içerir ama aynı hashi yaratan iki rastgele girdi aramak yerine, belirli bir girdi tarafından yaratılan hashin aynısını yaratan başka bir girdi aranır.

Bu nedenle, çakışmaya dayanıklı bir hash fonksiyonu ikincil ters görüntü saldırılarılarına da dayanıklıdır çünkü ikincil ters görüntü saldırıları her zaman bir çakışma içerir. Fakat, çakışmaya dayanıklı fonksiyonlara yine de ters görüntü saldırıları yapılabilir çünkü burada tek bir çıktıdan tek bir girdi bulunur.


Madencilik

Bitcoin madenciliğinde, bakiye kontrolü, işlem girdi ve çıktılarını bağlamak ve bir blok içindeki işlemleri Merkle Ağacı oluşturmak için hashlemek gibi hash fonksiyonlarını içeren birçok adım bulunur. Fakat Bitcoin blockchaininin güvenli olmasının başlıca nedenlerinden biri madencilerin bir sonraki bloğa yönelik en nihayetinde geçerli bir çözüm bulabilmeleri için çok sayıda hashing işlemi yapmalarının gerekmesidir.
Bir madencinin aday bloğu için hash değeri yaratırken birkaç farklı girdiyi denemesi gerekir. En temelde madenciler bloklarını ancak belirli sayıda sıfırla başlayan çıktı hashleri yarattıkları zaman doğrulayabilirler. Madencilik zorluk seviyesini belirleyen şey sıfırların sayısıdır ve bu sayı ağ için ayrılmış hash oranına göre değişiklik gösterir.

Bu durumda hash oranı, Bitcoin madenciliğine ne kadar bilgisayar gücü yatırımı yapıldığını temsil eder. Eğer ağın hash oranı yükselirse Bitcoin protokolü madencilik zorluk seviyesini, bir bloğu kazmak için gerekli ortalama sürenin yaklaşık 10 dakika olarak kalacağı şekilde otomatik olarak ayarlar. Bunun aksine, eğer birkaç madenci kazma işleminden vazgeçerek hash oranının büyük miktarda düşmesine neden olursa, madencilik zorluğu kazma işlemini daha kolay hale getirecek şekilde ayarlanır (ortalama blok süresi 10 dakikaya geri dönene kadar).

Madencilerin çakışma bulmak zorunda olmadığı çünkü geçerli bir çıktı olarak yaratabilecekleri birden fazla hash olduğu unutulmamalıdır (belirli sayıda sıfır ile başlayanlar). Bu yüzden belirli bir blok için birkaç farklı olası çözüm bulunur ve madencilerin madencilik zorluğu tarafından belirlenen eşiğe göre bunlardan yalnızca bir tanesini bulması gerekir.

Bitcoin madenciliği yoğun maliyetli bir işlem olduğu için madencilerin sistemi kandırmaya çalışmak için geçerli bir nedenleri yoktur çünkü bunun sonucunda finansal kayıp yaşamak durumunda kalırlar. Bir blockchaine ne kadar çok madenci katılırsa, o blockchain daha büyük ve daha güçlü hale gelir.


Son fikirler

Hash fonksiyonlarını bilgisayar bilimleri için özellikle de büyük miktarlarda verilerle çalışma konusunda çok önemli araçlar olduğuna hiç şüphe yoktur. Hashing algoritmaları kriptografi ile birleştirildiklerinde çok kullanışlı hale gelerek, birçok farklı yoldan güvenlik ve doğruluk sunar. Dolayısıyla kriptografik hash fonksiyonları neredeyse tüm kripto para ağları için hayati öneme sahiptir bu nedenle de özelliklerini ve çalışma mekanizmalarını anlamak blockchain teknolojisiyle ilgilenen herhangi biri için oldukça faydalıdır.