Ana sayfa
Makaleler
Sıfır Bilgi İspatı ile Kriptonun Şeffaflığını Artırma

Sıfır Bilgi İspatı ile Kriptonun Şeffaflığını Artırma

Orta Seviye
Yayınlanma: Feb 10, 2023Güncellenme: Jan 5, 2024
10m

Kısa Özet

Sıfır bilgi ispatı, bir tarafın (doğrulayıcı) başka bir taraf (ispatlayan) tarafından verilen bir ifadenin geçerliliğini, ifadenin içeriği hakkında herhangi bir bilgi olmadan belirlemesine imkan tanır. Örneğin Binance, bireysel kullanıcıların bakiyelerini paylaşmadan bu bakiyelerin tamamının rezervlerle desteklendiğini ispat etmek istiyor olabilir.

Binance bunun için dahili verilerini tahrife karşı koruyan bir Merkle ağacı kullanarak bir "Rezerv İspatı" oluşturulabilir. Bu durumda dahili veriler, borsanın kullanıcılara karşı yükümlülüğünü temsil eden toplam net müşteri bakiyesini içerecektir. Daha sonra bu ispat, kullanıcıların diğer bakiyeleri bilmek zorunda kalmadan kendi bakiyelerinin toplam net kullanıcı varlığı bakiyesinde yer aldığını doğrulamasına imkan tanıyan bir zk-SNARK (sıfır bilgi ispatı protokolü) ile birleştirilebilir.

Giriş

Piyasada yaşanan olayların ışığında, emanet altında tutulan kripto varlıkların güvenliği çok önemli bir konu haline gelmiştir. Blockchain kullanıcıları, şeffaflığa ve açıklığa büyük bir önem verir, fakat aynı zamanda gizliliği ve mahremiyeti de destekler. Bu da emanetçilerin tuttukları fonların rezervini ispat ederken bir ikilemle karşı karşıya kalmalarına neden olur. Çoğu zaman şeffaflık, güven ve veri gizliliği arasında bir denge kurulması gerekir.

Fakat aslında, bu üç unsurun herhangi birinden feragat etmek şart değildir. zk-SNARK'lar gibi sıfır bilgi ispatı protokollerinin Merkle ağaçlarıyla birleştirilmesi, tüm taraflar için etkili bir çözüm sunabilir.

Sıfır Bilgi İspatı Nedir?

Sıfır bilgi ispatı, bir tarafın (doğrulayıcı) başka bir taraf (ispatlayan) tarafından verilen bir ifadenin geçerliliğini, ifadenin içeriği hakkında herhangi bir bilgi olmadan belirlemesine imkan tanır. Bir örnek üzerinden ilerleyelim.

Şifresini yalnızca sizin bildiğiniz kilitli bir kasanız olduğunu varsayalım. Bu örnekteki kasanın kurcalanması, kırılması veya şifreyi bilmenin dışında herhangi bir yolla açılması mümkün değil. Bu bilginin doğruluğu kesin ve deneyde size eşlik eden arkadaşınız tarafından da biliniyor.

Şifreyi bildiğinizi arkadaşınıza söylüyorsunuz, fakat bu şifreyi paylaşmak veya kasayı arkadaşınızın önünde açmak istemiyorsunuz. Kasanın üzerinde arkadaşınızın yazdığı bir notu içeriye atabileceği bir delik var. Bunun bir sıfır bilgi ispatı olabilmesi için arkadaşınızın verilen bilgi dışında süreç hakkında başka hiçbir bir bilgiye sahip olmaması gerekiyor.

Şifreyi bildiğinizi arkadaşınıza kanıtlamak için kasayı açabilir, notta ne yazdığını ona söyleyebilir ve kasayı tekrar kapatabilirsiniz. Fakat sürecin hiçbir noktasında şifreyi paylaşmazsınız.

Daha kapsamlı bir örnek için Sıfır Bilgi İspatı Nedir ve Blockchaini Nasıl Etkiler? makalemizi okuyabilirsiniz.

