arlı olduğu bir PoW sistemi kullanır. Örneğin, Primecoin , istemcilerin belirli türlerde bilinmeyen asal sayıları bulmasını gerektirir, bunun da kullanılabileceği yan uygulamalar olabilir (bkz. Primecoin#Proof-of-work system).






Merkle ağacı

Kriptografi ve bilgisayar bilimlerinde, Hash ağacı ya da Merkle ağacında her yaprak düğümü veri blokunun özet değerini, her yaprak olmayan düğüm ise kendi alt düğümlerinin kriptografik özet değerlerini içerir. Merkle ağacı büyük veri yapılarının verimli ve güvenli bir şekilde doğrulanmasını sağlar. Merkle ağaçları, özet listeleri ve özet zincirlerinin genelleştirilmiş halidir.

Bir yaprak düğümün verilen Merkle ağacının bir parçası olduğunu göstermek için, ağaçtaki yaprak düğümü sayısının logaritması kadar bir takım hesaplama yapılması gerekmektedir; bu da yaprak düğümü sayısı kadar işlem gerektiren özet listeleriyle çelişir.

Merkle ağacı kavramı adını 1979 yılında Ralph Merkle'in patentiyle almıştır .

Merkle ağaçları bilgisayarlar arası transfer edilen yada bilgisayarlarda saklanan, işlenen her türlü verinin doğrulanmasında kullanılabilir. Kişiden kişiye (P2P) ağlarda alınan  veri bloklarının hasarsız, değiştirilmemiş ve hatta sahte olup olmadığını anlamamıza yardımcı olurlar. 

Merkle ağaçları kriptografik hash fonksiyonlarında kullanılmaktadır. Merkle ağaçları aynı zamanda IPFS, Btrfs ve ZFS dosya sistemlerinde (veri bozulmalarını saymak için), Dat protokolünde, Apache Wave protokolünde, Git ve Mercurial dağıtık versiyon kontrol sistemlerinde, Tahoe-LAFS yedek sisteminde, Zeronet , Bitcoin ve Ethereum P2P ağlarında, seritfika şeffaflığı sisteminde ve Apache Cassandra, Riak, Dynamo gibi birçok NoSql sisteminde kullanılmaktadır.

Satoshi Nakamoto Bitcoin uygulamaya geçirildiği noktada Merkle ağaçlarını aşırı boyutlu özet fonksiyonlarının Hızlı Merkle ağaçları kullanarak sıkıştırma aşamasında hafifletmiştir.

Merkle ağaçları bir dosya veya dosya grubu örneğinde olduğu gibi yaprakları veri bloklarının özeti olan bir özet ağacıdır. Ağaçta bulunan düğümler altlarındaki kendi ilgili çocuklarının özet değerleri alınmış halidir. Örneğin, resimde görüldüğü gibi özet değeri 0, altından barındırdığı özet değeri 0-0 ve özet değeri 0-1 birleşiminin özet değerinin hesaplanması sonucudur. Yani, + işaretinin birleştirme olduğu özet 0 = özet( özet 0-0 + özet 0-1) ifadesi ile anlatımı ifade edebiliriz.

Çoğu Merkle ağacı uygulaması ikilidir (her düğüm altındaki iki alt düğüm); ancak her düğümün altında çok daha fazla alt düğümde kullanılabilir.

Genellikle, özet değeri için SHA-2 gibi bir kriptografik özet fonksiyonu kullanılır. Merkle ağacı yalnızca istem dışı hasarlara karşı korunması gerekiyorsa, CRC’ler gibi daha az güvenli checksumlar kullanılabilir.

Bir Merkle ağacın tepesinde bir "üst özet" değeri (veya "kök özet değeri" veya "ana özet değeri") bulunur. Bir p2p ağında bir dosya indirmeden önce, çoğu durumda üst özet değeri indirilecek dosyalara iyi tavsiyelerde bulunduğu bilinen bir arkadaş veya bir İnternet sitesi gibi güvenilir bir kaynaktan edinilmiş olur. Üst özet değeri varsa, Merkle ağacı, p2p ağındaki herhangi bir eş gibi güvenilir olmayan herhangi bir kaynaktan alınabilir. Daha sonra alınan özet değeri ağacı güvenilir üst özet değeri ile karşılaştırılır ve özet değeri ağacı hasar görmüş veya sahte ise, program en iyi özet değeri ile eşleşene kadar başka bir kaynaktan başka bir Merkle ağacı denenecektir.

Özet değeri listesinden temel farkı, aynı anda her ağacın bir dalının indirilebilmesi ve anında kontrol edilebilmesidir. Örneğin, yukarıdaki resimde, "veri bloku 2 "bütünlüğü, ağaçta "özet "0-0 ve özet 1 içeriyorsa veri blokunun özet işlemi yapılarak ve sonucu "özet "0-0 ve ardından özet 1 ile tekrarlı birleşimiyle hemen doğrulanabilir. Benzer şekilde, ağaçta "özet 1-1" ve "özet 0" varsa, "veri bloku 3’"ün bütünlüğü doğrulanabilir. Bu, çok küçük veri bloklarında dosyaları ayıracak kadar verimli olduğu için bir avantaj olabilir. Böylece yalnızca küçük bloklar olması gerekir ve zarar görürlerse yeniden indirilirler. Özet değeri dosyası çok büyükse, böyle bir özet ağacı veya özet listesi oldukça büyük olur. Ancak bu bir ağaçsa, küçük bir dal hızlı bir şekilde indirilebilir, dalın bütünlüğü kontrol edilebilir ve daha sonra veri bloklarının indirilmesi başlatılabilir.

Merkle özet kökü (hash root), bir saldırganın aynı Merkle özet köküne sahip olan orijinal farklı bir belge oluşturduğu ikinci preimage saldırısı sağlayan ağaç derinliğini göstermez. Yukarıdaki örnekte, bir saldırgan, iki veri bloku içeren yeni bir belge oluşturabilir; ilk özet 0-0 + özet 0-1 ve ikincisi özet 1-0 + özet 1-1 şeklindedir.  
Sertifika Şeffaflığı Sisteminde basit bir düzeltme tanımlanmıştır: yaprak düğüm özet değerleri hesaplanırken, özet verilere bir 0x00 bayt ön eklenir ve iç düğüm özet değerleri hesaplanırken 0x01 eklenir. Merkle ağacının boyutunu kısıtlamak bazı resmi güvenlik belgelerinin bir ön şartıdır ve bazı kanıtları sıkılaştırmaya yardımcı olur. Bazı uygulamalar özet ağaç derinlik ön eklerinin özet değerini alır, öncesi kullanarak ağaç derinliğini sınırlar; böylece ayıklanan özet zincir yalnızca ön ek her adımda azalırsa ve yaprağa ulaşıldığında hala pozitif ise geçerli olarak tanımlanır.

Kaplan ağaç özeti (Tiger Tree Hash) yaygın olarak kullanılan bir özet ağacı şeklidir. Genellikle 1024 bayt veri bloku boyutları ve Kaplan özeti ile ikili özet ağaç (düğümün altında kendine ait iki düğüm)  yapısıyla kullanılır.

Kaplan ağaç özetleri, Gnutella, Gnutella2 , Direct Connect P2P dosya paylaşım protokollerinde ve Phex, BearShare, LimeWire, Shareaza, DC ++ ve Valknut gibi dosya paylaşım uygulamalarında kullanılmaktadır.

Base32: codice_1

URN: codice_2

magnet: codice_3







Merkle İmza Algoritması

Özet değeri tabanlı kriptografide (Hash based cryptography), özet değeri ağacı (Aynı zamanda Merkle ağacı da denmektedir) tabanlı bir dijital imza algoritmasıdır ve Lampart imza algoritması gibi tek kullanımlık imzalardır. Ralph Merkle tarafından 1970 sonu itibarıyla geliştirilmiştir ve RSA, Dijital İmza Algoritması gibi geleneksel dijital imzalara alternatif olmuştur.

Merkle imza algoritmasının avantajı kuantum bilgisayarı algoritmalarına karşı dirençli olduğuna inanılıyor olmasıdır.  Geleneksel açık anahtar algoritmaları olan RSA ve ElGamal gibi algoritmalar efektif kuantum bilgisayarlarının tasarlanabilir olmasıyla birlikte (Shor'un algoritmasına dayanarak) güvensiz hale geldi. Merkle imza algoritması sadece güvenilir bir özet değeri fonksiyonunun varlığına dayanmaktadır. Bu özelliği de Merkle imza algoritmasının çok esnek ve kuantum bilgisayarlarına dirençli olmasını sağlamaktadır. Merkle imzasının sonlu imza potansiyeli olan tek kullanımlık bir imza olduğu unutulmamalıdır; Moni Maor ve Moti Yung'un imza tabanlı tek yölü permütasyonlar üzerindeki çalışması ve fonksiyonlar (ve evrensel tek yönlü özet değeri fonskiyonunun icadı) , Merkle benzeri imzaların tam bir imza algoritmasına dönüşmesine yol açmıştır. 

Merkle imza algoritması tek açık anahtar olan pub ile sınırlı sayıda mesajın imzasında kullanılabilir. Muhtemel mesajların sayısı ikinin katı olmalıdır, dolayısıyla olası mesajların sayısını N = 2 ile gösterelim.

Ortak anahtar olan pub oluşturulması için ilk aşama N tane tek kullanımlık imza algoritmalarının  (Lamport imza algoritması gibi) özel/açık anahtar çifti (X,Y) üretilmelidir. Her  1<= I <= 2  için, ortak anahtarın özet değeri h = H(Y)  hesaplanır.
Bütün formula_1formula_2 yaprak özet değeri özyineli bir şekilde özet değerleri alınarak ikili ağaç formasyonunda Merkle ağacı oluşturulur.  formula_3 ifadesinde yükseklik için formula_4 ve sağ sol pozisyonu göstermek içinse formula_5. Buna istinaden,  formula_6 özet değerleri yaprakları temsil etmektedir. Her iç düğümlerin değeri, kendi alt 2 çocuğunun değerlerinin birleşiminin özet değerlerinin alınması ile belirlenir. Örneğin, formula_7 ve formula_8. Bu şekilde,  formula_2 yapraklı bir ağaçta formula_10 düğüm oluşturulmaktadır.

Merkle imza algoritmasının özel anahtarı bütün  (X,Y) çiftleridir. Algoritmanın en büyük problemlerinden birisi bu özel anahtar kümesinin boyutunun mesaj sayısıyla doğrusal oranda büyüyor olmasıdır.

Açık anahtar pub ağacın kökü olan =a  değeridir. Tek açık anahtar Y 'nin genele açılması güvenliği kırmayacaktır. Ancak, bunların kullanımı genel için bir ihtiyaç değildir ve boyutlarını da küçültmek adına gizli tutmak mantıklı olacaktır.

Merkle imza algoritması ile M mesajını imzalamak için  imzalayan bir (X,Y) anahtar çifti seçer, tek kullanımlık imza algoritması kullanarak imzalar ve ardından ek bilgileri ekleyerek aslında onun orijinal anahtar çiftlerinden biri olduğunu kanıtlar (bir sahtekar tarafından yeni yaratılanın yerine).

İlk olarak, imzalayıcı daha önce başka bir mesajı imzalamak için kullanılmamış (X,Y) çifti seçer ve tek kullanımlık imza algoritmasını mesajı imzalamak için kullanarak  sig' imzasını ve karşılık gelen Yi açık anahtarını elde eder. Mesaj alıcısına (X,Y)  çiftinin orijinal anahtar çiftlerinden biri olduğunu kanıtlamak için Merkle ağacının ara düğümlerini dahil ederek alıcının  h=a değerinin ağacın kökünde bulunan an,o açık anahtarını hesaplamak için kullanıldığını doğrulamasını sağlar .  a  değerinden kök değerine giden yolda n+1 düğüm bulunur ve bunların her birini A0...,An şeklinde ifade ederiz.  A = a = H(Y) yaprak değeri ve  A = a = pub ise kök değeri olmuş olur.

formula_11 düğümünün formula_12.Alıcının önceki verilmiş olanla bir sonraki düğüm formula_12 formula_12.Bu düğüme formula_15, böylece formula_16. Bu sebeple,formula_17formula_18formula_19 bir kimlik doğrulama yolu sağ taraftaki şekilde gösterilmektedir.

Bu düğümler auth,…,auth, Y ve tek kullanımlık imza olan sig’ birlikte Merkle imza algoritması kullanarak bir M imzası oluştururlar:

sig = (sig’ || Y || auth|| auth ||…|| auth)

Ayrıca unutulmamalıdır ki Lamport imza algoritması imza için kullanılırken , sig’ özel anahtar X'nin bir bölümünü içerir.

Alıcı açık anahtar pub, mesaj M, ve imza sig = (sig’ || Y || auth|