ZKP(Zero Knowledge Proof) nedir? Blockchain Ağlarında nasıl kullanılır? Hyperledger Fabric içerisinde ZKP Kullanımı…
ZKP( Zero Knowledge Proof), bilgisayar bilimlerinde çokca adı geçen önemli bir konu. Blockchain teknolojisine ilgi duyan arkadaşların da karşısına son zamanlarda sıkça çıkıyor olsa gerek. Kısaca ZKP nedir ne işe yarar ve Blockchain çözümlerinde nasıl kullanılıyor bundan bahsedeceğim.
Basit bir tanım
Kısaca ZKP, “Bildiğiniz bilgiyi bir başkasına , bilgiyi ona vermeden nasıl ispat edersiniz? sorusuna cevap veren bir algoritma. Aslında ilk olarak 1980 yılında MIT araştırmacıları Shafi Goldwasser, Silvio Micali and Charles Rackoff tarafından tartışılmış ve üzerinde durulmuştur. Bu araştırmacılar, “İnteraktif Kanıtlama Sistemleri” üzerinde çalışmalar yürütürken, Prover olarak adlandırılan bir birinci taraf ile Verifier denen ve mesajın doğruluğunu onaylayan ikincil taraf arasındaki ilişkiyi konu edinen teorik çalışmalar yapmışlardır. Daha öncede bir bilginin doğruluğunu kanıtlamak üzerine teorik çalışmalar yürütülmüştür fakat Goldwasser ve arkadaşlarını diğerlerinden ayıran şey şu soruyu sormak olmuştur.
“What happens if you don’t trust the Verifier? “
“Bilginin doğruluğunu onaylayan(Verifier) taraf güvenilir değil ise ne olur?”
Bu blockchain sistemleri için neden önemli ve nasıl kullanılıyor?
“Bildiğiniz bilgiyi bir başkasına , bilgiyi ona vermeden nasıl ispat edersiniz?
İşte bu soruya verilecek cevap ve yaratılacak çözüm günümüzde özellikle iş süreçlerinin “Blockchain Ağları”na aktarılması ve kurumların gizli bilgilerinin tam olarak korunması konusunda önemli bir yer tutuyor. Zero Knowledge Proof, Blockchain ağına dahil olan tarafların işlem ayrıntılarının hiçbirini görmeden onlara onay vermesini sağladığı için ekstra bir güvenlik sağlıyor.
Aşağıdaki grafik gerçekten ZKP’yi çok iyi açıklıyor. Bunu basit bir örnekle açıklamak gerekirse.
Bir tünelin ortasında tünelin tamamını kapatan ve diğer tarafa geçmeye izin vermeyen büyük bir kapı düşünün. Siz tünelin diğer tarafındasınız, arkadaşınız ise öteki tarafta. Arkadaşınız kapının arkasına geldiğinde diğer tarafa geçmesinin tek bir yolu var. O da elindeki şifreyle kapıyı açmak. Eğer arkadaşınız şifreyi girip kapıyı açarsa size doğru geldiğini görürsünüz ve onun şifreyi bildiğini anlarsınız bunun için arkadaşınızın girdiği şifrenin içeriğini bilmenize gerek yoktur.
Hyperledger Fabric Ağlarında ZKP(Zero Knowledger Proof) Kullanımı
Hyperledger Fabric son sürümlerinde yerini alan ZKP çözümleri iki şekilde karşımıza çıkıyor.
1- Anonymous client authentication with Identity Mixer
Identity Mixer, Hyperledger Fabric 1.2 sürümü ile beraber kullanılabilir hale geldi. Tarafların Kimlik bilgilerini gizli tutarak anonim bir şekilde işlemleri onaylamasına izin veren ve ZKP protokolü kullanan bir yapı sunuyor.
2- Privacy-preserving exchange of assets with Zero-Knowledge Asset Transfer (ZKAT)
Hyperledger Fabric çözümünün “Varlık” transferleri için kullanacağını açıkladığı ZKAT , gizliliği koruyan “Varlık” yönetimi olarakta düşünülebilir. El değiştirecek olan varlığın hakkında hiçbir bilgi vermeden transfer edilmesine imkan veren bu algoritma sayesinde, “Varlık” ın yaratıcı tarafından belirlenen özellikler dışında hiçbir yeni değer ortaya çıkarmadan transfer edilmesi mümkün oluyor.
Blockchain çözümlerinde kullanılan diğer gizlilik ve koruma amaçlı asset yönetimi çözümlerinden en büyük farkı, ZKAT çözümünün iş süreçleri için kurgulanmış olmasıdır. Network içerisinde atanan bir denetçi(Auditor) sayesinde gizliliğin iş süreçlerine uygun şekilde esnetilmesi imkanı sağlıyor.
UTXO(Unspent Transaction Output)
Kriptopara transferlerinde, harcanmamış bir işlem çıktısı (UTXO), harcanmamış bir blok zincir işleminin bir çıktısıdır, yani yeni bir işlemde girdi olarak kullanılır. Bu unspent tx output olarak adlandırılan çıktılar daha fazla işlemi gerçekleştirmek için zincirleme bir şekilde kullanılabilir.(Bitcoin işlemlerinizi kontrol etmek için Explorer’a girdiğinizde sizin yolladığınız işleme bağlı birçok unspent tx görmenizin sebeplerinden birisi budur)
Aşağıdaki grafikteki karşılaştırma diğer blockchain sistemlerinde kullanılan yapılar ile Hyperledger Fabric’in kullandığı ZKAT arasındaki farkları anlamak için güzel bir örnek oluşturuyor.
En solda görülen simülasyon, hiçbir gizlilik olmayan bir blockchain ağında bankalar arasındaki işlemlerin akışını gösteriyor.
Ortadaki simülasyon, hem kimlik hem veri transferinde tam bir gizlilik olan ve hiçbir bilginin taraflara iletilmediği bir ZKP yapısını gösteriyor.
En sağdaki simülasyon ise Hyperledger Fabric içerisinde bulunan ZKAT çözümünü temsil ediyor.
Bu model, belirli bir bankaya atanan denetçinin(Auditor) bu bankayı içeren tüm işlemlere sınırsız erişimine izin verebiliyor ve buna rağmen gizliliği tam anlamıyla koruyabiliyor. Bu da iş süreçleri için esnek bir yapı sağlıyor.
Bu yapı özellikle finansal süreçlerde ve bankalar arası işlemlerde etkin çözümler sunuyor.
Mesela tüm bankalar belli bir sermayeye sahip kişilere veya kurumlara bankalarında mevduat hesabı açması karşılığında belli bir faiz oranından ödeme yaparlar. Aynı şekilde bu kişilerden aldıkları mevduatları ise yine ihtiyaç sahibi olan diğer kişi ve kurumlara daha yüksek faiz oranlarından kullandırırlar. Mevduat Faizi(Maliyet) — Kredi Faizi(Satış) arasındaki fark bankaların işlem karını oluşturmaktadır.
Bu yüzden bankalar bir Blockchain Ağı üzerinden işlemlerini gerçekleştirirken işleme konu olan verilerin gizliliği , istenmeyen taraflar arasında detaylı bilgilerin akışının engellenmesine ihtiyaç duyarlar.(Faiz oranları ve işlemi yapan kişinin bilgilerini gizli tutarak diğer bankalar ile bu işlemlere konu alan varlıkların güvenilir ve hızlı bir şekilde paylaşılması ihtiyacı.)
Hyperledger Fabric üzerinde geliştirme yapan yazılımcı arkadaşlar veriyi gizlemek için aşağıdaki çözümlerden birini veya birkaçını ihtiyaca göre projelerine entegre edebilirler.
Hyperledger Fabric Channels
Private Transactions
Anonymous client authentication with Identity Mixer
Privacy-preserving asset management with audit support (Zero-Knowledge Asset Transfer, ZKAT)
Özet olarak ZKAT, en başta sorduğumuz “Bildiğiniz bilgiyi bir başkasına , bilgiyi ona vermeden nasıl ispat edersiniz? sorusuna etkin bir cevap sunuyor.
Aşağıdaki kısa videoyu mutlaka izlemenizi öneriyorum. 🖐
Kaynaklar:
2- https://medium.com/@argongroup/on-zero-knowledge-proofs-in-blockchains-14c48cfd1dd1
3- https://blog.cryptographyengineering.com/2014/11/27/zero-knowledge-proofs-illustrated-primer/