Sıfır Bilgi İspatları Neden Kullanılır?

Sıfır bilgi ispatları, hassas bilgi veya ayrıntıları paylaşmak zorunda kalmadan bir şeyi ispat etmek için kullanılabilir. Örneğin, uygunsuz şekilde kullanılabilecek finansal veya kişisel bilgilerinizi paylaşmak istemeyebilirsiniz.

Kriptoda, bir özel anahtarınız olduğunu bu anahtarı paylaşmadan veya herhangi bir yere dijital bir imza atmadan kanıtlayabilirsiniz. Bir kripto para borsası bireysel hesap bakiyeleri de dahil olmak üzere kullanıcıları hakkındaki gizli bilgileri paylaşmadan rezervlerinin durumunu kanıtlamak istiyor olabilir. 

Bu ve diğer birçok örnekte sıfır bilgi ispatı, girdi olarak bir veriyi alan ve çıktı olarak "doğru" veya "yanlış" yanıtını veren algoritmalar kullanır. 

Sıfır Bilgi İspatlarının Teknik Terimlerle Tanımı

Teknik anlamda sıfır bilgi ispatı, belirli bir yapıyı belirli kriterlere göre takip eder. İspatlayan ve doğrulayıcı rollerine yukarıda değinmiştik, fakat bir sıfır bilgi ispatının yerine getirmesi gereken üç kriter vardır:

  1. Eksiksizlik. İfade doğruysa, doğrulayıcı başka herhangi bir bilgiye veya doğrulamaya ihtiyaç duymadan yalnızca sunulan ispatla ikna olmalıdır.

  2. Sağlamlık. İfade yanlışsa, sunulan ispat doğrulayıcıyı ifadenin doğru olduğuna ikna etmemelidir.

  3. Sıfır bilgi. İfade doğruysa, doğrulayıcı ifadenin doğru olduğu dışında herhangi bir bilgiye ulaşamamalıdır.

zk-SNARK Nedir?

zk-SNARK (Sıfır Bilgi Özlü Etkileşimli Olmayan Bilgi Argümanı), yukarıda belirttiğimiz sıfır bilgi ilkelerini uygulayan bir ispat protokolüdür. Bir zk-SNARK ile orijinal hash değerini (makalenin ilerleyen bölümlerinde daha ayrıntılı değineceğiz) bildiğinizi, bu değerin ne olduğunu açıklamadan ispatlayabilirsiniz. İşlemle ilgili tam tutar, değer veya adresler hakkında herhangi bir bilgi vermeden bir işlemin geçerliliğini ispatlamanız da mümkündür.

zk-SNARK'lar, blockchain ve kripto para dünyasında yaygın olarak kullanılır ve tartışılır. Fakat bilgileri güvence altına almak için basit bir herkese açık ve özel anahtar çifti yöntemi kullanılabilecekken neden birisinin zk-SNARK'larla uğraşmayı tercih edeceğini merak ediyor olabilirsiniz. Bunun nedeni, zk-SNARK'ların kullanılmaması durumunda hiçbir eksi bakiyenin dahil edilmediğinden ve Merkle ağacının toplamından emin olmak için matematiksel ispatın uygulanamayacak olmasıdır. 

Bir borsanın rezervleri örneğinde, amaç hiçbir hesabın tanımlayıcılarını ve bakiye bilgilerini açıkça paylaşmadan müşterilerin bakiyelerinin 1'e 1 oranında desteklendiğini kanıtlamaktır. Buna ek olarak, zk-SNARK teknolojisi verilerin tahrif edilmesi ihtimalini daha da düşürür.

Merkle ağacı nedir?

Binance kullanıcılarının hesaplarının fon toplamını sunabilmek için büyük bir veri setiyle çalışmak gerekir. Bu büyük miktardaki veriyi kriptografik olarak sunmanın yollarından biri Merkle ağacı kullanmaktır. Bir Merkle ağacında çok miktarda bilgi verimli bir şekilde depolanabilir ve kriptografik doğası nedeniyle ağacın bütünlüğü kolayca doğrulanabilir.

