レッスン3

Comment combiner la preuve de réserves avec la technologie zk-SNARK?

Cette leçon explique ce qu'est la technologie zk-SNARK et comment les Preuves de réserves sont optimisées en utilisant la technologie zk-SNARK

Contexte

La preuve de connaissance nulle (ZKP) est une technique cryptographique d'abord proposée par S. Goldwasser, S. Micali et C. Rackoff au début des années 1980 dans un article intituléLa complexité des connaissances des systèmes de preuve interactifsDans l'article, il a été conceptualisé comme un modèle théorique pour résoudre le problème de la vérification des énoncés mathématiques sans révéler les preuves. Ce concept a attiré une attention généralisée dans le milieu universitaire car il remet en question les limites des techniques cryptographiques traditionnelles et propose de nouvelles méthodes pour le traitement des informations sensibles.

Au fil du temps, le ZKP est passé d'un concept théorique abstrait à des protocoles concrets pouvant être intégrés dans diverses applications. En 2010, Groth a publié un article intitulé " Arguments de connaissance nulle non interactifs basés sur les appariements courtsqui est devenu le jalon théorique pour zk-SNARK (Argument de Connaissance Succinct Non Interactif Zéro-Connaissance), une solution importante en ZKP. Le progrès le plus important dans l'application de la preuve de zéro-connaissance est le système de preuve de zéro-connaissance utilisé par Z-cash en 2015, qui fournit une protection de la vie privée pour les transactions et les montants. Par la suite, zk-SNARK combiné avec des contrats intelligents, étendant son application à un plus large éventail de scénarios d'application.

Principes de base de zk-SNARK

La ZKP traditionnelle respecte trois principes:

  • Complétude : Si la déclaration est vraie, un prouveur honnête peut toujours convaincre le vérificateur.
  • Solidité : Si l'énoncé est faux, tout fraudeur peut uniquement induire en erreur le vérificateur avec une faible probabilité.
  • Zéro-connaissance : Si l'énoncé est vrai, le vérificateur ne pourra acquérir autre chose que le fait que l'énoncé est vrai. En d'autres termes, le processus de vérification ne révélera aucune information pouvant être utilisée pour construire la preuve.

