Nedir Bu SHA-256?

Yasin Komur
7 min readMar 13, 2022

Blockchain dünyasına giriş yapan herkesin anlamasının iyi olacağı bazı konular var. Bu konular kendi içerisinde önemli olmasının yanında bir merdivenin basamakları gibi blockchaini anlamayı ve uygulamayı sağlayan yolda bize destek olacaktır.

O zaman merdivenleri yavaş yavaş çıkmaya başlayalım.

SHA-256

SHA-256, 256-bit Secure Hash Algorithm (Güvenli Hash Algoritması) anlamına gelir ve kriptografik güvenlik için kullanılır. Kriptografik karma algoritmalar, geri döndürülemez ve benzersiz karmalar üretir. Olası hash sayısı ne kadar büyükse, iki değerin aynı hash’i yaratma şansı o kadar az olur.

Yukarıdaki tanım kendi içerisinde güzel bir tanım olsa da yeni başladığımız bu yolculukta bu tarz tanımlarla sizi sıkmak istemiyorum. Blockchaini anlamak için çıktığımız bu yolculukta her şeyi basit düzeyden ileri düzeye örneklendirerek ve herkesin anlayabileceği şekilde anlatacağım.

Parmak İzleri

Dünya üzerinde milyarlarca insan ve bu insanlara ait parmak izleri var. Parmak izleri bize özgü yapılar olmasından dolayı suçluların tespitinden banka işlemlerine, çalıştığımız yerlere giriş yaptığımız turnikelerden eğitim kurumlarına kadar her yerde kullanılıyor. Kullanılmasının sebebi parmak izlerimizin havalı iç içe yapılar gibi gözükmesinden ileri gelmiyor tabii ki. Nerede ve nasıl kullanılırsa kullanılsın parmak izleri bizim kimliğimiz. Kullanıldığı her yerde bize “Evet, bu sensin” cevabını veren yardımcımız veya lanetimiz.

Farklı İnsan ve Aynı Parmak İzi

Evet böyle bir ihtimal var. 60 milyonda 1 de olsa 2 insan aynı parmak izine sahip olabilir. Peki böyle olması kimlik doğrulaması için parmak izinin kullanılmasının kötü bir yöntem olduğunu mu gösterir? Tabii ki hayır. Çünkü bu ihtimal çok düşük bir ihtimal. Ve bahsettiğimiz parmak izleri aynı olan bu iki insanın herhangi bir şekilde bir araya gelmesi ve bir karışıklık yaşanması ihtimalleri daha da düşürüyor. Yani 2 insanın parmak izinin aynı olması ne kadar ihtimal dahilinde olsa bile, bu durum parmak izinin mükemmel bir doğrulama sistemi olduğunu değiştirmiyor.

Konumuza ufak bir giriş yaptım. Şu ana kadar bahsettiklerimizi az çok bildiğinizi biliyorum ve “ne alaka” dediğinizi duyar gibiyim. Fakat benim amacım bildikleriniz üzerinden bilmediklerinizle bağlantı kurmanızı sağlamak. Bu yüzden bunlardan bahsetmem gerekiyordu. Haydi devam edelim.

Dijital Dosyalarımızın Parmak İzi

Her insan birbirinden farklı ve bu farkı doğrulayan en güzel şeylerden birisi de parmak izlerimiz. Aynı mantığı dijital bir ortama taşımak da gerekmez mi? Peki nasıl?Mesela bir dosyaya sadece “dosya” demek o dosyanın diğer dosyalardan bir farkı olmadığını gösterir. Fakat şunu dediğinizi duyar gibiyim “Tam da bu yüzden dosyalarımıza isim veriyoruz.” Evet, haklısınız. Fakat bu isimlerin de aynı olma ihtimali var insanlarda olduğu gibi. Bize öyle bir sistem gerekiyor ki tam olarak insanların parmak izleri gibi sadece bir dosyaya özgü olsun ve başka dosyalardan kesinlikle bu özelliğiyle ayrılsın. Gelin biz buna dijital dosyalarımızın parmak izleri diyelim. Bunu düşünen ve bulan dahiler ise SHA-256 hash algoritması kodu demiş.

Benzerlikler ve Gereklilikler

İnsanoğlunun yüksek teknolojiye ulaşırken yine kendisini keşfederek, etrafını gözlemleyerek bunu yaptığı süregelen bir gerçek. Faydalandığımız benzerlikler yine bizden gelen gerekliliklerden doğuyor. O zaman gelin bir görselle şu ana kadar anlattıklarımızı canlandırmaya çalışan hayal gücümüze destek olalım.

