Kriptografi ve Kripto paralar
Tüm para birimleri, sahtecilik ve hileyi önlemek adına, çeşitli güvenlik mekanizmalarını uygulamak ve arzı kontrol etmek için farklı yollara ihtiyaç duyarlar. İtibari para birimlerinde, merkez bankaları bu görevi üstlenir, para arzını kontrol eder ve sahteciliğe karşı güvenlik önlemleri alır (Örneğin, Türk lirasında kağıt paralarda ancak ışığa tutulduğunda görülebilen görseller gizlenmiştir). Ancak, bu güvenlik önlemleri parayı taklit etmeyi imkansız hale getirmez, yalnızca taklit edilmesi zor hale getirir. Burada da devreye insanları hile ve sahtecilik yapmaktan caydırıcı kanunlar devreye girer.
Kripto paralar da benzer şekilde, sistemlerinin insanlar tarafından oynanıp değiştirilmemesi için güvenlik sistemlerine ihtiyaç duyar. Tabi, itibari para birimlerinin aksine, kripto para birimlerinin güvenlik kurallarının tamamen teknolojik olarak ve merkezi bir otoriteye dayanmadan uygulanması gerekir. Bu güvenlik sistemi de kripto paralarda adından anlaşılacağı gibi büyük ölçüde kriptografi ile sağlanmaktadır.
Kriptografik Hash (Özet) Fonksiyonları
Blockchain teknolojisinin ve dağıtık sistemlerin çalışma prensiplerini ve alt yapı olarak bu teknolojileri kullanan kripto paraları daha iyi kavramak adına öncelikle bazı temel kriptografik terimleri anlamamız gerekmektedir. Bunlara da ilk olarak kriptografik hash fonksiyonlarını inceleyerek başlayabiliriz.
Hash fonksiyonları, çeşitli uzunluktaki verilerin matematiksel fonksiyonlarla sabit uzunlukta eşsiz bir değer oluşturan fonksiyonlardır ve genel olarak aşağıdaki beş özelliği gösterirler.
· Çıktıların boyutları sabittir. (Görseldeki 1,2,3 ve 4 numaralı örneklerdeki gibi çıktıların hepsi aynı boyuttadır.)
· Girdi değişmediği sürece aynı çıktıyı verir, yani deterministiktir. (1 ve 4 numaralı örneklerdeki gibi aynı girdiler girildiği zaman çıktıları da aynı olur.)
· Girdileri herhangi boyutta herhangi bir dizi olabilir. (3. örnekteki gibi anlamsız bir dizi veya Satoshi’nin “Bitcoin” yazısı gibi uzun bir metin de olabilir.)
· Girdilerde küçük bir değişiklik olsa bile çıktılar tamamen değişir. (1 ve 2 numaralı örneklerde yalnızca “m” harfi değişmesine rağmen çıktılar tamamen farklıdır.)
· Hızlı olarak gerçekleşirler.
Şekil 1 Hash fonksiyonlarının özellikleri
Bir hash fonksiyonunun kriptografik ölçekte güvenli olması için yukarıda bahsettiğimiz özelliklere ek olarak üç özelliğe daha sahip olması gerekir: Çakışma — dayanıklılığı, tersine işlem dayanıklılığı ve ikincil tersine işlem dayanıklılığı. Blok zincir sisteminin güvenli bir şekilde çalışmasında büyük önem taşıyan bu özellikleri ayrıntılarıyla inceleyelim.
1) Çakışma Dayanıklılığı (Colision — Resistance)
Birbirinden farklı iki girdinin hash değerlerinin aynı olması durumuna çakışma denir. Eğer bir hash fonksiyonunda hiç kimse çakışma bulamıyorsa bu hash fonksiyonu çakışmaya dayanıklı kabul edilir.
Şekil 2 Görselde, “Bit” ve “Qubit” girdileri hash fonksiyonuyla işlem gördükten sonra aynı çıktıyı vermişler, yani çakışma durumu gerçekleşmiştir.
Tabi hiç kimsenin çakışma bulamaması, çakışma olmayacağı anlamına gelmez. Çakışmalar herhangi bir hash fonksiyonu için her zaman var olacaktır, bunu da basit bir şekilde kanıtlayabiliriz. Hash fonksiyonunun girdileri herhangi boyutta herhangi bir dizi olabileceği için girdi kümesi sınırsızıdır, fakat çıktıların boyutları sabit olacağından çıktı kümesinin eleman sayısı sınırlıdır. Örneğin, 256-bit boyutunda çıktı veren bir hash fonksiyonu ele alalım, 2²⁵⁶ + 1 adet farklı girdi seçip, her bir girdinin hashlerini hesaplarsak, girdi kümesi eleman sayısı (2²⁵⁶ + 1 ) çıktı kümesinde (2²⁵⁶) daha büyük olduğundan en az bir çakışma gözlemleyebileceğizdir.
Şekil 3 Girdi sayısı çıktı sayısını aştığından, hash fonksiyonunun birden fazla girdiyi eşlediği en az bir çıktı olmalıdır. “Qubit” gidisi diğer girdilerin çıktılarından biriyle eşleşmek durumunda kalacaktır.
Her hash fonksiyonunun çakışma denetleme sistemleri vardır. Fakat, bu sistemler ile hash fonksiyonlarının çakışmaya dayanıklı olduğunu saptamak oldukça çok zaman alır. Mesela, 256-bit çıktı veren bir hash fonksiyonunun denetlemek için daha önceki örnekte belirttiğimiz gibi en kötü ihtimal ile 2²⁵⁶+1 girdinin hashinin hesaplanması, ortalama olarakta 2¹²⁸ girdinin hashinin hesaplanması gerekir. Bir bilgisayarın saniyede 10000 hash değeri hesapladığını düşünürsek, bu işlem bu bilgisayarın tek başına çalışmasıyla ortalama 1028 yıl sürer. Bu da oldukça fazla bir zaman demektir. Bu yüzden şu ana kadar da hiçbir fonksiyonun çakışmaya dayanıklı olduğu ispatlanamamıştır, ancak uzun çalışmaların ardından eski MD5 hash fonksiyonunda çakışmaların varlığı tespit edilmiştir (Ardından, kullanımdan kaldırılıp güncellendi. Şu anda yeni MD5’ta herhangi bir çakışma bulunamadı.) Kısacası, kriptografik hash fonksiyonlarında çakışmalar kaçınılmazdır, fakat bazı fonksiyonlar dayanıklı kabul edilecek kadar güçlüdür. Bu yüzden bu tür fonksiyonları çakışmaya dayanıklı kabul edip birçok alanda kullanıyoruz.
2) Tersine İşlem Dayanıklılığı (Pre-image Resistance)
Hash fonksiyonlarının kriptografik ölçekte güvenli olmasını sağlayan bir diğer özellik tersine işlem dayanıklılığıdır. Tersine işleme dayanıklı fonksiyonlar tek yönlü çalışırlar. Yani çıktıdan kaynak veriye (girdiye) geri dönüş yapılamaz.
Şekil 4 Çıktıdan kaynak veriyi saptayamayacağımızın görsel anlatımı.
Kaynak veriyi saptayamayız değil, saptamak zordur diye belirttik, çünkü girdi kümesindeki elemanların hash değerlerini hesaplayıp çıktı kümesindeki hash değerleriyle karşılaştırırsak, kaynak veriyi saptayabiliriz. Kriptografik hash fonksiyonlarında da kaynak veriyi saptama olasılığı ne kadar düşük olursa, (girdi kümesindeki eleman sayısı ne kadar fazla olursa) hash fonksiyonu da o kadar tersine işleme dayanıklıdır.
Tersine işlem 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.
3) İkincil Tersine İşlem Dayanıklılığı (Second Pre-image Resistance)
İkinci terine işlem dayanıklılığı, belirli bir mesajla aynı koda sahip alternatif bir mesajın bulunamaması özelliğidir. Ancak bir kişi halihazırda bilinen bir girdinin yarattığı bir çıktıyla aynı çıktıyı yaratan belirli bir girdi arayabilir. Aslında, bu işlem 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 tersine işleme de dayanıklıdır. 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.
Blockchain teknolojisindeki en önemli yapı taşlarından biri olan kriptografik hash fonksiyonlarının ne olduğunu öğrendiğimize göre blokchain’deki kulanım alanlarından bahsedebiliriz.
Blockchain, adı üstünde bloklardan ve zincirlerden oluşur. Blokların içerisinde, blok numarası, transferler (veya herhangi bir veri), nonce değeri ve önceki bloğa ait hash kodu vardır. Bütün bu bilgiler hash fonksiyonu aracılığıyla özetlenir ve bu özet bilgi (hash değeri) bir sonraki blokta yer alır. Her bloğun hash değerinin bir sonraki blokta yer alması sayesinde de zincir kavramı oluşur.
Şekil 5 Blokchaindeki zincir yapısının görsel anlatımı.
Zincir kavramıyla birlikte bloktaki veriler değiştirilemez hale gelir ve verilerin bütünlüğü korunur. Eğer herhangi bir bloktaki blok bilgisi (Bloktaki veri, nonce değeri vb.) değiştirilirse hash değeride değişecek ve bu geriye dönük değiştirme işlemi ağ düğümleri tarafından anlaşılacaktır.
Diğer bir kullanım alanı olan madenciliğe de ilgili bir diğer yazımda detaylı bir şekilde değineceğim.
Bir sonraki yazıda görüşmek üzere, hoşçakalın.
Kaynaklar:
- https://www.researchgate.net/profile/Geetha-Ganesan/publication/267422045_Cryptographic_Hash_Functions_A_Review/links/549cf6d10cf2b8037138c35c/Cryptographic-Hash-Functions-A-Review.pdf
- https://www.e-reading-lib.com/bookreader.php/141503/Preneel_-_Analysis_and_Design_of_Cryptographic_Hash_Functions.pdf