Hash fonksiyonları

Merkle ağacı, bir girdiyi kısa ve öz bir şekilde kodlamak için hash fonksiyonlarından faydalanır. Kısaca ifade edecek olursak hashing, farklı büyüklükteki girdilerden sabit büyüklükte bir çıktı yaratma sürecidir. Diğer bir deyişle, herhangi bir uzunluktaki bir girdi bir algoritma aracılığıyla hash edildiğinde, şifrelenmiş sabit uzunlukta bir çıktı üretilir.

Girdi aynı kaldığı sürece çıktı da aynı olacaktır. Bu da çok büyük miktarda işlem verisinin hash edilerek yönetilebilir büyüklükte bir çıktı haline getirilebileceği anlamına gelir. Girdideki herhangi bir bilgi değiştirilirse, tamamen farklı bir çıktı ortaya çıkar.

Örneğin, 100 kitabın içeriğini alıp bunları bir SHA-256 hash fonksiyonunda girdi olarak kullanabiliriz. Fonksiyon şuna benzer bir çıktı sunacaktır:

801a9be154c78caa032a37b4a4f0747f1e1addb397b64fa8581d749d704c12ea

100 kitaptan oluşan bu girdideki tek bir karakteri bile değiştirirsek, hash aşağıda görebileceğiniz gibi tamamen farklı olacaktır:

abc5d230121d93a93a25bf7cf54ab71e8617114ccb57385a87ff12872bfda410

Bu, hash fonksiyonlarının önemli bir özelliğidir, çünkü verilerin doğruluğunun kolayca teyit edilmesine imkan tanır. Herhangi biri aynı 100 kitabı SHA-256 algoritmasını kullanarak tekrar hash ederse, çıktı olarak tamamen aynı hash'i alacaktır. Çıktı farklıysa, girdinin değiştirildiğini kesin olarak söylemek mümkündür. Bu da girdiler arasındaki farkları tek tek veya manuel olarak kontrol etmek gibi yoğun iş gücü gerektiren bir sürece gerek olmadığı anlamına gelir.

Kripto para dünyasında Merkle ağaçları

İşlem verileri bir blockchain'de depolanırken, yeni her bir işlem bir hash fonksiyonu aracılığıyla gönderilir ve fonksiyon da benzersiz hash değerleri üretir. Hash edilmiş çıktılarını almak için teker teker hash ettiğimiz sekiz işlem (A-H) olduğunu varsayalım. Bunlara Merkle yaprak düğümleri adı verilir. Aşağıdaki resimde, her bir harfin benzersiz hash değerini görebilirsiniz: A için hA, B için hB, C için hC vb.

Daha sonra hash edilmiş çıktıları alır, birleştirir, tekrar hash eder ve yeni bir hash çıktısı alırız. Örneğin, hA ve hB'nin hash'leri birlikte hash edilir ve bize Merkle dalı olarak bilinen yeni hAB hash çıktısını verir. Oluşturulan tüm yeni çıktıların kullanılan hash fonksiyonuna bağlı olarak sabit bir uzunluk ve büyüklükte olduğunu belirtmek de önemlidir.

Artık elimizde, iki işlemin (A ve B) tek bir hash (hAB) içinde birleştirilmiş verisi vardır. A veya B'deki herhangi bir bilgiyi değiştirir ve işlemi tekrarlarsak, hash çıktımız hAB tamamen farklı olacaktır.