Dosyayı gösteren kod aslında dosyamızın parmak izi fakat biz bundan sonra hash(karıştırma) kodu olarak tanımlamaya başlayalım. SHA-256 hash kodumuz toplamda 64 karakterden oluşuyor (lütfen saymayın…). Her karakter ise 0’dan 9’a 10 tane rakamın veya A’dan F’ye 6 tane harfin içerisinden SHA-256 Hashing Algoritması ile seçiliyor. Bu harflerin bir araya karmakarışık bir şekilde gelmesi ise dosyamıza özgü bir hash kodunun oluşmasını sağlıyor. SHA-64 yerine SHA-256 denmesinin sebebi ise her bir karakterin 4 bitlik bir alan kaplaması ve toplamda 256 bitlik bir alanın ayrılması.

Genler ve Algoritmalar

İnsanların genlerinin sırları hala tam olarak çözülebilmiş değil. Genetik faktörlerin olasılık hesapları yapılabilse de her zaman bir sürpriz yumurta ihtimali var. Bu karmaşıklık ve bilinmemezlik bizlerin farklı olmasını sağlayan şey. Aynı sistemi dijital dosyalarımıza taşıdığımızda ise bize hash kodunun yardım ettiğini biliyoruz. Peki hash kodunu yaratan ve farklı olmasını sağlayan sistem ne?

SHA-256 Hashing Algoritması

Yukarıda bahsettiğim gibi hash kodundaki her karakter toplamda 16 karakterden birinden seçiliyor. Bu yüzden hash koduna hexadecimal (onaltılık) bir kod diyoruz. Her bir karakter için 16 seçenek var ve toplamda bu karakterleri yerleştireceğimiz 64 tane boşluk var.

— — — — — — -Matematik Köşesi Başlıyor — — — — — — -

16.16.16…….-64 tane- (64 karakterin her biri 16 farklı değer alabilir)

Bu da 16^64 yapar.

Ben bu köşeyi çok sevdim. O yüzden birkaç adım daha ilerleyeceğim :)

16^64

= (2⁴)^64

= 2^256

— — — — — — -Matematik Köşesi Bitiyor — — — — — — -

Gördüğünüz üzere bu algoritma içerisinden 256 tane farklı kod çıkarılabiliyor. Bu sayı büyük ihtimalle bütün çöllerdeki ve denizlerdeki kum tanelerinin toplamından daha fazladır. Böyle diyince gerçekten de daha havalı oluyormuş.

Fakat yine de bir noktada 2 tane kodun aynı olma ihtimali yok mu? İnternet üzerindeki varlıklarımızın sayısı sınırlı değil ve bir gün bu sayıyı da aşabilir. Değil mi?

Yuvasız Güvercinler

İki insanın parmak izinin aynı olması nasıl ki olasılık dahilinde ise aynı durum hash kodu için de geçerli. Sonuçta dosyalarımızın sayısı oluşturulabilecek toplam hash kodu sayısını geçerse mecburen bazı dosyalar aynı kodla eşleştirilmek zorunda kalacak.

5 tane güvercin yuvasının olduğu bir tahta blokta 6. gelen güvercin mecburen diğer 5 güvercinin olduğu yuvalardan birinde barınacak. Fakat dijital dosyalar için bu ihtimal iki insanın parmak izlerinin aynı olması ihtimalinden bile çok düşük. Bu kadar düşük bir ihtimali ise gönül rahatlığıyla göz ardı edebiliriz.

Güvercin yuvası (Pigeonhole) prensibi de tam olarak bundan bahseder.

Her şey Güzel de Ne Yapıyor Bu Algoritma?

Hash algoritmaları için bazı gereklilikler var. Bu gereklilikler bu algoritmanın güvenliğini daha da artırıyor ve ulusal güvenlikten banka sistemlerine kadar her yerde bu algoritmaların kullanılmasının sebebi bu. Şimdi size bu gerekliliklerden bahsedeceğim.

Yukarıdaki örneklerimi biraz uzun tutmuş olabilirim fakat bunun bazı sebepleri vardı.

1. Tek Yönlülük (One-way)

Kriptografi çeşitli algoritmalar ve şifre yöntemleri kullanarak düz bir metni şifreli bir metne dönüştürerek istenilmeyen taraflar tarafından okunmasını veya anlaşılmasını engelleme tekniğidir. Herhangi bir metin bir teknikle şifrelenir ve karşı taraf bu tekniği bildiği için mesajı geri çevirebilir (encoding-decoding). Fark ettiğiniz üzere hem bir veri üzerinden şifreli veriye gidiş ve şifreli veri üzerinden de tekrar veriye dönüş var. Blockchain teknolojisine geldiğimizde ise olayların rengi değişiyor.

Hashlenmiş hiçbir veriye veya dökümana hash kodu üzerinden ulaşamamamız lazım.

Bu ne demek peki?

İnsan örneğimize dönecek olursak. Her insanın parmak izini elini kullanarak çıkarabiliriz. Fakat hiçbir insanın göz rengini, kas gücünü veya kişisel özelliklerini parmak izine bakarak çıkaramayız. Aynı mantığın dijital belgelerimizde de uygulanması gerekiyor. Her belgeden, dosyadan veya fotoğraftan bir hash kodu oluşturulabilir fakat hiçbir hash kodu kullanılarak bir belgenin, dosyanın veya fotoğrafın içeriğine ulaşılamaz.

