SHA-256 (256 Bitlik Güvenli Kriptografik Özet Algoritması), NSA (ABD Ulusal Güvenlik Ajansı) tarafından geliştirilen SHA-2 algoritmasının alt şifreleme fonksiyonlarından biridir. SHA-256 algoritmasıyla şifrelenen her veri, girdinin boyutundan bağımsız olarak 64 karaktere veya 256 bit’lik bir boyuta indirgenmektedir. Bu yazıda SHA-256 algoritması nedir, hash nedir, SHA-256 algoritmasının çalışma mantığı nedir, bu algoritma ne kadar güvenli gibi soruların cevaplarını bulabilirsiniz.
ANA BAŞLIKLAR
Bitcoin Güvenliğini Sağlayan SHA-256 Algoritması Nedir?
SHA-256 algoritmasına geçmeden önce, Hash konusunda bilgi sahibi olmamız gerekmektedir.
Hash Nedir?
Hash, rastgele uzunluktaki girdiyi sabit uzunlukta şifrelenmiş çıktıya dönüştüren matematiksel algoritmadır. SHA-256 fonksiyonu da bu matematiksel algoritmalardan biridir. Buna göre girdiler tek yönlüdür, yani çıktıdan girdiye ulaşmak mümkün değildir. Hash fonksiyonunun (çıktı) sabit bir uzunlukta olması aslında bir güvenlik mekanizması olarak da tarif edilebilir. Bu sayede girdinin uzunluğu, içeriği vs. tahmin edilemez ve çözülmesi zorlaşır. Aynı girdi her zaman aynı hash değerini içerir, bu şekilde güvenilmeyen bir kaynaktan alınan verilerin gerçekliğini doğrulamak mümkün olur. Başka bir ifadeyle girdide yapılan ufak bir değişiklik çok farklı hash değerini üretecektir.
Bu noktada da devreye nonce kavramı girmektedir. Bir bloğun diğer bileşenlerinden farklı olarak nonce değeri değişkendir. Başka bir ifadeyle bloğun hash değeri hesaplanırken, blok içindeki verileri bozmadan madencilerin değiştirebileceği 32 bitlik bir alandır. Nonce hakkında detaylı bilgiye buradan erişebilirsiniz.
SHA-256 Algoritması Nedir?
Güvenli kriptografik özet algoritmalarının (SHA) temeli yani SHA-0, 1990’lı yılların başında NSA (ABD Ulusal Güvenlik Ajansı) tarafından yapılan çalışmalara dayanır. Devam eden yıllarda SHA-1 geliştirilirken, 2000’li yılların başında ise Bitcoin blokzincirinin hash fonksiyonu ve madencilik algoritması SHA-256’yı (256 Bitlik Güvenli Kriptografik Özet Algoritması) da içine alan SHA-2 algoritması geliştirilmiştir.
SHA-256 algoritması Bitcoin blokzincirindeki işlemleri doğrulamak ve blokzincirin güvenliğini sağlamak başka bir ifadeyle verileri şifrelemek ve verinin değiştirilmesini önlemek amacıyla kullanılmaktadır. Daha detaylı anlatmak gerekirse, Bitcoin blokzincirinde her bir blok kabaca 1 Megabyte (MB) veri saklamaktadır. Ağa gönderilen transfer işlemleri, Mempool adı verilen işlem havuzunda birikir ve işlem ücretine göre sıradaki Bitcoin bloğuna dahil edilir. Oluşturulan her blok, SHA-256 şifreleme algoritması ile şifrelenmiş veriler içermektedir. Bununla birlikte SHA-256 algoritmasıyla şifrelenen her veri, girdinin boyutundan bağımsız olarak 64 karaktere veya 256 bit’lik bir boyuta indirgenir. Bunula birlikte bloğun hash özetinde ağa gönderilen transfer işlemlerinin yanı sıra, nonce değeri, blok numarası ve önceki bloğun hash’i gibi başka girdiler de bulunmaktadır.
Bitcoin blokzincirinde, transfer işlemlerini onaylamakla görevli madencilik cihazları, oluşturulan blokta yer alan işlemleri doğrulamak için, cihazların işlemci gücünü kullanarak matematik problemini çözmeye çalışırlar.
SHA-256 Algoritması Ne Kadar Güvenli?
Bir hash’i (çıktı) deşifre etmenin tek yolu, aynı hash’i elde edene kadar mümkün olan her girdiyi denemektir. Ancak bu milyarlarca deneme gerektirmektedir. Diğer taraftan uzmanlar, kuantum bilgisayarlar oluşturulana kadar SHA-256 algoritmasının standart kriptografik özet (hash) algoritması olarak kalacağı görüşündeler. Bununla birlikte Satoshi Nakamoto, Bitcoin Talk Forumunda SHA-256 algoritmasına yönelik şu yorumda bulunmuştur;
“SHA256, Moore yasası hesaplama iyileştirmeleri tarafından kırılmayacak. Eğer kırılacaksa, bu çığır açıcı bir kırma yöntemiyle olacak. SHA-256’yı hesaplamalı olarak izlenebilir aralığa getirecek yöntemin, SHA-512 algortimasını da alt etme şansı yüksektir.”
“SHA- 256’da bir zafiyet görürsek belli bir blok sayısından sonra yeni bir hash fonksiyonuna geçiş yapabiliriz. Bu durumda herkesin yazılımını bu blok numarasına göre yükseltmesi gerekecek. Yeni yazılımın, aynı eski hash’e sahip başka bir blokla değiştirilmediğinden emin olmak için tüm eski blokların yeni bir hash’ini tutması gerekmektedir.”