Süreç, yeni hash çiftlerinin tekrar hash edilmek üzere birleştirilmesiyle devam eder (aşağıdaki resimde görebilirsiniz). Benzersiz bir hABCD hash'i elde etmek için hAB'yi hCD ile hash eder ve aynı şeyi hEFGH'yi elde etmek için hEF ve hGH ile tekrarlarız. Sonunda elimize önceki tüm işlemlerin hash'lerinin çıktılarını temsil eden tek bir hash değeri geçer. Diğer bir deyişle, hash edilmiş hABCDEFGH çıktısı kendisinden önce gelen tüm bilgileri temsil eder.

Yukarıdaki grafiğe Merkle ağacı adı verilir ve hABCDEFGH hash çıktısı da Merkle köküdür. Bir bloktaki tüm işlem verilerini kısa ve öz bir şekilde kriptografik olarak özetledikleri için blok başlıklarında Merkle kökleri kullanılır. Merkle kökleri sayesinde, bloktaki herhangi bir verinin tahrif edilip edilmediğini veya değiştirilip değiştirilmediğini de hızlı bir şekilde doğrulayabiliriz.

Merkle Ağaçlarının Sınırlamaları

CEX rezervleri örneğimize geri dönelim. Tüm müşterilerinin varlıklarının 1'e 1 desteklendiğini kanıtlamak isteyen bir CEX, müşterilerin kullanıcı kimliklerini net varlık bakiyeleriyle (varlık ve borçları mahsup ederek) token seviyesinde hash eden bir Merkle ağacı oluşturur. Merkle kökü yayınlandıktan (ve sunulan Merkle kökü üzerinde mülkiyeti ispatlamak için imzalandıktan) sonra bireysel bir kullanıcının, tüm girdilere erişmeden Merkle ağacının geçerli olup olmadığını kontrol etmesinin hiçbir yolu yoktur.

Borsa bazı girdileri dahil etmeyi atlamış olabilir. Toplam yükümlülüğünü değiştirmek için eksi bakiyelere sahip sahte hesaplar da eklemiş olabilir. Örneğin, müşterilerin varlıklarının toplamı 1.000.000 USD iken -500.000 USD bakiyeye sahip sahte bir hesap eklenebilir. Bu da yalnızca 500.000 USD'lik bir rezerv hedefi yaratacaktır.

Kullanıcılar bir blokta yer alan tüm işlemleri bir blockchain gezgini ile görebilir ve burada bir blokun Merkle kökü ile rezerv ispatı farklı olacaktır. Fakat CEX, güvenlik ve veri gizliliği nedenlerinden ötürü tüm hesapların bakiyelerini paylaşmak istemeyecek ve müşteriler de hesap bakiyelerinin herkese açık hale gelmesinden memnun olmayacaktır. Bu durumda CEX, diğer kullanıcı bakiyelerini görünür hale getirmeden kullanıcı bakiyelerinin toplamının doğru olduğunu ispatlayamaz.

Borsaların tercih edebileceği bir çözüm, güvenilir bir üçüncü taraf denetçi kullanmaktır. Denetçi, sunulan Merkle kökünün geçerliliğini nihai olarak onaylamadan önce bireysel hesapları ve rezervleri kontrol edebilir. Fakat bu yöntem, kullanıcıların denetçiye ve denetimde kullanılan verilere güvenmesini gerektirir. Oysa veriye güvendiğinizde, üçüncü bir tarafa güvenmenize gerek kalmaz.

zk-SNARK'ların Merkle Ağaçlarıyla Birleştirilmesi

Yukarıdaki sorun, zk-SNARK'ların kullanılabileceği harika bir örnektir. Amaç rezervlerin kullanıcı bakiyelerinin tamamını karşıladığını ve tahrif edilmediğini kanıtlamaktır. Fakat bunu, gizlilik ve güvenlik nedenlerinden ötürü kullanıcı bakiyelerinin ve rezervlerin tamamını doğrulayıcıya göstermeden yapmaktır. 

