1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 049 : Merkle Tree

🧵 #100GündeSolidity 049 : Merkle Tree
Merkle Tree
0

Merkle Tree

Merhaba! Bu e-bülten #100GündeSolidity serisinin 49. konusu olan “Merkle Tree” hakkında olacak. Merkle Tree, özellikle blokzincir teknolojileri gibi veri bütünlüğü gerektiren sistemlerde kullanılan, verilerin güvenli bir şekilde saklanmasını sağlayan bir veri yapısıdır. Bu e-bültende, Merkle Tree‘nin ne olduğunu, nasıl çalıştığını ve neden önemli olduğunu anlatacağız. Ayrıca Merkle Tree’nin kullanım alanlarına da değineceğiz.

Kriptografi ve Güvenlik

Merkle Tree’nin anlaşılabilmesi için öncelikle kriptografi ve güvenlik kavramlarının biraz açıklanması gerekir.

Kriptografi, iletişimde kullanılan bilginin gizliliği, bütünlüğü ve kimlik doğruluğunu sağlamak için kullanılan teknikleri içeren bir bilim dalıdır. Kriptografi, verilerin çalınmasını, değiştirilmesini veya sahte verilerin kullanılmasını önleyerek, verilerin güvenli bir şekilde iletilmesini sağlar.

Güvenlik ise, bir sistemin korunması gereken varlıklarını (veri, donanım, yazılım, insanlar vb.) zararlı etkilere karşı koruma işlemidir. Güvenlik, gizlilik, bütünlük ve kullanılabilirlik gibi farklı özellikleri içerir. Güvenlik önlemleri, bir sistemin saldırılara veya hatalara karşı korunmasını sağlar.

Bu nedenle, kriptografi ve güvenlik teknikleri, verilerin güvenliğini sağlamak ve sistemleri korumak için hayati öneme sahiptir.

Hash Fonksiyonları

Hash fonksiyonları, kriptografi ve güvenlik alanında sıkça kullanılan bir matematiksel işlem yöntemidir. Hash fonksiyonları, bir veri kümesini (mesaj, dosya, şifre vb.) sabit uzunlukta bir dizeye dönüştürür. Bu işlem, veri bütünlüğünü sağlamak için sıkça kullanılır.

Hash fonksiyonları, tek yönlü bir işlem olduğu için, orijinal veriyi hash değerine dönüştürmek kolaydır. Ancak, hash değerinden orijinal veriyi elde etmek neredeyse imkansızdır. Bu nedenle, hash fonksiyonları, verilerin gizliliğini ve bütünlüğünü korumak için kullanılır.

Örneğin, blokzincir teknolojilerinde her bir blok, önceki bloğun hash değerini içerir. Bu sayede, bir blokun hash değerinde yapılan değişiklikler, zincirin geri kalanındaki tüm blokların hash değerlerini değiştirir ve böylece değişikliklerin tespit edilmesi kolaylaşır.

Merkle Tree, hash fonksiyonlarına dayanan bir veri yapısıdır ve verilerin bütünlüğünü sağlamak için sıkça kullanılır.

Merkle Tree Nedir?

Merkle Tree, verilerin bütünlüğünü kontrol etmek ve doğrulamak için kullanılan bir veri yapısıdır. Bu yapı, hash fonksiyonlarına dayanır ve verilerin hiyerarşik bir şekilde saklanmasına olanak tanır.

Merkle Tree, adını bilgisayar bilimleri alanında çalışmış olan Ralph Merkle’den almıştır. Bu yapı, blokzincir teknolojileri gibi veri bütünlüğü gerektiren sistemlerde sıkça kullanılır.

Merkle Tree, birçok veriyi hiyerarşik bir şekilde saklar. Her düğüm, altındaki düğümlerin hash değerlerinin birleştirilmesiyle elde edilir. En alt düzeydeki düğümler, tek veri parçalarını temsil ederken, en üst düzeydeki düğüm, tüm verilerin hash değerini temsil eder. Bu sayede, her veri parçası, tüm verilerin hash değerine bağlıdır ve değiştirilmesi durumunda diğer tüm verilerin hash değerleri de değişir.

Merkle Tree yapısı, birçok verinin doğrulanması için kullanılır. Örneğin, bir blokzincirindeki blokların hash değerleri, içerdikleri tüm verilerin hash değerlerinin Merkle Tree yapısıyla hesaplanmasıyla oluşturulur. Bu sayede, bir bloktaki verilerde herhangi bir değişiklik yapıldığında, bloğun hash değeri değişir ve böylece değişiklikler tespit edilir.

Merkle Tree Yapısı

