A blockchain alkalmazások és infrastruktúra egyik fontos kutatás fejlesztés alatt álló területe a nem feltáró bizonyítások (zero knowledge proof). A nem feltáró bizonyítás egy kriptográfia eszköz mely segítségével kvázi “bebizonyítható”, hogy ismerünk egy tényt, de úgy hogy maga a tény elrejtve marad. Előreláthatóan számos helyen felhasználható lesz mind blockchain rendszerek skálázásnál, mind titkos tranzakciók megvalósításának, de számos nem blockchaines alkalmazásuk is lehet, mint például digitális fényképek eredetiségvizsgálata vagy tőzsdék likviditásának bizonyítása. Jelen cikkünkben a nem feltáró bizonyításokat és lehetséges alkalmazásaikat vizsgáljuk meg közelebbről.
Amennyiben nem feltáró bizonyításokról beszélünk, akkor valamiféle állítás létezésének vagy ismeretét bizontjuk, ez a bizonyítás azonban nem teljesen olyan mint egy klasszikus matematikai bizonyítás, mint például a Pitagorasz tétel bizonyítása. Nem feltáró bizonyításoknál általában egy olyan modellt használunk, amiben két szereplő van:
- Bizonyító (Prover): A bizonyitó feladata, hogy az ellenőrzőt meggyőzze arról, hogy valami igaz, általában úgy, hogy a “valamiről” nem szívárog ki semmiféle információ.
- Ellenőrző (Verifier): Az ellenőrző feladata meggyőződni arról, hogy a bizonyító ténylegesen tud valamit, azonban oly módon, hogy a “valamiről” nem tud meg semmit.
A nem feltáró bizonyítások erőteljesen feltételezik a két szereplő meglétét (bizonyító és ellenőrző) és maga a bizonyítás folyamata is többféle lehet:
- Interaktív (interactive) bizonyításoknál a bizonyító és az ellenörző szereplők között több körös üzenetváltás történik. Jellemzően az ellenőrző több véletlenszerű kérdést tesz fel több körön keresztül, amire a bizonyító válaszol. A kérdés-válasz körök végén az ellenőrző szerepkör meglesz győződve arról, hogy a bizonyító ténylegesen ismeri a bizonyítandó dolgot.
- Nem interaktív (non-interactive): Ebben az esetben csak egykörös interakció valósul meg a bizonyitó és az ellenörző között.
- Probabilisztikus (probabilistic) A bizonyitásoknál egy tény sosincs teljes mértékben bebizonyítva, hanem mindig csak egy bizonyos valószínűséggel. Például ha interaktív protokollokat használunk, jellemzően minden interakció után egyre biztosabb egy állítás, de ez soha nem lesz 100%-os biztonságú.
- Determinisztikus (deterministic): Egy bizonyítandó tény igazsága teljes mértékben, 100%-ban igaz.
A feladat megoldására két nem matematikai, nem számítástechnikai módszer is létezik, mindkét esetben feltételezzük, hogy kinyomtatjuk a fenti képet. Az első esetben veszünk egy fehér borítólapot, mely tízszer akkora mint a kinyomtatott lapunk. Majd a fehér borítólapon kivágunk egy kis lyukat, melyen Walso feje látszik és rátesszük az egészet a kinyomtatott képre. Így látható bárki számára (ellenőrző), hogy Waldo rajta van a képen, de mivel a borítólap többszörösen elfedi az eredeti képet a pontos hely nem derül ki. A másik lehetőség, hogy a kinyomtatott kép másik oldalát az ellenőrző (verifier) sűrűn aláírja, majd kivágjuk belőle Waldó képét. Mivel a kivágott rész túloldalán rajta van az aláírás így biztosak lehetünk benne, hogy a képről származik, de ennek pontos lokációja nem ismert.
Természetesen az előző példa eléggé intuitív és szemléletes volt, a gyakorlatban is haszhálható nem feltáró bizonyítások mögött elég mély matematikai apparátus van. A legtöbb nem feltáró bizonyítást az úgynevezett zkSNARK segítségével valósítják meg, ahol a rövidítés a kriptográfiai protokoll egyes szavait jelöli:
- S, succinct, tömör: itt alapvetően olyan bizonyításokat szeretnénk használni, amik rövidek és tömörek, mind a bizonyítás méretét tekintve, mind pedig az ellenőrzéshez szükséges idő tekintetében.
- N, non-interactive: főleg a nem interaktív bizonyításokat lehet jól használni.
- ARK, argument of knowledge: valamiféle bizonyítás, vagy legalábbis egy ellenőrző szereplő meggyőzése egy tényről.
- zk, zero knowledge, nem feltáró: ebben az esetben a bizonyítandó tényről nem derül ki információ. Fontos megjegyezni, hogy egy SNARK-nak akkor is van értelme, hogy nem rendelkezik a zk (zero knowledge) tulajdonságokkal. Ebben az esetben egy viszonylag komplex számításról korrekt végrehajtásáról lehet egy rövid matematikai bizonyítékot adni. Ez fontos lehet amennyiben a komplex számításhoz valamiféle erős számítógépre lenne szükségünk, de az eredményt ellenőrzését egy sokkal gyengébb-limitáltabb kapacitású gépen szeretnénk végrehajtani. Ez egy gyakori szituáció például ha off-chain számításokat egy okosszerződés segítségével szeretnénk ellenőrizni.
Felhasználás szempontjából a leginkább fejlődő és innovatív megoldásokat a különböző blockchain alkalmazásoknál és platformoknál látjuk. A blockchain rendszerek egyik nagy problémája hogy a tranzakciók nyilvánosak, mivel az egymástól független peerek úgy tudják őket validálni, ha látják a benne lévő információt. Ezen változtathatnak a nem feltáró bizonyítások, melyek segítségével úgy lehet egy tranzakció hitelességét bizonyítani, hogy maga a tranzakció nem látható. Egy másik szintén blockchainhez kötődő innovatív alkalmazás az úgynevezett zkRollup-ok. Mivel a legtöbb blockchain viszonylag kevés tranzakciót tud végrehajtani, azokat is elég lassan, ezért egy jogos ötlet lehet tranzakciókat blockchainen kívül (off-chain) végrehajtani. A problémát az jelenti, hogy aki a blockchain kívül végrehajtja a tranzakciókat abban meg kell bízni (counterparty risk) ami eléggé ellentétes a blockchain decentralizált, bizalom nélküli (trustless) koncepciójával. A megoldást az jelentheti, hogy az off-chain tranzakciók korrekt végrehajtásáról egy zkSNARK bizonyítás készül, melynek eredményét a blockchainen ellenőrizni lehet. Ezt a technológiát hívják zkRollup-nak.
Összefoglalva azt mondhatjuk, hogy a nem feltáró bizonyítás egy nagyon izgalmas kriptográfiai eszköz, melynek felhasználási lehetőségei mind a blockchain rendszerek, mind más területeken roppant izgalmasak lehetnek. Bár a terület még erősen kutatás + fejlesztés alatt áll, a felhasználási lehetőségeket legalább olyan széleskörűnek becslik mint a digitális aláírásét.