Bir kripto borsası, zk-SNARK kullanarak tüm Merkle ağacı yaprak düğümlerinin bakiye setlerinin (yani kullanıcı hesap bakiyelerinin) borsanın himayesindeki toplam kullanıcı varlık bakiyesine dahil edildiğini kanıtlayabilir. Kullanıcılar da kendi yaprak düğümlerinin sürece dahil edildiğini kolayca doğrulayabilir. zk-SNARK, toplam net varlık bakiyesi ekside olan kullanıcıların, oluşturulmuş hiçbir Merkle ağacına dahil edilmediğini de garanti altına alır. Eksi bakiyelerin dahil edilmesi, tüm krediler aşırı teminatlandırılmış olduğundan verilerin tahrif edildiği anlamına gelir. Ayrıca, tüm Binance müşterilerinin elindeki tüm varlıkların toplam net bakiyesinin bir listesi olan Binance'in küresel durumunun hesaplaması da kullanılır.

Binance'in durumu nasıl ele aldığından bahsedelim. Binance, öncelikle kanıtlamak istediği hesaplamanın koşullarını belirler ve bunları programlanabilir bir devre olarak tanımlar. Binance, modelinde aşağıdaki üç koşulu kullanır. 

Her bir kullanıcının bakiye seti (Merkle ağacı yaprak düğümü) için devremiz şunları garanti altına alır:

  1. Bir kullanıcının varlık bakiyeleri, Binance'teki toplam net kullanıcı bakiyesi hesaplanmasına dahil edilmiştir.

  2. Kullanıcının toplam net bakiyesi sıfırdan büyük veya sıfıra eşittir.

  3. Merkle ağaç kökündeki değişiklik, ancak bir kullanıcının bilgilerinin yaprak düğüm hash'ine güncellenmesinin ardından geçerlidir (yani tahrif edilmiş bilgiler kullanılmaz).

Daha sonra Binance, tanımlanan devreye dayanarak Merkle ağacının yapısı için bir zk-SNARK ispatı oluşturabilir. Bu da borsanın kullanıcı kimlik ve bakiyelerini hash etmek için ağır bir hesaplama yaparken aynı zamanda ispatın koşullarını da yerine getirmesini gerektirir.

Bir doğrulayıcı, hesaplamanın tüm koşullara uygun olarak yapıldığından emin olmak için ispatı ve herkese açık olarak paylaşılan açık kaynak kodunu inceler. Doğrulama hesaplaması, ispatlama için harcanan zamana kıyasla son derece kısa sürede yapılır.

Borsa, paylaştığı tüm Rezerv İspatlarında şunları yayınlar:

1. Her bir kullanıcı için Merkle ispatı.

2. Tüm kullanıcılar için devrenin zk-SNARK ispatı ve herkese açık girdisi (her bir varlık için toplam net bakiyesi listesinin bir hash'i ve Merkle kökü).

İsteyenler Merkle ispatını doğrulayarak kendi bakiyelerinin Merkle ağacı köküne dahil edildiğinden emin olabilir. Merkle ağacının yapısının devrede tanımlanan koşulları yerine getirdiğinden emin olmak için zk-SNARK ispatını da doğrulayabilirler. zk-SNARK çözümü ve performansı hakkında daha fazla bilgi için zk-SNARK'lar Binance'in Rezerv İspat Sistemini Nasıl Daha İyi Hale Getiriyor? blog makalemizi okuyabilirsiniz.

Son Söz

zk-SNARK'lar, aynı anda hem veri bütünlüğünü hem de gizliliği garanti altına almak için gereken teknolojiyi sunar. Bu teknolojinin rezervleri ispatlamak ve CEX'in şeffaflığını artırmak için uygulanıyor olması, blockchain sektörüne güven oluşturmaya yardımcı olacaktır. Birçok kişinin uzun süredir beklediği bu gelişme CEX'ler için çok önemli bir zamanda ortaya çıkmıştır.

Henüz zk-SNARK'ımızın ilk versiyonu kullanıyoruz ve sistemi iyileştirmeye devam edebilmek için topluluktan gelecek geri bildirimleri dört gözle bekliyoruz.

Ek Okumalar