Merkle Tree yapısı, birçok verinin hiyerarşik bir şekilde saklandığı bir ağaç yapısıdır. Bu yapının en üst düzeyinde, tüm verilerin hash değeri bulunur. Bu hash değeri, altındaki düğümlerin hash değerlerinin birleştirilmesiyle elde edilir.

Merkle Tree yapısının altındaki düzeylerinde, verilerin hash değerleri yer alır. Bu hash değerleri, altındaki veri parçalarının hash değerlerinin birleştirilmesiyle hesaplanır. Her bir düğüm, altındaki iki düğümün hash değerlerinin birleştirilmesiyle hesaplanır. Eğer altındaki düğümler tek sayıda ise, son düğüm kendisi ile kendi hash değerinin birleştirilmesiyle oluşturulur.

Örneğin, 4 veri parçasının Merkle Tree yapısı şu şekilde olabilir:

    Hash(ABCD)
        / \
  Hash(AB) Hash(CD)
    / \     / \
Hash(A) Hash(B) Hash(C) Hash(D)

Bu yapıda, en üst düzeydeki düğüm, ABCD verilerinin hash değerini temsil eder. Alt düzeylerdeki düğümler ise, veri parçalarının hash değerlerini temsil eder.

Merkle Tree yapısı, verilerin bütünlüğünün doğrulanması için kullanılır. Örneğin, bir blokzincirindeki blokların hash değerleri, içerdikleri tüm verilerin hash değerlerinin Merkle Tree yapısıyla hesaplanmasıyla oluşturulur. Bu sayede, bir bloktaki verilerde herhangi bir değişiklik yapıldığında, bloğun hash değeri değişir ve böylece değişiklikler tespit edilir.

Merkle Proof

Merkle Proof, bir veri parçasının Merkle Tree yapısındaki konumunu doğrulamak için kullanılan bir yöntemdir. Bu yöntem, bir veri parçasının Merkle Tree yapısındaki konumunu ispatlamak için kullanılır.

Merkle Proof, birçok verinin saklandığı bir Merkle Tree yapısındaki veri parçasının doğruluğunu ispatlamak için kullanılır. Bu ispatlama işlemi, veri parçasının Merkle Tree yapısındaki konumundan başlar ve en üst düzeydeki hash değerine kadar devam eder. Bu işlem sırasında, veri parçasının konumunu ispatlamak için gerekli olan hash değerleri toplanır ve bu hash değerleri kullanılarak Merkle Proof oluşturulur.

Örneğin, bir blokzincirindeki bir blokta bulunan bir işlemi doğrulamak istediğimizi varsayalım. Bu işlem, Merkle Tree yapısındaki bir düğümde saklanıyor. Merkle Proof oluşturmak için, bu işlemle ilgili tüm hash değerlerini toplamamız gerekiyor. Bu hash değerleri, veri parçasının Merkle Tree yapısındaki konumunu ispatlamak için kullanılır.

Merkle Proof, veri parçasının doğruluğunu ispatlamak için kullanıldığı gibi, aynı zamanda veri parçasının Merkle Tree yapısından çıkarılması için de kullanılabilir. Örneğin, bir blokzincirinden bir işlemi geri almak istediğimizi varsayalım. Bu işlemi Merkle Proof kullanarak Merkle Tree yapısından çıkarmamız mümkündür.

Merkle Proof, veri bütünlüğünü sağlamak ve doğruluğunu ispatlamak için kullanılan önemli bir kriptografik araçtır.

Merkle Tree Kullanım Alanları

Merkle Tree yapısı, veri bütünlüğünü sağlamak ve doğruluğunu ispatlamak için kullanılan birçok alanda kullanılır. Bazı Merkle Tree kullanım alanları şunlardır:

  1. Blokzincirleri: Blokzincirleri, birbirleriyle bağlantılı blokların oluşturduğu bir veri yapısıdır. Her blok, içerdiği işlemlerin hash değerlerini içerir ve bu hash değerleri bir Merkle Tree yapısıyla hesaplanır. Bu sayede, bloklardaki herhangi bir değişiklik tespit edilerek blokzinciri bütünlüğü korunur.
  2. P2P Ağları: P2P (Peer-to-Peer) ağları, dağıtık bir ağ yapısıdır. Bu ağlarda, birbirleriyle iletişim kuran düğümler arasındaki veri bütünlüğü önemlidir. Merkle Tree yapısı, bu veri bütünlüğünü sağlamak için kullanılabilir.
  3. MerkleProof Akıllı Sözleşmesi AnaliziVeritabanları: Veritabanları, büyük miktarda veriyi saklamak için kullanılır. Verilerin doğruluğunu ve bütünlüğünü sağlamak için Merkle Tree yapısı kullanılabilir.
  4. Dosya Depolama Sistemleri: Dosya depolama sistemleri, büyük dosyaları saklamak için kullanılır. Bu dosyaların doğruluğunu ve bütünlüğünü sağlamak için Merkle Tree yapısı kullanılabilir.
  5. Sertifikasyon Otoriteleri: Sertifikasyon otoriteleri, dijital sertifikaları oluşturmak için kullanılır. Bu sertifikaların doğruluğunu ve bütünlüğünü sağlamak için Merkle Tree yapısı kullanılabilir.
  6. Veri Yedekleme Sistemleri: Veri yedekleme sistemleri, verilerin kaybını önlemek için kullanılır. Bu verilerin doğruluğunu ve bütünlüğünü sağlamak için Merkle Tree yapısı kullanılabilir.

