SHA-256 kriptografik hash algoritması

Ahmet Seyhan
4 min readJun 11, 2018

--

SHA-256 (Secure Hash Algorithm), SHA-2 altındaki 6 kriptografik hash algoritma setinden bir tanesidir. ABD’nin kriptoloji üzerine uzman Ulusal Güvenlik Ajansı (NSA) tarafından geliştirilmiştir. SHA-256, bitcoin madenciliğindeki proof-of-work hesaplamalarında ve bitcoin adresi oluşturma işlemlerinde kullanılır. Bilinen kriptolama fonksiyonları arasında en yüksek güvenliğe sahip olanlardan biridir.

SHA-256'nın özelliği verileri standart bir hale ve büyüklüğe çevirmesidir. Veriler farklı boyutlarda ve büyüklüklerde olabilir. Sonuç her zaman aynı büyüklükte ve yapıda olacaktır. Bu veri, 256 bit (32 byte - 64 hexadecimal) boyutundadır ve 256 hash de denir. SHA-256 şifrelemesinde veriler hash değerlerine dönüştürülür fakat bu işlem tek yönlüdür, yani hash değerleri verilere geri çevrilemez. Burada dikkat edilmesi gereken bir diğer nokta hash değerlerinin karmaşık düzenleri nedeniyle önceden tahmin edilememesi veya birbirine çok benzer verilerin sonuçlarının birbirinden tamamen farklı olması. Yani hash değerlerinin önceden tahmin edilmesi imkansızdır. Veriler üzerindeki en küçük bir değişiklik çıkan hash değerinin tamamen farklı olmasına neden olacaktır. Buna rağmen SHA-256 deterministik bir işlemdir. Yani aynı veri üzerindeki hash değerlerinin hesaplaması her zaman aynı sonucu verecektir.

Bitcoin’de nasıl kullanıldığını anlamak için birkaç basit örnek ile başlayalım. Örneğin elma kelimesini kullanalım. İlk olarak bu kelimenin 256 hash değerine bakalım. Bu işlem için web siteleri mevcut. Sizde https://www.movable-type.co.uk/scripts/sha256.html adresini kullanarak uygulamalı olarak takip edebilirsiniz.

Gördüğünüz gibi hash değeri 64 basamaklı bir şifre. Seçtiğimiz elma kelimesinin bu sonucu belirlenimcidir(deterministik), yani elma kelimesinin SHA-256 sonucu her zaman aynı değeri verecektir. Şimdi veri üzerindeki değişikliklerin sonucu nasıl etkilediğine bakalım. SHA-256'nın düzensiz şifrelemesi sayesinde, harflerden birini değiştirmek bile sonucu tamamen farklı bir hale getirecektir.

Gördüğünüz gibi veri üzerindeki en küçük bir değişiklik SHA-256 hash değerini bambaşka bir hale getirebiliyor. Verinin üzerindeki değişiklikler ile sonuçlar arasında bir bağlantı kurmak veya istatisk ile bilgi elde etmek imkansızdır. Bu hassas yapısı nedeniyle SHA-256 dijital ortamdaki verilerin orjinalliklerini kontrol etmek için hash değerleri üzerinde bir kimlik doğrulama sistemi olarak kullanılabiliyor. Bir veri ile birlikte onun hash değeri sunulduğunda, veri üzerinde SHA-256 uygulayıp çıkan sonucu verilen hash değeri ile karşılaştırarak veri üzerinde değişiklik yapılıp yapılmadığını kontrol etmek oldukça kolaydır.

1997 yılında Adam Back tarafından hashcash adında bir sistemde mail gönderimlerindeki spam ve DOS saldırılarını engellemek için kriptografik hash algoritması kullanıldı. Hashcash’de mail gönderen taraf hashcash stamp adında bir veriyi mailin başlığına ekleyerek bir süre kendi işlemcisi üzerinde hesaplamalar yaptığını kanıtlamak zorundaydı. Bu veri, gönderilecek mesajın header kısmının arka arkaya birkaç bin kez hash hesaplaması ile elde edilebiliyordu. Temelde bunun mail gönderebilmek için veya şifre ile bir internet sitesindeki hesabınıza giriş yapabilmek için “captcha” denilen küçük bulmacaları çözmekten bir farkı yoktur. Hashcash üzerinde dürüst bir kullanıcı olarak mail göndermeye çalışıyorsanız kısa bir süre işlem yapmanın size bir zararı olmaz, fakat milyonlarca spam mail göndermek isteyen kötü niyetli bir kullanıcı için çok uzun bir zaman kaybına ve daha da önemlisi işlemci üzerindeki sayısız hesaplama nedeniyle büyük enerji maliyetlerine neden olacaktır. Daha basit bir anlatım ile bu sistemde kullanıcılar mail göndermek için küçük bir miktar elektirik parası ödemek zorundaydı.

Hash parametresine bazı kurallar ekleyerek işlemin nasıl zorlaştırıldığını görmek için bir başka örnek ile inceleyelim. Mesela yine elma verisini kullanarak 0 ile başlayan bir hash sonucu elde etmeye çalışalım. Bu verinin hash değeri:

d38a9c3ea00e94dc6ce4bd7d8476ca43fc624ae74abbc4d1f45a71ec7ab18e51

yani istediğimiz özellikte bir sonuç vermiyor. Öyleyse elma1, elma2, elma3… olarak denemeye devam edelim. 0 ile başlayan bir hash değeri elde etmemiz çok uzun sürmeyecektir. Sıradan bir bilgisayar bu sonucu bize anında verecektir. Peki birisi bu sorunun cevabını bulduğunu iddia etse doğrulunu kontrol etmek mümkün mü? Tabii ki, istenen cevabı verdiği iddia edilen veri üzerinde SHA-256 uygulayarak kontrolünü sağlayabiliriz. Nitekim elma543 bize 0 ile başlayan bir hash değeri sunmaktadır.

Peki soruyu ilk iki hanesi 0 olacak şekilde değiştirsek ne olur? Bu kez doğru cevabı bulmak zorlaşacaktır. Aynı şekilde ilk beş, altı hatta yedi hanesi olarak değiştirirsek milyonlarca kez devam eden hash hesaplamaları yapmak gerekecektir.

Yazılarımı ve çalışmalarımı beğeniyorsanız lütfen desteklerinizi aşağıdaki adrese gönderin:

19dhAt7oWyuuWGwnzTJq4niJ1GZfGXqBWW

--

--