Que sont les zkSNARKs? Le guide mathématique complet de Spooky Moon

Qu’est-ce que zkSNARKs: Spooky Moon Math. Avec ethereum entrant dans la phase de Metropolis, il va introduire divers changements qui vont le rendre plus abstraction et respectueux de la vie privée. L’un de ces changements est l’introduction de «l’argument de connaissance succinct non interactif à connaissance zéro» alias Zk-Snarks. Zk-Snarks fonctionne sur l’idée de zéro preuve de connaissance.

Dans cet article, nous allons passer par l’idée de preuve de connaissance zéro et son application dans la technologie blockchain.

Que sont les zkSNARKs: Spooky Moon Math

Les preuves Zero Knowledge ont vu le jour dans les années 1980 grâce au travail de chercheurs du MIT Shafi Goldwasser, Silvio Micali et Charles Rackoff. Ils travaillaient sur des problèmes liés aux systèmes de preuve interactifs, où un prouveur échange des messages avec un vérificateur (plus sur les prouveurs et les vérificateurs plus tard) pour les convaincre qu’ils ont une connaissance d’une certaine preuve sans déclarer ce que cette connaissance est..

Avant de faire leur découverte historique, la plupart des systèmes de preuve étaient basés sur les propriétés de «solidité» du système de preuve. On a toujours supposé que le «prouveur» pouvait être le malveillant dans tout scénario où il tenterait de tromper le vérificateur. Ces 3 chercheurs ont renversé l’idée en remettant en question la moralité du vérificateur au lieu du prouveur. La question qu’ils ont posée était la suivante: comment peut-on savoir avec certitude que le vérificateur ne divulguera pas les connaissances et des préoccupations ont également été soulevées quant à la quantité de connaissances sur le prouveur que le vérificateur apprendra à connaître au cours du processus de vérification..

Cette énigme a diverses conséquences dans le monde réel et l’une des plus célèbres concerne la protection par mot de passe. Supposons que vous souhaitiez vous connecter à un site Web à l’aide d’un mot de passe. Le protocole standard est que le client (vous) écrira son mot de passe et l’enverra au serveur, le serveur hachera alors le mot de passe et l’assimilera au hachage qu’il a stocké dans son système. Si les valeurs correspondent, vous pouvez entrer dans le système.

Pouvez-vous voir l’énorme défaut de ce système à droite? 

Le serveur a la version en clair de votre mot de passe et votre vie privée est à la merci du serveur (le vérificateur dans ce scénario). Si le serveur est compromis ou attaqué, votre mot de passe appartiendra à la partie malveillante et les conséquences pourraient être désastreuses. Afin de contrer ces scénarios, les preuves de connaissance zéro sont absolument essentielles et révolutionnaires dans tous les sens du terme.

Il y a deux parties quand il s’agit d’une preuve de connaissance nulle (comme indiqué ci-dessus), le prouveur et le vérificateur. Zéro connaissance indique qu’un prouveur peut prouver au vérificateur qu’il possède une certaine connaissance sans lui dire ce que cette connaissance est réellement

Propriétés d’une preuve de connaissance zéro

Pour qu’un ZKP fonctionne, il doit satisfaire certains paramètres:

  • Complétude: Si l’affirmation est vraie, un vérificateur honnête peut en être convaincu par un prouveur honnête..
  • Solidité: Si le prouveur est malhonnête, il ne peut pas convaincre le vérificateur du bien-fondé de la déclaration en mentant.
  • Zéro-connaissance: Si la déclaration est vraie, le vérificateur n’aura aucune idée de ce que la déclaration est réellement.

Alors maintenant que nous avons une idée de base de ce qu’est une preuve sans connaissance, voyons quelques exemples avant de plonger dans zk-snarks et son application dans la blockchain.

Cas n ° 1 de la grotte d’Alibaba

Dans cet exemple, le prouveur (P) dit au vérificateur (V) qu’il connaît le mot de passe de la porte secrète au fond de la grotte et qu’il veut le prouver au vérificateur sans lui dire réellement le mot de passe.

Voici donc à quoi cela ressemble:

Qu'est-ce que zkSNARKs: Funny Moon Math

Image courtoisie: Scott Twombly (chaîne YouTube)

Le prouveur emprunte l’un des chemins A et B, supposons qu’il décide initialement de passer par le chemin A et d’atteindre la porte secrète à l’arrière. Quand ils le font, le vérificateur V entre à l’entrée, sans savoir quel chemin le prouveur a réellement emprunté et déclare vouloir voir le prouveur apparaître à partir du chemin B.

Dans le diagramme, comme vous pouvez le voir, le prouveur apparaît bien dans le chemin B. Mais que se passerait-il si c’était une chance stupide? Et si le prouveur ne connaissait pas le code d’accès et prenait le chemin B, était coincé à la porte et par pure fortune, le vérificateur lui a dit de sortir du chemin B, celui sur lequel ils se trouvaient de toute façon?

Donc, pour tester la validité, l’expérience est effectuée plusieurs fois. Si le prouveur peut apparaître au bon chemin à chaque fois, il prouve au vérificateur que le prouveur connaît bien le mot de passe même si le vérificateur ne sait pas ce qu’est réellement le mot de passe.

Voyons comment les trois propriétés de la connaissance nulle sont satisfaites dans cet exemple:

  • Complétude: Puisque la déclaration était vraie, le prouveur honnête a convaincu le vérificateur honnête.
  • Solidité: Si le prouveur était malhonnête, il n’aurait pas pu tromper le vérificateur car le test a été effectué plusieurs fois. Finalement, la chance du prouveur a dû s’épuiser.
  • Zéro-connaissance: Le vérificateur n’a jamais su quel était le mot de passe, mais était convaincu que le prouveur en avait la possession.

Cas n ° 2 Trouver Waldo

Souviens-toi d’avoir trouvé Waldo?

Bien sûr, vous le faites, vous devez l’avoir vu quelque part, que ce soit dans la vraie vie ou en ligne. Pour ceux qui ne le savent pas, Finding Waldo est un jeu où vous devez trouver «Waldo» parmi une mer de gens. C’est un simple jeu «Repérez le gars». Juste pour vous donner une idée de base, voici à quoi ressemble le jeu:

Qu'est-ce que zkSNARKs: Funny Moon Math

Image courtoisie: Youtube (IntoConnection)

Et l’idée est de trouver Waldo qui ressemble à ceci:

Qu'est-ce que zkSNARKs: Funny Moon Math

Image courtoisie: Pinterest

Cela semble assez simple, non? Trouvez ce gars parmi la mer d’autres personnes que vous voyez dans le jeu. Ok, alors d’où vient le concept de Zero Knowledge? Imaginez qu’il y ait deux personnes Anna et Carl. Anna dit à Carl qu’elle sait où se trouve Wally mais qu’elle ne veut pas lui montrer où il se trouve exactement. Alors, comment peut-elle lui prouver qu’elle a retrouvé Wally sans montrer sa position exacte?

Il y avait, un article intéressant de Naor, Naor et Reingold qui montre deux solutions Zero Knowledge à ce problème. Il existe une «solution moyenne technologie» et une «solution basse technologie». Parlons des deux.

Solution de moyenne technologie

La raison pour laquelle cette solution est «mid-tech» est que notre prouveur et notre vérificateur ont besoin d’accéder à une photocopieuse pour faire ce travail. Voilà comment ça se passe. Premièrement, Anna et Carl feraient une photocopie du jeu original. Puis Anna, tout en s’assurant que Carl ne regarde pas, découpera Waldo de la photocopie et détruira les restes. Après cela, elle peut montrer la découpe de Waldo à Carl et prouver qu’elle savait où se trouvait Waldo après tout sans indiquer son emplacement exact à Carl.

Il y a des problèmes avec cette solution. Bien qu’il remplisse les critères «Zero Knowledge», il ne remplit pas les critères «Soundness». Anna aurait pu tricher ici de plusieurs façons. Elle aurait pu avoir un Waldo coupé au hasard avec elle depuis le tout début et aurait pu le montrer à Carl sans savoir où se trouvait Waldo. Alors, quelle est la solution à cela?

La solution à cela est des tests méticuleux et minutieux. Premièrement, Anna et Carl prendront une photocopie du match. Ensuite, Carl dessinera un motif distinctif au dos de la photocopie. Après cela, Carl escortera Anna dans une pièce où elle sera isolée et n’aura aucune chance de tricher. Si Anna sort avec une découpe de Waldo, Carl peut être convaincu qu’elle savait réellement où se trouvait Waldo sans révéler la solution. Ils peuvent répéter cette expérience plusieurs fois et Carl peut comparer les différentes découpes de Waldo pour être encore plus sûr de la validité de la revendication d’Anna.

Solution basse technologie

Cette solution nécessitait un équipement très basique. L’idée est simple. Procurez-vous un énorme carton, deux fois plus grand que le jeu et découpez-y un petit rectangle. Maintenant, quand Carl ne regarde pas, Anna peut déplacer le carton sur le jeu de telle sorte que le rectangle soit directement au-dessus de Waldo. Maintenant, elle peut dire à Carl de jeter un coup d’œil et voici ce qu’il verra:

Qu'est-ce que zkSNARKs: Funny Moon Math

Courtoisie d’image: Cryptographie appliquée aux enfants par Naor et Reingold

Ainsi, bien que Carl puisse avoir une idée très basique de l’endroit où Waldo peut réellement être, il ne connaît pas l’emplacement exact. Anna a donc prouvé à Carl qu’elle savait où se trouve Waldo sans préciser son emplacement exact.

Cas n ° 3: Sudoku

Le Sudoku est une autre excellente application de la connaissance zéro. Pour ceux qui ne le savent pas, Sudoku est un puzzle japonais où vous obtenez une table 9X9 qui ressemble à ceci:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Image courtoisie: Blog Computational Complexity.

L’idée est de remplir chaque ligne, chaque colonne et chaque bloc 3X3 avec des nombres de 1 à 9 et aucun nombre ne doit se répéter. Donc, la solution pour le puzzle ci-dessus ressemble à ceci:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Image courtoisie: Blog Computational Complexity.

Comme vous pouvez le voir, chaque ligne, colonne et bloc 3X3 sont uniques et aucun numéro n’a été répété. Revenons à nos vieux amis Anna et Carl. Anna a trouvé la solution au puzzle du Sudoku et Carl, sceptique sur le fait qu’il ne la croit pas et veut qu’Anna prouve qu’elle connaît bien la solution. Anna veut prouver son honnêteté, mais en même temps, elle ne veut pas que Carl connaisse la solution exacte du puzzle. Comment va-t-elle s’y prendre? Anna va utiliser Zero Knowledge pour prouver la validité de sa réclamation.

Tout d’abord, Carl exécutera la solution Sudoku à travers un programme informatique qui a été vérifié, pour être honnête et le programme exécutera les nombres via un chiffrement de substitution choisi au hasard. Dites, pour ce problème particulier, le chiffrement que le programme a choisi est le suivant:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Le programme et le chiffrement choisis sont tels que chacun chiffre a la même chance d’être transmuté en sa substitution que tout autre nombre. Fondamentalement, 1 a autant de chances d’être transmuté que 3 et 4 ont autant de chances d’être transmuté que 9 et ainsi de suite. Donc, l’utilisation de ce chiffre nous donne la solution suivante au puzzle ci-dessus:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Image courtoisie: Blog Computational Complexity.

Anna obtient la solution transmutée maintenant, gardez à l’esprit que Carl ne sait toujours pas quelle était la solution originale et qu’il ne possède pas non plus la solution transmutée. Donc, ce qu’Anna fait maintenant, c’est qu’elle cache tous les nombres du puzzle en utilisant un «mécanisme de boîte à clé», en gros Carl ne pourra voir aucun des nombres et verra une grille 9X9 vide devant lui.

Carl a désormais 28 choix devant lui:

  • Révéler une ligne.
  • Révéler une colonne.
  • Révéler une boîte 3X3.
  • Révélez la version transmutée du puzzle original.

Supposons que Carl veuille savoir à quoi ressemble la troisième rangée:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Image courtoisie: Blog Computational Complexity.

C’est ce qu’il verra. Carl verra que chaque nombre de la ligne est unique et puisque chaque nombre possible dans la solution originale avait la même probabilité d’être transmuté via le chiffrement, Carl n’aura aucune idée de ce qu’est la solution originale.

Supposons maintenant que Carl décide de prendre la dernière option et souhaite voir à quoi ressemble le puzzle original lorsqu’il est transmuté:

Qu'est-ce que zkSNARKs: Spooky Moon Math

Image courtoisie: Blog Computational Complexity.

Encore une fois, puisque le chiffre a été choisi au hasard et que tous les nombres ont la même probabilité d’être transmutés, Carl n’aura aucune idée de la solution originale. Carl peut maintenant parcourir ses 28 choix et finalement il sera satisfait de la validité de la déclaration d’Anna.

Pourquoi?

Parce que, si Anna trichait effectivement, il n’y avait aucun moyen qu’elle ait trouvé un chiffre pour donner des solutions uniques pour les 28 choix de Carl. Si Carl n’a choisi qu’une option, les chances d’Anna de se soustraire à la tricherie sont de 27/28. MAIS si Carl choisit de faire un test aléatoire plusieurs fois, supposons qu’il choisisse de le tester 150 fois, le choix d’Anna de se soustraire à la triche tombe à (27/28) ^ 150, soit < 0,5%.

Voyons donc les propriétés de connaissance zéro de ce scénario:

  • Complétude: Le programme de chiffrement utilisé a été vérifié, pour être honnête, et Anna et Carl suivent le protocole.
  • Solidité: Si Carl effectue des tests aléatoires 150 fois, les chances d’Anna de se soustraire à la tricherie sont < 0,5%.
  • Zéro-connaissance: Anna n’a jamais eu à révéler à Carl quelle était la solution originale.

Preuve vs preuve de déclarations

Maintenant que nous connaissons les aspects théoriques des preuves de connaissance zéro et son application dans divers exemples, quelle est son application pratique dans la blockchain? Pourquoi tout le monde est ravi de la mise en œuvre de Zcash ZKP (aucune preuve de connaissance) et pourquoi tout le monde est-il enthousiasmé par le fait qu’Ethereum fasse de même? Avant de développer cela, il est important de connaître un autre concept théorique important.

Que prouvons-nous exactement en utilisant ZKP? Dans un large spectre, il existe deux affirmations que vous pouvez prouver en utilisant ZKP. Preuves aka faits et preuve de connaissance.

  • Preuves: Ce sont les vérités intrinsèques sur l’univers que vous voudrez peut-être prouver via ZKP. Par exemple. “Le numéro X appartient à un groupe Y”.
  • Preuve de connaissance: Vous voudrez peut-être aussi prouver que vous avez connaissance d’une idée particulière sans révéler en quoi consiste cette connaissance particulière. Comme on peut le voir dans les exemples de la grotte de Sudoku, Waldo et Alibaba donnés ci-dessus.

Il est important de noter la différence entre ces deux car ils sont complètement différents. Dans le monde de la crypto-monnaie, nous nous concentrons principalement sur la «preuve de connaissance». L’une des avancées les plus importantes pour prouver la preuve de la connaissance via la preuve de connaissance zéro est venue lorsque Claus-Peter Schnorr dans les années 1980 a proposé le protocole d’identification de Schnorr. Ce protocole pose les bases de la cryptographie de signature de clé moderne et montre comment la connaissance zéro peut être intégrée de manière transparente dans les pratiques cryptographiques modernes..

Le protocole d’identification de Schnorr

Pour comprendre en quoi consiste l’identification Schnorr, faisons revenir nos vieux amis Anna et Carl. Anna a annoncé au monde qu’elle possédait une clé publique et qu’elle pouvait accepter et recevoir des informations par son intermédiaire. Carl, toujours sceptique, pense qu’Anna ment. La seule façon pour Anna de prouver son honnêteté est de montrer sa clé privée à Carl, mais elle ne veut pas révéler sa clé privée.

Alors, comment Anna révélera-t-elle sa connaissance de sa clé privée sans la révéler? C’est là que le protocole Schnorr entre en jeu. Avant même de commencer à comprendre son fonctionnement, il y a certains paramètres que vous devez connaître:

  • p = tout nombre premier.
  • q = facteur de p-1.
  • “A” tel que a ^ q = 1 mod p.

Gardez maintenant à l’esprit que dans le protocole Schnorr, ces 3 variables sont globales. Cela signifie que tout le monde connaît ces 3 variables pour un scénario particulier.

Nous arrivons maintenant aux deux clés, la clé privée secrète que nous appellerons «s» et la clé publique que nous appellerons «v».

s peut être n’importe quelle valeur tant que 0

v = un ^ -s mod q.

La clé publique «v» sera une connaissance globale et publique avec p, q et a. Cependant, SEULE Anna aura la connaissance de ce qu’est «s», car c’est sa clé privée.

Alors, maintenant que nous avons défini la variable, voyons comment l’échange d’informations et la validité de la déclaration d’Anna peuvent fonctionner SANS qu’elle révèle ce qu’est la clé privée.

Anna signe et envoie un message crypté

Supposons qu’Anna veuille envoyer un message «M» à Carl codé avec sa clé privée. Comment le fera-t-elle si elle suivait le protocole de Schnorr?

Premièrement, elle choisira un nombre aléatoire «r» tel que 0

Maintenant, elle va calculer une valeur x telle que:

X = a ^ r mod p.

Maintenant qu’elle a calculé la valeur de X, elle va concaténer cela avec le message d’origine. Qu’est-ce que la concaténation? Supposons que nous ayons deux chaînes «bonjour» et «monde». Si nous concaténons ces deux, alors nous obtiendrons «bonjour le monde». La concaténation signifie essentiellement ajouter deux chaînes et en faire une.

Donc, elle va concaténer M et X pour obtenir M || X. et elle va stocker le hachage de cette valeur dans e.

Fondamentalement, e = H (M || X) où H () est la fonction de hachage.

Enfin, lorsque tout cela sera fait, elle fera un dernier calcul. Elle va obtenir une valeur «y» telle que:

y = (r + s * e) mod q

Maintenant que tous les calculs sont terminés, elle va envoyer les informations suivantes à Carl:

  • Le message «M».
  • Les signatures e et y.

Carl reçoit le message et vérifie la preuve de connaissance d’Anna

Maintenant, Carl a reçu les informations suivantes d’Anna: Le message (M) et les signatures (e et y).

Parallèlement à cela, il dispose des informations suivantes qui sont connues de tous:

  • Clé publique d’Anna «v».
  • Le nombre premier qu’Anna a choisi «p».
  • «Q» qui est le facteur de «p-1» qu’Anna a choisi.
  • Et le «a» tel que a ^ q = 1 mod p, c’est aussi Anna a choisi.

Maintenant, Carl devra calculer X de telle sorte que:

X ’= a ^ y * v ^ e mod p.

Maintenant, faisons une simple substitution:

Nous savons que v = a ^ -s, substituons cela dans l’équation ci-dessus et nous obtenons:

  • X ‘= a ^ y * a ^ -se = a ^ (y-s * e).
  • Maintenant, nous savons aussi que y = r + s * e.
  • Ce qui signifie: r = y-s * e.

Remplaçons cette valeur dans l’équation ci-dessus:

  • On obtient: X ’= a ^ r.
  • Comme nous l’avons déjà vu plus haut: X = a ^ r.
  • Donc techniquement: X = X ».

Mais Carl ne connaît pas la valeur de «X» car il n’a jamais reçu cette valeur. Tout ce qu’il a reçu sont les suivants: Le message M, les signatures (e et y) et l’hôte des variables publiques (clé publique «v», p, q et a).

Il n’a jamais reçu «X», mais il sait que si Anna dit la vérité, alors X ’doit être égal à X, mais il connaît la valeur de e et le message M.

Il va donc résoudre e en procédant comme suit:

e = H (M || X ’).

Notez que précédemment nous avons résolu pour e en faisant: H (M || X).

Donc, selon cette logique, si les deux valeurs de e sont identiques, cela signifie que X = X ’.

Cela signifie également qu’Anna avait en effet la clé privée depuis le début et qu’elle ne mentait pas.

Examinons donc tout ce scénario à travers les trois propriétés des preuves zéro connaissance:

  • Complétude: Carl était convaincu de l’honnêteté d’Anna parce qu’à la fin X = X ».
  • Solidité: Le plan était solide car la seule façon pour Anna de prouver son honnêteté était d’utiliser sa clé privée. Elle n’aurait pas pu mentir sur la possession de la clé privée.
  • Zéro connaissance: Carl n’a jamais découvert ce qu’était la clé privée d’Anna.

Le protocole de Schnorr donne une application cryptographique du monde très réel de preuves zéro connaissance.

Comment rendre les preuves zéro connaissance non interactives?

Avec les anciens systèmes de vérification sans connaissance, il y avait un gros problème. Pour que cela fonctionne, le prouveur et le vérificateur devaient être en ligne en même temps. En d’autres termes, le processus était «interactif». Cela a rendu l’ensemble du système inefficace et presque impossible à mettre à l’échelle. Les vérificateurs ne pourraient pas être en ligne en même temps que les vérificateurs tout le temps? Il fallait un système pour rendre cela plus efficace.

En 1986, Fiat et Shamir ont inventé l’heuristique Fiat-Shamir et ont réussi à changer la preuve interactive de connaissance zéro en preuve de connaissance zéro non interactive. Cela a aidé l’ensemble du protocole à fonctionner sans aucune interaction. La procédure derrière elle est très simple.

Donc, pour vous donner un exemple, voici comment les preuves de connaissance zéro fonctionnaient avant Fiat et Shamir.

Prouvons cela en utilisant de simples logarithmes discrets.

  • Anna veut prouver à Carl qu’elle connaît une valeur x telle que y = g ^ x à une base g.
  • Anna choisit une valeur aléatoire v à partir d’un ensemble de valeurs Z, et calcule t = g ^ v et envoie t à Carl.
  • Carl choisit une valeur aléatoire c de l’ensemble Z et l’envoie à Anna.
  • Anna calcule r = v-c * x et renvoie r à Carl.
  • Carl vérifie si t = g ^ r * y ^ c tient ou non (puisque r = vc * x, y = g ^ x et par simple substitution, g ^ (vc * x) * g ^ c * x = g ^ v = t).
  • Carl ne connaît pas la valeur de x, en vérifiant simplement si t = g ^ r * y ^ c, il peut vérifier qu’Anna connaît bien la valeur de x.

Maintenant, alors que l’interaction ci-dessus est zéro-connaissance, le problème est qu’Anna et Carl doivent être en ligne et échanger des valeurs pour que cela fonctionne..

Comment Anna peut-elle prouver à Carl qu’elle a connaissance de quelque chose sans que Carl soit en ligne? Elle peut le faire en utilisant une simple fonction de hachage cryptographique, comme l’ont théorisé Fiat et Shamir.

Voyons comment l’exemple ci-dessus fonctionnerait de manière non interactive:

  • Anna veut prouver à Carl qu’elle connaît une valeur x telle que y = g ^ x à une base g.
  • Anna choisit une valeur aléatoire v dans un ensemble de valeurs Z et calcule t = g ^ v.
  • Anna calcule c = H (g, y, t) où H () est une fonction de hachage.
  • Anna calcule r = v – c * x.
  • Carl ou n’importe qui peut alors vérifier si t = g ^ r * y ^ c.

Ainsi, comme vous pouvez le voir, aucune preuve de connaissance n’a été rendue non interactive. Et c’est ce qui a jeté les bases de Zk-Snarks.

Quelle est l’utilisation de Zk-Snarks?

Zk-Snarks signifie «Argument non interactif succinct de connaissance zéro de la connaissance». Son utilisation dans la technologie blockchain moderne est immense. Pour comprendre son application, il est important de savoir comment fonctionne un contrat intelligent. Un contrat intelligent est essentiellement un dépôt de fonds qui est activé une fois qu’une fonction particulière est effectuée.

Par exemple. Anna met 100 ETH dans un contrat intelligent qu’elle conclut avec Carl. Carl doit faire une tâche particulière, à l’issue de laquelle Carl obtiendra les 100 ETH du contrat intelligent.

Cela se complique lorsque les tâches que Carl doit accomplir sont à plusieurs niveaux et confidentielles. Supposons que vous ayez conclu un contrat intelligent avec Anna. Désormais, vous n’obtiendrez le paiement que si vous faites A, B et C. Que faire si vous ne voulez pas révéler les détails de A, B et C parce qu’ils sont confidentiels pour votre entreprise et que vous ne voulez pas de concurrents pour savoir ce que tu as à faire?

Ce que fait Zk-Snarks, c’est qu’il prouve que ces étapes ont été prises dans le contrat intelligent sans révéler quelles sont réellement ces étapes. Il est très utile de vous protéger, vous et la vie privée de votre entreprise. Il peut simplement révéler une partie du processus sans montrer l’ensemble du processus lui-même et prouver que vous êtes honnête au sujet de vos réclamations..

Comment fonctionnent les ZkSnarks?

Un Zk-Snark se compose de 3 algorithmes: G, P et V.

G est un générateur de clé prend une entrée «lambda» (qui doit rester confidentielle et ne doit en aucun cas être révélée) et un programme C. Il procède ensuite à la génération de deux clés accessibles au public, une clé de vérification pk et une vérification clé vk. Ces clés sont à la fois publiques et disponibles pour toutes les parties concernées.

P est le prouveur qui va utiliser 3 items comme entrée. La clé de démonstration pk, l’entrée aléatoire x, qui est accessible au public, et la déclaration privée dont ils veulent prouver la connaissance sans révéler ce qu’elle est réellement. Appelons cette déclaration privée “w”. L’algorithme P génère une preuve prf telle que: prf = P (pk, x, w).

L’algorithme de vérification V a essentiellement renvoyé une variable booléenne. Une variable booléenne n’a que deux choix, elle peut être TRUE ou elle peut être FALSE. Ainsi, le vérificateur prend la clé de vérification, l’entrée publique x et la preuve prf comme entrées telles que:

V (vk, x, prf)

..et retourne TRUE si le prouveur est correct et faux sinon.

Maintenant, à propos du paramètre lambda. La valeur du «Lambda» doit rester confidentielle car tout le monde peut alors l’utiliser pour générer de fausses preuves. Ces fausses preuves renverront une valeur TRUE indépendamment du fait que le prouveur ait réellement connaissance de l’instruction privée «w» ou non.

Fonctionnalité de ZkSnarks

Pour montrer la fonctionnalité d’un Zk-Snark, nous allons utiliser le même exemple de fonction que Christian Lundkvist a utilisé dans son article pour Consensys. Voici à quoi ressemble le programme d’exemple:

fonction C (x, w)

{

retour (sha256 (w) == x);

}

Fondamentalement, la fonction C prend en entrée 2 valeurs, une valeur de hachage publique «x» et la déclaration secrète qui doit être vérifiée «w». Si la valeur de hachage SHA-256 de w est égale à «x», la fonction renvoie TRUE sinon elle retourne FALSE. (SHA-256 est la fonction de hachage utilisée dans le bitcoin).

Ramenons nos vieux amis Anna et Carl pour cet exemple. Anna est le prouveur et Carl le sceptique est le vérificateur.

La première chose que Carl, en tant que vérificateur, doit faire est de générer la clé de vérification et de vérification à l’aide du générateur G. Pour cela, Carl doit générer la valeur aléatoire «lambda». Comme indiqué ci-dessus, cependant, il doit être très prudent avec Lambda car il ne peut pas faire connaître à Anna sa valeur pour l’empêcher de créer de fausses preuves..