Merkle Tree yapısı, veri bütünlüğünü ve doğruluğunu sağlamak için birçok alanda kullanılır ve kriptografi alanında önemli bir yer tutar.

MerkleProof Akıllı Sözleşmesi Analizi

Bu akıllı sözleşme, Merkle Tree veri yapısını kullanarak veri bütünlüğü doğrulamasını gerçekleştirmek için tasarlanmıştır. MerkleProof adlı bir sözleşme ve TestMerkleProof adlı bir sözleşmeden oluşur. TestMerkleProof, MerkleProof sözleşmesini miras alır.

MerkleProof sözleşmesinde, verify fonksiyonu, proof (kanıt), root (kök), leaf (yaprak) ve index (dizin) değişkenlerini alır. Proof, doğrulama sürecinde kullanılan tüm düğümleri içeren bir diziye karşılık gelir. Root, ağaçtaki kök düğümüdür ve bütünlüğün doğrulanacağı noktayı temsil eder. Leaf, doğrulanacak verinin kendisini temsil eder. Index, verinin ağaçtaki konumunu belirtir.

Fonksiyon içinde, bir döngü kullanarak, tüm kanıtı kullanarak leaf ile kök düğümünü karşılaştırır. Her adımda, ağaçtaki yukarı çıkış yolu boyunca hareket eder ve önceki düğümü günceller. Index değişkeni, her adımda 2’ye bölünür ve önceki düğüme geçmek için kullanılır. Fonksiyon, sonunda kök düğümüne eşit olup olmadığını kontrol eder ve doğruluğunu döndürür.

TestMerkleProof sözleşmesi, bir dizi işlemi (transactions) içerir ve bunların hash’lerini bir dizi içinde depolar. Ardından, hash’ler, merkezi bir ağaçtan geçirilerek Merkle Tree yapısını oluşturmak için kullanılır. Sözleşme ayrıca, veri doğrulama işlemini test etmek için birkaç değişken içerir.

Fonksiyonlar arasında getRoot, ağacın kökünü döndürür ve verify, sözleşmenin asıl amacını gerçekleştirir. TestMerkleProof sözleşmesi, örnek olarak 3. yaprağı (leaf), 2. dizini (index) ve kanıtı (proof) alarak doğrulama işlemini gerçekleştirir.

Bu sözleşme, blok zinciri projelerindeki veri doğrulama işlemlerinde kullanılabilir ve özellikle de veri entegrasyonunda, veri depolama işlemlerinde ve kimlik doğrulamada yararlı olabilir.

Sonuç ve Özet

Bu e-bültenimizde Merkle Tree yapısını ve Merkle Proof mekanizmasını inceledik. Merkle Tree yapısının veri bütünlüğü ve güvenliği sağlamak için kullanıldığı ve Merkle Proof’un bu yapıyı doğrulama işlemi için kullanıldığı görüldü. Ayrıca örnek bir Solidity akıllı sözleşmesi de incelenerek Merkle Proof mekanizmasının Solidity’de nasıl uygulanabileceği öğrenildi. Solidity kodlarının detaylı analiziyle, Merkle Tree yapısının nasıl uygulanacağı ve kullanılacağı hakkında temel bir fikir edinmiş olduk.

Kaynakça

  1. Merkle, R. C. (1987). A digital signature based on a conventional encryption function. Advances in Cryptology—CRYPTO’87, 369-378.
  2. Nakamoto, S. (2008). Bitcoin: A peer-to-peer electronic cash system.
  3. Buterin, V. (2014). A Next-Generation Smart Contract and Decentralized Application Platform. Ethereum white paper, 1-32.
  4. Brown, R. (2021). Mastering Ethereum: Building Smart Contracts and DApps. O’Reilly Media, Inc.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili
İlginizi Çekebilir

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir