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.
La ZKP traditionnelle respecte trois principes:
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 :
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.
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.
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.
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.
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.
La ZKP traditionnelle respecte trois principes:
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 :
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.
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.
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.
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.