Quoi qu’il en soit, voici à quoi cela ressemblera:

G (C, lambda) = (pk, vk).

Maintenant que les deux clés sont générées, Anna doit prouver la validité de l’énoncé en générant la preuve. Elle va générer la preuve en utilisant l’algorithme de démonstration P. Elle va prouver qu’elle connaît la valeur secrète «w» qui hache (lors de l’analyse via SHA-256) pour donner la sortie x. Ainsi, l’algorithme de démonstration pour la génération de preuves ressemble à ceci:

prf = P (pk, x, w).

Maintenant qu’elle a généré la preuve «prf», elle va donner la valeur à Carl qui va enfin exécuter l’algorithme de vérification de Zk-Snarks:

Voici à quoi cela ressemblera:

V (vk, x, prf).

Ici, vk est la clé de vérification et x est la valeur de hachage connue et prf est la preuve qu’il a obtenue d’Anna. Si cet algorithme renvoie TRUE, cela signifie qu’Anna était honnête et qu’elle avait en effet la valeur secrète «w». S’il renvoie FALSE, cela signifie qu’Anna mentait en sachant ce que “w” était.

L’utilisation de ZkSnarks dans la crypto-monnaie

Qu'est-ce que zkSNARKs: Spooky Moon Math

Courtoisie d’image: Zcash

Zcash est une crypto-monnaie lancée par Zerocoin Electic Coin Company le 9 septembre 2016 et est le premier exemple de crypto-monnaie mariant les concepts de la technologie blockchain avec ZkSnarks. Il vise à fournir à ses utilisateurs des espaces de transaction totalement sûrs et protégés sans révéler de détails (tels que leurs adresses) à qui que ce soit..

Ethereum souhaite intégrer ZkSnarks alors qu’il entre dans sa phase Metropolis et la façon dont ils prévoient de le faire est de créer une alliance avec Zcash qui comprendra l’échange mutuel de valeur. Le développeur en chef de Zcash, Zooko Wilcox, a fait une présentation dans DevCon2 à Shanghai qui a exploré l’avenir d’une telle alliance. Selon lui, il y a 3 façons dont Z-Cash et par extension, zk-snarks pourraient être intégrés à Ethereum.

La première méthode s’appelle Baby Zoe (Zoe = Zcash on Ethereum). Il ajoute un pré-compilateur zk-snark sur Ethereum et crée un mini contrat intelligent Zcash sur Ethereum. L’idée est de voir si le système Ethereum peut créer un DAPP activé zk-snark au-dessus de sa blockchain.

La deuxième méthode consiste à intégrer la calculabilité Ethereum dans la blockchain Zcash. Comme Wilcox le dit, le plus grand atout d’Ethereum est sa calculabilité et les gens veulent voir s’ils peuvent l’intégrer sur une blockchain basée sur zk-snark comme Zcash. Les gens peuvent-ils créer des DAPPS sur une blockchain basée sur des preuves de connaissance zéro? C’est quelque chose qu’ils attendent de voir.

Le troisième et l’aspect le plus excitant est Project Alchemy. Il s’agit essentiellement de la connexion et de l’interopérabilité des deux blockchains de sorte que l’on puisse se déplacer de manière transparente entre les deux. La façon dont Zcash prévoit de le faire est de cloner le relais BTC. C’est un script Ethereum qui a été écrit pour créer un client léger Bitcoin dans Ethereum. Le clone Zcash utilisera le même concept pour créer un client léger Zcash dans Ethereum.

Si cela fonctionne, nous aurons le premier système de monnaie décentralisé au monde qui facilite la création de DAPPS sans aucune connaissance enracinée..

Regarder vers l’avant

Il ne fait aucun doute que l’introduction de preuves de connaissance zéro va changer la donne pour Ethereum. Dans un monde de plus en plus ouvert, connecté et supervisé, toute forme d’intimité est la bienvenue. Reste à voir comment l’intégration se produit, mais en se basant sur les concepts théoriques eux-mêmes, on ne peut s’empêcher de s’exciter.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me