Le principe de ZKP peut être compris à travers un exemple simple : Si je dois prouver à A que j'ai le numéro de téléphone de B, je n'ai pas besoin de révéler directement le numéro de téléphone de B. Au lieu de cela, je peux directement composer le numéro de téléphone de B et prouver que j'ai effectivement le numéro de téléphone de B après avoir réussi à l'appeler. Ce processus ne divulguera pas le numéro de téléphone de B.
zk-SNARK renforce encore ces principes avec les caractéristiques suivantes :

  • Zéro-connaissance : Le vérificateur ne tire aucune information utile de la preuve.
  • Succinct: La taille de la preuve est petite (généralement quelques dizaines d'octets) et le temps de vérification est court (généralement quelques millisecondes);
  • Non interactif : Le prouveur n'a besoin d'envoyer la preuve au vérificateur qu'une seule fois, sans nécessiter de communication supplémentaire.
  • Paramètres de confiance: Le prouveur et le validateur doivent tous deux utiliser une chaîne de référence commune (CRS) générée par un tiers de confiance, qui peut contenir des informations sensibles qui, si elles sont divulguées ou altérées, pourraient menacer la sécurité du système.

Dans l'article de Groth, il a proposé une méthode de preuve de connaissance nulle non interactive basée sur les appariements pour transformer un problème computationnel en un programme arithmétique quadratique (QAP). Cette méthode utilise la cryptographie sur courbes elliptiques et les fonctions de hachage pour construire une preuve efficace. Les conceptions zk-SNARK ultérieures impliquent généralement quatre étapes.

  • Configuration du système : Exécutée par un tiers de confiance. Elle implique la génération d'un CRS, comprenant une clé de preuve (pk) et une clé de vérification (vk). Ce processus doit être exécuté une seule fois, et le CRS peut être réutilisé plusieurs fois.
  • Encodage de problème : Transformer un problème de calcul f (x) = y en un PAQ de forme A (x) · B (x) = C (x) · Z (x), où A (x), B (x), C (x) sont des polynômes déterminés par la structure du circuit de f, Z (x) est un polynôme fixe, x est un point choisi au hasard et y est la sortie de f. Ce processus peut être effectué à l’avance par un prouveur ou un vérificateur, ou par un tiers.
  • Génération de la preuve : Effectuée par le prouveur. Elle consiste à utiliser l'entrée w de pk, x et f pour générer une preuve \pi, prouvant qu'il connaît un w qui satisfait f (w) = y sans révéler la valeur spécifique de w. Ce processus implique des calculs polynomiaux, des opérations sur les courbes elliptiques et des opérations de fonction de hachage, générant finalement un \pi composé de plusieurs points de courbe elliptique et d'une valeur de hachage.
  • Vérification de la preuve: Effectuée par le vérificateur. Elle implique l'utilisation de vk, x, y et \pi pour la vérification, déterminant si le prouveur connaît un w qui satisfait f (w) = y. Ce processus implique également des calculs polynomiaux, des opérations sur des courbes elliptiques et des opérations de fonction de hachage. Il obtient enfin une valeur booléenne indiquant si la preuve est valide.

Pour illustrer avec un exemple simple, supposons que vous ayez une carte au trésor qui peut vous guider vers l'emplacement exact d'un trésor enterré. Vous voulez prouver à quelqu'un que vous connaissez l'emplacement du trésor, mais vous ne voulez pas révéler le contenu de la carte au trésor ni l'emplacement réel du trésor. Si vous utilisez la technologie zk-SNARK, vous devez créer un puzzle complexe de la carte au trésor. Vous choisissez un petit morceau du puzzle crucial (une preuve) et le montrez à l'autre personne, les convaincant que vous savez comment l'ensemble du puzzle, c'est-à-dire l'emplacement du trésor, s'emboîte sans révéler l'ensemble du puzzle. Cependant, pour ce faire, vous devez obtenir des marques spéciales d'une imprimerie de confiance, qui sont utilisées pour prouver l'authenticité de votre morceau de puzzle.

Combinaison des réserves d'échange avec zk-SNARK

La discussion précédente mentionnait que zk-SNARK permet de définir une chaîne de référence commune, ce qui signifie que des contraintes peuvent être définies sur le circuit en cours d'exécution. Prenons la réserve de Gate.io comme exemple, elle définit cinq contraintes fondamentales dans le circuit, comme indiqué ci-dessous :

① Avant d'insérer les actifs nets de l'utilisateur dans l'arbre de Merkle, le nœud correspondant à l'identifiant de l'utilisateur est vide.
② Calculer les actifs/passifs totaux de l'utilisateur en fonction de la liste d'actifs de l'utilisateur et du prix de chaque actif. Les actifs totaux doivent être supérieurs aux passifs totaux.
③ Ajoutez les actifs/passifs de l'utilisateur aux actifs/passifs de l'échange.
④ Calculer le hachage d'état de l'utilisateur en utilisant l'identifiant de l'utilisateur, les actifs/passifs totaux et la liste des actifs. Insérer l'état de l'utilisateur dans l'arbre de Merkle pour obtenir une nouvelle racine de Merkle.
⑤ La valeur de hachage du nœud racine de l'arbre avant que l'utilisateur précédent crée une opération utilisateur doit être égale à la valeur de hachage après que l'utilisateur ultérieur crée une opération utilisateur.
(L'opération ① peut éviter que les données des nœuds ne soient fausses, l'opération ② peut éviter les comptes à solde négatif, et l'opération ⑤ peut garantir que les données des utilisateurs ne sont pas modifiées avant et après l'opération.)
Cela garantit la résolution du problème de solde négatif. Les données de l'échange doivent seulement passer par le circuit pour effectuer automatiquement des vérifications de contraintes et obtenir le nombre d'actifs. Cependant, cette solution nécessite une certaine puissance de calcul et des conditions matérielles. Il faut 15 jours pour calculer la preuve des actifs de 10 millions d'utilisateurs sur une machine à 32 cœurs avec 128 Go de RAM. Le calcul de la Preuve de réserves peut être parallélisé. S'il y a 10 machines, cela ne prend que 1,5 jours.

Conclusion

En définissant des contraintes pertinentes, zk-SNARK peut éviter l'apparition de problèmes de valeur négative et mieux protéger la vie privée et la sécurité des utilisateurs. Le Proof of Reserves de Gate.io peut désormais prouver les ratios de réserve pour plus de 100 pièces, et les utilisateurs peuvent le consulter en un simple clic sur le lien. Dans la prochaine leçon, nous vous emmènerons pour vérifier la sécurité de vos actifs en 3 minutes.

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。
カタログ
レッスン3

Comment combiner la preuve de réserves avec la technologie zk-SNARK?

Cette leçon explique ce qu'est la technologie zk-SNARK et comment les Preuves de réserves sont optimisées en utilisant la technologie zk-SNARK

Contexte

La preuve de connaissance nulle (ZKP) est une technique cryptographique d'abord proposée par S. Goldwasser, S. Micali et C. Rackoff au début des années 1980 dans un article intituléLa complexité des connaissances des systèmes de preuve interactifsDans l'article, il a été conceptualisé comme un modèle théorique pour résoudre le problème de la vérification des énoncés mathématiques sans révéler les preuves. Ce concept a attiré une attention généralisée dans le milieu universitaire car il remet en question les limites des techniques cryptographiques traditionnelles et propose de nouvelles méthodes pour le traitement des informations sensibles.

Au fil du temps, le ZKP est passé d'un concept théorique abstrait à des protocoles concrets pouvant être intégrés dans diverses applications. En 2010, Groth a publié un article intitulé " Arguments de connaissance nulle non interactifs basés sur les appariements courtsqui est devenu le jalon théorique pour zk-SNARK (Argument de Connaissance Succinct Non Interactif Zéro-Connaissance), une solution importante en ZKP. Le progrès le plus important dans l'application de la preuve de zéro-connaissance est le système de preuve de zéro-connaissance utilisé par Z-cash en 2015, qui fournit une protection de la vie privée pour les transactions et les montants. Par la suite, zk-SNARK combiné avec des contrats intelligents, étendant son application à un plus large éventail de scénarios d'application.

Principes de base de zk-SNARK

La ZKP traditionnelle respecte trois principes:

  • Complétude : Si la déclaration est vraie, un prouveur honnête peut toujours convaincre le vérificateur.
  • Solidité : Si l'énoncé est faux, tout fraudeur peut uniquement induire en erreur le vérificateur avec une faible probabilité.
  • Zéro-connaissance : Si l'énoncé est vrai, le vérificateur ne pourra acquérir autre chose que le fait que l'énoncé est vrai. En d'autres termes, le processus de vérification ne révélera aucune information pouvant être utilisée pour construire la preuve.

Le principe de ZKP peut être compris à travers un exemple simple : Si je dois prouver à A que j'ai le numéro de téléphone de B, je n'ai pas besoin de révéler directement le numéro de téléphone de B. Au lieu de cela, je peux directement composer le numéro de téléphone de B et prouver que j'ai effectivement le numéro de téléphone de B après avoir réussi à l'appeler. Ce processus ne divulguera pas le numéro de téléphone de B.
zk-SNARK renforce encore ces principes avec les caractéristiques suivantes :

  • Zéro-connaissance : Le vérificateur ne tire aucune information utile de la preuve.
  • Succinct: La taille de la preuve est petite (généralement quelques dizaines d'octets) et le temps de vérification est court (généralement quelques millisecondes);
  • Non interactif : Le prouveur n'a besoin d'envoyer la preuve au vérificateur qu'une seule fois, sans nécessiter de communication supplémentaire.
  • Paramètres de confiance: Le prouveur et le validateur doivent tous deux utiliser une chaîne de référence commune (CRS) générée par un tiers de confiance, qui peut contenir des informations sensibles qui, si elles sont divulguées ou altérées, pourraient menacer la sécurité du système.

Dans l'article de Groth, il a proposé une méthode de preuve de connaissance nulle non interactive basée sur les appariements pour transformer un problème computationnel en un programme arithmétique quadratique (QAP). Cette méthode utilise la cryptographie sur courbes elliptiques et les fonctions de hachage pour construire une preuve efficace. Les conceptions zk-SNARK ultérieures impliquent généralement quatre étapes.

  • Configuration du système : Exécutée par un tiers de confiance. Elle implique la génération d'un CRS, comprenant une clé de preuve (pk) et une clé de vérification (vk). Ce processus doit être exécuté une seule fois, et le CRS peut être réutilisé plusieurs fois.
  • Encodage de problème : Transformer un problème de calcul f (x) = y en un PAQ de forme A (x) · B (x) = C (x) · Z (x), où A (x), B (x), C (x) sont des polynômes déterminés par la structure du circuit de f, Z (x) est un polynôme fixe, x est un point choisi au hasard et y est la sortie de f. Ce processus peut être effectué à l’avance par un prouveur ou un vérificateur, ou par un tiers.
  • Génération de la preuve : Effectuée par le prouveur. Elle consiste à utiliser l'entrée w de pk, x et f pour générer une preuve \pi, prouvant qu'il connaît un w qui satisfait f (w) = y sans révéler la valeur spécifique de w. Ce processus implique des calculs polynomiaux, des opérations sur les courbes elliptiques et des opérations de fonction de hachage, générant finalement un \pi composé de plusieurs points de courbe elliptique et d'une valeur de hachage.
  • Vérification de la preuve: Effectuée par le vérificateur. Elle implique l'utilisation de vk, x, y et \pi pour la vérification, déterminant si le prouveur connaît un w qui satisfait f (w) = y. Ce processus implique également des calculs polynomiaux, des opérations sur des courbes elliptiques et des opérations de fonction de hachage. Il obtient enfin une valeur booléenne indiquant si la preuve est valide.

Pour illustrer avec un exemple simple, supposons que vous ayez une carte au trésor qui peut vous guider vers l'emplacement exact d'un trésor enterré. Vous voulez prouver à quelqu'un que vous connaissez l'emplacement du trésor, mais vous ne voulez pas révéler le contenu de la carte au trésor ni l'emplacement réel du trésor. Si vous utilisez la technologie zk-SNARK, vous devez créer un puzzle complexe de la carte au trésor. Vous choisissez un petit morceau du puzzle crucial (une preuve) et le montrez à l'autre personne, les convaincant que vous savez comment l'ensemble du puzzle, c'est-à-dire l'emplacement du trésor, s'emboîte sans révéler l'ensemble du puzzle. Cependant, pour ce faire, vous devez obtenir des marques spéciales d'une imprimerie de confiance, qui sont utilisées pour prouver l'authenticité de votre morceau de puzzle.

Combinaison des réserves d'échange avec zk-SNARK

La discussion précédente mentionnait que zk-SNARK permet de définir une chaîne de référence commune, ce qui signifie que des contraintes peuvent être définies sur le circuit en cours d'exécution. Prenons la réserve de Gate.io comme exemple, elle définit cinq contraintes fondamentales dans le circuit, comme indiqué ci-dessous :

① Avant d'insérer les actifs nets de l'utilisateur dans l'arbre de Merkle, le nœud correspondant à l'identifiant de l'utilisateur est vide.
② Calculer les actifs/passifs totaux de l'utilisateur en fonction de la liste d'actifs de l'utilisateur et du prix de chaque actif. Les actifs totaux doivent être supérieurs aux passifs totaux.
③ Ajoutez les actifs/passifs de l'utilisateur aux actifs/passifs de l'échange.
④ Calculer le hachage d'état de l'utilisateur en utilisant l'identifiant de l'utilisateur, les actifs/passifs totaux et la liste des actifs. Insérer l'état de l'utilisateur dans l'arbre de Merkle pour obtenir une nouvelle racine de Merkle.
⑤ La valeur de hachage du nœud racine de l'arbre avant que l'utilisateur précédent crée une opération utilisateur doit être égale à la valeur de hachage après que l'utilisateur ultérieur crée une opération utilisateur.
(L'opération ① peut éviter que les données des nœuds ne soient fausses, l'opération ② peut éviter les comptes à solde négatif, et l'opération ⑤ peut garantir que les données des utilisateurs ne sont pas modifiées avant et après l'opération.)
Cela garantit la résolution du problème de solde négatif. Les données de l'échange doivent seulement passer par le circuit pour effectuer automatiquement des vérifications de contraintes et obtenir le nombre d'actifs. Cependant, cette solution nécessite une certaine puissance de calcul et des conditions matérielles. Il faut 15 jours pour calculer la preuve des actifs de 10 millions d'utilisateurs sur une machine à 32 cœurs avec 128 Go de RAM. Le calcul de la Preuve de réserves peut être parallélisé. S'il y a 10 machines, cela ne prend que 1,5 jours.

Conclusion

En définissant des contraintes pertinentes, zk-SNARK peut éviter l'apparition de problèmes de valeur négative et mieux protéger la vie privée et la sécurité des utilisateurs. Le Proof of Reserves de Gate.io peut désormais prouver les ratios de réserve pour plus de 100 pièces, et les utilisateurs peuvent le consulter en un simple clic sur le lien. Dans la prochaine leçon, nous vous emmènerons pour vérifier la sécurité de vos actifs en 3 minutes.

免責事項
* 暗号資産投資には重大なリスクが伴います。注意して進めてください。このコースは投資アドバイスを目的としたものではありません。
※ このコースはGate Learnに参加しているメンバーが作成したものです。作成者が共有した意見はGate Learnを代表するものではありません。