Zero-Knowledge Proof ve SNARK nedir?
Sıfır bilgi kanıtı, karşı tarafa belirli bilgilerin doğru olduğunu kanıtladığınızda, bilgilerin doğru veya yanlış olduğunu söylemenin sonucu dışında hiçbir bilginin açığa çıkmadığı bir prosedürdür.
Örneğin; markete alışverişe gittiniz, alışverişinizi tamamladınız ve kasaya gidiyorsunuz. Herhangi bir privacy önemsemeyen kripto para ile ödemeyi yapmak istiyorsunuz. Bu durumda ödemeyi yaptığınız walletiniz açığa çıkacak, tüm geçmiş tx(Transaction) leriniz ve bakiyeniz görünecektir. Çünkü blokchainlerin en büyük özelliklerinden birisi şeffaf olmasıdır ama bu durum blockchainlerin ticarileşmesini engelleyebiliyor.
Zero knowledge prooflar(ZKP) burada devreye giriyor. Üstte verdiğim örnekte tüm bilgilerimizin ortaya çıktığını söylemiştim, ZKP( Sıfır bilgi kanıtı)’ler sayesinde hiçbir bilgi açığa çıkmadan bilginin doğrulanmasını sağlıyor.
Nasıl?
ZKP’lerin ispatında, belirli bir durumun geçerliliğini( doğru veya yanlış) kanıtlamak isteyen bir Prover ve bunu doğrulamak isteyen Verifier katılır.
- Prover: Verifier’e hangi bilgilere sahip olduğunu söylemeden, bilgiyi bildiğini kanıtlamak isteyen katılımcıdır.
- Verifier: Prover’in kanıtlamaya çalıştığı bilgileri doğrulamak isteyen katılımcıdır.
Popüler olan bir örnek üzerinden gidelim, anlamak daha kolay olucaktır.
İki kişi hayal edelim, Alice’nin renk körü olduğunu, Bob’un ise olmadığını.
Bob, Alice’nin elinde özdeş ve renkleri farklı olan(Kırmızı ve yeşil) 2 adet topunun olduğunu kanıtlamaya çalışıyor.
Fakat Alice renk körü olduğu için topları aynı renkte görüyor ve bunların farklı renkte olduğuna inanmıyor.
- Alice(Verifier), her elinde birer tane olmak üzere iki topu alır ve arkasına koyar.
- Ardından toplardan birini Bob’a( Prover) gösterir. Tekrar arkasına koyar topu.
- Ardından, Bob’a rastgele başka bir top gösterir.
- Sonra Bob’a “topları değiştirdim mi?” diye sorar.
- İşlem gerektiği kadar tekrarlanabilir.
Bob renk körü olmadığı için topların değişip değişmediğini kesin olarak görür ve bunu renkleri söylemeden kanıtlar.
Alice’nin sakla+karıştır ve Bob’un tepkisinden oluşan bu döngüyü birkaç kez tekrarlayan Alice, sonunda Bob’un sırrını (topların rengini) bildiğine ikna olacaktır. Bunu ne kadar fazla tekrarlarsak, o kadar yüksek ihtimalle emin oluyoruz.
ZK matematiğinde buna “Completeness” denir. Bu örnek “sıfır bilgi”dir çünkü Alice hangi topun kırmızı hangisinin yeşil olduğunu asla öğrenemez.
Peki toplar aynı renkte olsaydı?
Eğer toplar aynı renkte olsaydı, Bob(prover) %50'den yüksek bir olasılıkla asla tahmin edemezdi. Ve bu işlemi defalarca tekrarlarsanız, başarılı olma olasılığınız sıfıra yaklaşırdı. ZK matematiğinde buna “Soundness” denir.
Artık interactive zero-knowledge proof’un ne olduğunu oğrendiğimize göre, non-interactive kısmını öğrenebiliriz.
zk-SNARK Nedir?
Etkileşimli olmayan sıfır bilgi ispat sistemleri, kanıtları doğrularken birçok soru sormak yerine, tek soru sorar.
Etkileşimli olan sıfır bilgi ispat sistemlerinde, birçok soru sorulduğu için sonucun güvenliği yükselir ancak verimlilik düşer.
Prover, kanıtları Verifier’a gönderdikten sonra, Verifier kanıtları doğruladığında başka bir mesaj alışverişi gerçekleşmez. Dolayısıyla Prover, Verifier’a kanıtları bir kez gönderdikten sonra, iletişim kopsa bile, Verifier’in kanıtın doğru olup olmadığını doğrulamasında hiçbir sorunu olmayacaktır.
zk-SNARK, birçok kelimenin birleşimidir
S- Succinct ispatlanan kavram karmaşık olsa bile ispatların küçük ve doğrulanması kolay olduğu anlamına gelir
N- Non-interactive sıfır bilgi ispat sistemleri, kanıtları doğrularken birçok soru sormak yerine, tek soru sorar.
AR- Argument bu ispatın kriptografik ve matematiksel olarak yazılması
K — Knowledge Prover’in kanıta sahip olduğu ve kanıtı verifier’e ıspatlaması
Çok iyiymiş! Peki zk-SNARK’lar nasıl tek soru sorarak, kanıtın doğrulanmasını sağlayabiliyor?
zk-SNARK’ların güvenilir bir kurulumu(trusted setup) vardır. TS(Trusted Setup) Prover kanıtları oluşturduğunda ve Verifier kanıtları incelediğinde gerekli bilgileri iki tarafa da sağlar. Prover, TS sayesinde kanıtları oluşturur ve kanıtları Verifier’e gönderir ve Verifier gerekli hesaplamayı yapar.
- Bu kısımda, Prover’in gerekli kanıtı gönderdikten sonra ek mesaj göndermesine gerek yoktur.
Non-interactive sıfır bilgi sistemlerinin tümü zk-SNARK’larla aynı şekilde davranmaz. Bazılarında birden fazla TS bulunur, bazılarında TS yoktur ve Prover ve Verifier’in kanıt oluşturması için mesaj alışverişinde bulunmaları gerekir.
- Çoğu proje tek TS olan proof tipleri yerine farklı tipler deniyor.
İşte bazı Commitment sceheme’ler
KZG, IPA, FRI birer kriptografi teknolojisidir.
KZG: SNARK’larda kullanılıyor
FRI: STARK’larda kullanılıyor
IPA: Bulletproof’larda kullanılıyor
Ve bunlara yazılan bazı circuitler:
PLONK circuit + FRI commitment = PLONKY 2
PLONK circuit + IPA = Halo2
FRI + AIR = STARK
IPA + Sonic = Halo(biraz daha modifiye hali Pickle)
Stark’ların, Snark’lara karşı en büyük 2 avantajı, 1 TX içine milyonlarca TX sığdırabilirmesi ve çok hızlı kanıt oluşması.
Şu soru sorulabilir. Eğer milyonlarca işlem sığıyorsa, bunun için bir süre gerekiyor. Bu durumda hızlı olmasının ne avantajı var?
Güzel soru, şu an starklar üzerinde Starkware şirketi çalışıyor.
Starkware, Starknet ve StarkEx işlemlerini birleştirip(SHARP) bu sorunu çözecek.
Bu görsel biraz eski ama ne demek isteğimi az çok anlatıyor.
Stark konusunu burda kapatalım. Diğer yazılarımda daha fazla bahsederim.
Son olarak zk-SNARK teknolojisini kullanan bazı projeleri yazıp, bitirmek istiyorum.
Aztec: L2 private rollup. Plonk circuit
ZkSync: L2 rollup. Plonk circuit
Mina: L1. Pickle snark
Scroll: L2. zkEVM
Zcash: L1. Halo2
Aleo: L1. Private chain
Anoma: L1. Plonkup
Iron fish: L1
Espresso Systems: L1
Diğer yazılarımda bazı kısımları daha da açacağım.
Benden şimdilik bu kadar, yazıları kendimi geliştirmek için yazıyorum. O yüzden eksiklikler ve yanlışlar olabilir. Okuduğunuz için teşekkür ederim.