2. Deterministik

Nereye giderseniz gidin parmak iziniz aynıdır. Bir turnikeye de bassanız parmağınızı bir güvenlik kuruluşunda kimlik doğrulama işlemi de yapsanız sizden çıkan parmak izi değişmez.

Dijital belgelerde de aynı şekilde aynı veri için her zaman aynı hash kodu oluşturulur. Bunu biraz daha anlamak için gelin aşağıdaki siteden bir örnek yapalım.

https://tools.superdatascience.com/blockchain/hash/

Siteye girdiğinizde data ve hash kısımları var. Data kısmına örnek olarak isminizi girebilirsiniz. Hash kısmında ise anında bir hash kodu oluşturulduğunu göreceksiniz. İsminizi silip başka verilerden başka hash kodları oluşturup biraz değişimi gözleyebilirsiniz. En sonunda tekrar isminizi yazdığınızda en baştaki hash kodunun aynısının geldiğini göreceksiniz. Yani aynı verinin farklı bir hash kodu oluşturma ihtimali yok.

3. Hızlı Hesaplamalar (Fast Computation)

Bahsettiğimiz algoritma sadece canımız isteyince kullandığımız bir algoritma değil. Saniyede tatmin edici düzeyde işler yapacak ve kodları üretecek bir sisteme ihtiyacımız var. Milyonlarca işlem aynı anda yapılıyor olabilir ve bu işlemlerin yavaş olması sistemlerin sektemesine ve hatta hacklenmesine sebep olabilir.Bu yüzden hash algoritmaları hızlı ve efektif olmalı.

4. Çığ Etkisi (The Avalanche Effect)

Herhangi bir dosyada en ufak bir değişiklik bile yapmış da olsak bu artık farklı bir dosyadır ve farklı bir hash koduna sahip olması gerekir. Bu durumda hash algoritmaları verideki en ufak bir değişiklikte bir fonksiyonu tetikliyor. Bu fonksiyon ise başka bir fonksiyonu ve aynı şekilde bu algoritma bir çığ etkisi oluşturarak tetiklenen fonksiyonlarla bambaşka bir hash kodu oluşturuyor. Yani, verimiz benzer olsa bile tamamen farklı bir hash kodu elde etmiş oluyoruz.

5. Çarpışmalara Karşı Dayanıklılık (Standing with Collisions)

İnsanlardaki parmak izinin aynı olabilme durumunun dijital verilerde de olabileceğinden bahsetmiştik. Fakat bu çok düşük bir ihtimal önceden de dediğimiz gibi.

Çarpışmalara yani kodların aynı olmasına dayanıklılıktan bahsederken aslında farklı bir şeyi kastediyoruz.

Diyelim ki bir siyah şapkalı hacker aynı hash koda sahip 2 belge elde etmeyi bir şekilde başardı. Bu çok büyük bir problem çünkü sahte oluşturduğu dosya ve sizin bir arazi tapunuz aynı hash koduna sahip olmuş olabilir. Bu durumda hackerın kendi oluşturduğu dosyaya tapu sahibi olarak kendisini yazması kaçınılmaz olabilir. Vizyonlu bir hackersa tabii ki ev tapusuyla uğraşmaz fakat biz örneğimizi bunun üzerinden devam ettirelim :)

Bu belgeyi denetleyen yetkili bir kişi bu dosyanın sahibinin siz değil de korsan olduğunu düşünebilir. İşte hash algoritması bu durumlarla mücadele edebilmelidir ve hash kodları yaratılırken yukarıdaki diğer özelliklerin çok verimli kullanılması gerekir.

SHA-256 yukarıda saydığımız özellikleri en iyi şekilde sağladığı bilinen algoritmalardan birisidir ve birçok alanda aktif olarak kullanılmaktadır. Blokzincir teknolojisi ise bu algoritmadan çok güçlü bir şekilde faydalanır. Her Blok (Genesis blok hariç) hem kendi verisinin hash koduna hem de kendisinden önceki bloğun hash koduna sahiptir. Hiç merak etmeyin, diğer yazılarımızda bu bahsettiklerimi çok daha iyi anlayacağız. Şu an sadece dokunuş yapıyoruz.

SHA-256 aynı zamanda Amerika Birleşik Devletleri Ulusal Güvenlik Ajansı (NSA) tarafından tasarlanan ve ilk olarak 2001'de yayınlanan bir dizi kriptografik hash işlevidir.

Yazımda SHA-256 teknolojisini farklı açılardan ve örneklendirerek açıklamaya çalıştım. Blokzincir yolculuğunda işinize yarayacağından ve ileride anlatacağım diğer konular için temel olacağından emin olabilirsiniz.

Bir sonraki yazımda görüşmek üzere..

Yazar : Yasin Kömür “ ysnkomur@gmail.com”

Editör : Yunus Şahin “yunushacettepetr@gmail.com”

--

--