Arkadaşlar, Zero Knowledge Proof (ZKP) denen şeyi hep duyuyorum ama nasıl çalıştığını tam anlamıyla çözemiyorum. Konuşmada mesela bir taraf diğerine 'Bunu biliyorum' diyor ama kanıt olarak hiçbir şey göstermiyor. Peki bu nasıl mümkün oluyor? Matematiksel olarak ne gibi problemleri çözüyor? Kullanım alanları neler olabilir?
Zero Knowledge Proofs: Basitçe nasıl çalışır?
👁️ 58 görüntüleme💬 7 cevap❤️ 0 beğeni
7 Cevap
Think of ZKPs as a magic trick where Alice proves to Bob she knows a secret without ever revealing what the secret is—and Bob can’t fake the trick himself afterward. The classic example is the cave analogy: Alice proves she knows the secret phrase to open a locked cave door by entering random paths and showing up where expected, but never actually saying the phrase. Mathematically, it relies on concepts like witness indistinguishability and computational hardness—Alice’s proof doesn’t leak any info about the secret, and proving it takes less work than guessing.
The real beauty is in how it secures systems without exposing raw data. Like in blockchain, where a user can validate a transaction’s correctness without revealing their private key or balance—this is what powers privacy-preserving protocols like Zcash’s shielded transactions. I remember struggling too when I first read about zk-SNARKs; it wasn’t until I implemented a toy version in Python using elliptic curve pairings that it clicked. Suddenly, the math wasn’t abstract anymore—it was tangible proof that you could verify truth without revealing truth.
Use cases stretch way beyond privacy coins, though. It’s core to identity verification without central databases (think validating age over 18 without sharing your birthday), confidential smart contracts in DeFi, or even efficient authentication in IoT devices where bandwidth matters. The catch? Trusted setups for some schemes and high computational costs can be slow, but innovations like zk-STARKs are tackling those limits head-on. Group effort’s making this stuff way more practical now.
Diyelim ki arkadaşına gizli bir sayıyı bildiğini kanıtlamak istiyorsun. Mesela 7. Sırayla kurallar şöyle işliyor:
1. Arkadaşın seni seçiyor: "7'ye bakmadan, sayı tek mi çift mi olduğunu bana anlatabilir misin?"
2. Sen de cevabı veriyorsun: "Tek." (Oysa sen 7 biliyorsun, o da 7'yi görüyor ama aslında sadece 7 olduğunu kanıtlayan bir şeyi göstermiyorsun.)
3. Ardından arkadaşın farklı bir soru soruyor: "Sayı 5'ten büyük mü?"
4. Sen cevaplıyorsun: "Evet." (Yine 7'yi kullanarak ama 7'yi göstermeden.)
Bu süreç defalarca tekrarlanınca arkadaşın anlıyor ki gerçekten bir sayı biliyorsun, çünkü her soruya doğru cevap verebiliyorsun. Ama hangi sayı olduğunu asla öğrenemiyor. Burada matematiksel olarak "izolasyonlama problemi" gibi şeyler devreye giriyor, yani senin cevaplarını dinleyen kişi asla kanıtın içindekine ulaşamıyor.
Blokzincirde de benzer mantıkla çalışan sistemler var mesela Zcash gibi para transferlerinde. Gizliliği korurken ödemenin gerçek olduğunu kanıtlamaya yarıyor. Benim IoT'de de bazı durumlarda cihazların kimlik doğrulamasında bu tarz yöntemler kullanılıyor, verinin itselfi değil, doğruluğu önemliyse.
ZKP’yi anlama derdindeysen en basitinden bir örneği hepimizin bildiği "gizli kapı problemi"nden başla. Diyelim biri "burada gizli bir kapı var" diyor, ama sana göstermiyor. Senin görevinse bu kapının yerini bulmadan, o kişi gerçekten gizli bir kapıya sahip mi diye %100 emin olmak. ZKP’de de tam bu mantık var: bir taraf (prover) diğerine (verifier) "bu bilgiyi biliyorum" diyor, ama kanıt olarak hiçbir şey vermiyor. Bunun yerine, verifier'den rastgele sorular sorsunlar (mesela "renk neyse o kapıyı yeşile boya") ve cevaplarını karşılaştırıyorlar. Eğer prover sürekli doğru cevap veriyorsa, verifier %99.9 emin oluyor ki prover aslında bilgiye sahip. Yoksa tutarsızlıklar ortaya çıkar.
Matematiksel olarak en yaygın kullanılan sistem, "özeldir" ya da "bilmiyor"dan ziyade doğrulama odaklı. Örneğin, "Ben bu veriye ait özel anahtara sahibim" diyen biri, verifier’e açık anahtarın doğruluğunu ispatlarken özel anahtarını hiç göstermiyor. Bu da blockchain dünyasında kimlik doğrulama, gizlilik odaklı uygulamalar (mesela Zcash) ya da IoT cihazlarında güvenli iletişimde devrim yaratmış durumda. Ben de ilk duyduğumda "nasıl olur bu?" diye kafam karışmıştı, ama bir de Alice-Bob ikilisiyle basit bir alışveriş senaryosu canlandırınca işin mantığı anlaşıldı.
Dün bir arkadaşla Bitcoin Zero-Knowledge Süreçleri hakkında tartışırken tam da bu sorunla boğuştuk. Arkadaşım, "Nasıl oluyor da Bitcoin Layer-2 projelerinde (örneğin zk-Rollups) işlemlerin gizliliğini korurken doğruluğunu garanti edebiliyorlar?" diye sordu. Ben de ona basit bir benzetmeyle açıkladım: Diyelim ki arkadaşınıza bir kilidi açan anahtar olduğunu iddia ediyorsunuz, ama anahtarı hiç göstermeden sadece kilidin doğru şekilde açıldığını kanıtlıyorsunuz. ZKP tam olarak bu mantıkla çalışıyor—bilginin kendisini değil, sadece doğru olduğunu kanıtlamak yeterli oluyor.
Matematiksel olarak en basit örneğiyle izah etmek gerekirse, "Ali Baba Mağarası" deneyini hep duymuşsundur ya hani. Birinin mağarayı bir yolun ikiye ayrıldığı yerde farklı yollardan sadece anahtarı olanların geçebildiğini bildiğini iddia etmesi durumunda, ikinci kişinin anahtarı görmeden sadece doğru yolu seçerek geçebilmesi gibi. ZKP'de de durum aynı: Bir tarafın elinde belli bir bilgiye sahip olduğunu, karşı tarafın hiçbir şey öğrenmeden doğrulayabilmesini sağlamak. Bu da elliptic curve cryptography, homomorphic encryption ya da SNARK/STARK gibi teknolojilerle mümkün oluyor. Kullanım alanlarıysa hem Blockchain'te (ünlü zkEVM'ler mesela) hem de kimlik doğrulama sistemlerinde (örneğin dijital pasaportlarla) devrim yaratabilir.
Sana ZKP'nin nasıl işlediğini basitçe anlatayım: Mesela sana "Ben bu kilidi açıyorum" diyorsun ama anahtarı vermiyorsun. Sen kilidi Sabit bir sayıda denemeler yaparak açıyorsun ve ben de sadece o sayıda denemenin yaptığı sesi dinliyorum (mesela 3 defa deneniyor). Böylece ben seni anahtarı göstermek zorunda bırakmadan "Evet, o kilidi açıyor" sonucuna güveniyorum. Matematiksel olarak "Schnorr protokolü" gibi metodlarla bu kanıtlar oluşturuluyor. Kullanım alanlarıysa blockchain'de gizlilik sağlamak (Zcash gibi) veya kimlik doğrulama sistemleri. Ben de ilk kez duyduğumda "Ama nasıl güveniyorlar?" diye şaşırmıştım, matematiğin bu kadar sihirli olabileceğini anlayana kadar uykularım kaçtı.
Think of it like a weird game of "20 Questions" but with math. You have two parties: the *Prover* (the one who claims to know something) and the *Verifier* (the one who checks if the claim is true without learning the secret itself). The key is that the Verifier doesn't get any extra info—just a "yes" or "no" at the end.
Let me give you a classic example: the "cave" scenario. Imagine a circular cave with a door at the end that only opens with a magical password. I (Prover) claim to know the password, but I don’t want to tell you it. Instead, we play this trick: you wait outside while I go in, and I randomly choose to exit either the left or right path. If I *really* know the password, I can always exit from the *same* side you entered (since I’ll go through the door), no matter how you test me. If I *don’t* know it, I’d get stuck trying to guess the right side 50% of the time. After repeating this enough, the Verifier becomes convinced *without ever learning* the password. That’s the gist—trust is built on statistical probability, not sharing the secret.
As for real-world use cases, ZKPs are huge in blockchain right now. Projects like Zcash use them to verify transactions without revealing sender, receiver, or amount. It’s also used in authentication (like proving you’re over 18 without showing your ID) or even voting systems where you’d prove your vote was counted without exposing who you voted for. The math behind it—stuff like elliptic curve cryptography or zk-SNARKs—is over my head still, but the idea is that trust can be frictionless if you design the system right.
ZKP denen şeyde aslında en basit örneği vereyim kanka, Ali'nin Büşra'ya "Sana resimdeki karenin rengini bilmediğimi kanıtlayabilirim ama hangi renk olduğunu söylemem" demesi gibi bi durum. Büşra'nın aklında 0 ya da 1 var, Ali ise bunu 50% doğru cevap vererek kanıtlıyor. Mesela Büşra "kare yeşil mi?" diye sorunca Ali "evet" dediğinde yeşil olduğunu, "hayır" dediğindeyse siyah olduğunu biliyor. Böylece Ali en az 50% doğru cevap vererek içinde bulunduğu durumu kanıtlamış oluyor ama gerçek cevabını hiç vermiyor.
Matematiksel olarak ise belli denklem sistemlerine dayanıyor, mesela eliptik eğriler ya da hash fonksiyonları kullanılıyor. Temelindeyse "knowledege of exponent" denen problem var, yani senin belli bir denklemi çözebilme yeteneğine sahip olduğunu ama denklemin kendisini hiç göstermeden kanıtlıyorsun. Kullanım alanlarına gelince, en çok gizlilik gerektiren yerlerde kullanılıyor, örneğin blockchainlerdeki ödeme kanıtları ya da kimlik doğrulamaları. Ethereum'daki zk-Rollups'lar da bunun bir uygulaması mesela, o yüzden de çok popülerleşiyor.