Vérification formelle des zk-SNARKs : méthode de preuve de mémoire
Lors de la vérification formelle des systèmes de zk-SNARKs, le traitement du sous-système mémoire représente un défi clé. Contrairement aux machines virtuelles traditionnelles, le zkVM utilise des tables d'exécution et des tables auxiliaires pour représenter l'état de la mémoire, ce qui nécessite des méthodes de vérification spéciales.
Le système de mémoire de zkWasm est composé d'une table d'exécution et d'une table de mémoire. La table d'exécution enregistre le processus d'exécution des instructions, tandis que la table de mémoire conserve tout l'historique des accès à la mémoire. Pour simplifier le développement, zkWasm fournit une couche d'abstraction, permettant d'opérer sur la mémoire via les deux fonctions alloc_memory_table_lookup_write_cell et alloc_memory_table_lookup_read_cell.
Dans le processus de vérification, nous considérons la table de mémoire comme une structure de données modifiable, construisant une carte d'adresses via la fonction memory_at. Cela permet de prouver que les contraintes générées par la fonction alloc sont équivalentes aux opérations set et get effectuées sur la carte, simplifiant ainsi la validation des instructions sous une forme similaire à celle d'un interpréteur non-ZK.
Pour empêcher les attaquants de manipuler la table de mémoire, zkWasm utilise un mécanisme de comptage pour suivre le nombre d'entrées valides. La table d'exécution et la table de mémoire maintiennent respectivement des compteurs, garantissant la cohérence entre les deux par des contraintes. Cela exige une plus grande précision lors de la vérification, nécessitant de prouver que chaque instruction correspond au bon nombre d'entrées dans la table de mémoire.
Le processus de vérification adopte une approche descendante, comprenant trois étapes :
Le nombre d'entrées que la commande estimée doit créer
Le nombre d'entrées dans le tableau des preuves ne dépasse pas les attentes.
Prouver par induction que cum_mops et instructions_mops sont toujours cohérents dans le tableau.
Cette méthode de validation détaillée aide à découvrir des erreurs potentielles, comme un problème clé dans le mécanisme de comptage des tables de saut.
Pour réaliser la vérification modulaire, nous avons divisé le système en trois parties indépendantes : la vérification du circuit d'instructions, la vérification de la table d'exécution et la mise en œuvre de la table de mémoire. Cette structure permet à plusieurs ingénieurs de travailler en parallèle, améliorant ainsi l'efficacité de la vérification.
Dans l'ensemble, bien que la validation zkVM présente des différences lors du traitement des états dynamiques, elle peut toujours adopter une approche modulaire similaire à celle de la validation des interprètes traditionnels en faisant correspondre les niveaux d'abstraction de l'implémentation. Cette approche minimise l'impact des différences, permettant à chaque instruction d'être validée de manière indépendante via l'interface get-set.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 J'aime
Récompense
15
7
Partager
Commentaire
0/400
AltcoinHunter
· 07-04 16:51
informations précieuses Mining佬
Voir l'originalRépondre0
PerpetualLonger
· 07-04 00:09
La gestion de la mémoire est cruciale.
Voir l'originalRépondre0
MercilessHalal
· 07-03 12:25
La méthode de validation est solide.
Voir l'originalRépondre0
BearHugger
· 07-02 01:45
Le coût est très élevé et n'est pas adapté à un usage commercial.
Méthode de vérification de la mémoire du système de preuve à connaissance nulle : comment zkWasm réalise la Vérification formelle
Vérification formelle des zk-SNARKs : méthode de preuve de mémoire
Lors de la vérification formelle des systèmes de zk-SNARKs, le traitement du sous-système mémoire représente un défi clé. Contrairement aux machines virtuelles traditionnelles, le zkVM utilise des tables d'exécution et des tables auxiliaires pour représenter l'état de la mémoire, ce qui nécessite des méthodes de vérification spéciales.
Le système de mémoire de zkWasm est composé d'une table d'exécution et d'une table de mémoire. La table d'exécution enregistre le processus d'exécution des instructions, tandis que la table de mémoire conserve tout l'historique des accès à la mémoire. Pour simplifier le développement, zkWasm fournit une couche d'abstraction, permettant d'opérer sur la mémoire via les deux fonctions alloc_memory_table_lookup_write_cell et alloc_memory_table_lookup_read_cell.
Dans le processus de vérification, nous considérons la table de mémoire comme une structure de données modifiable, construisant une carte d'adresses via la fonction memory_at. Cela permet de prouver que les contraintes générées par la fonction alloc sont équivalentes aux opérations set et get effectuées sur la carte, simplifiant ainsi la validation des instructions sous une forme similaire à celle d'un interpréteur non-ZK.
Pour empêcher les attaquants de manipuler la table de mémoire, zkWasm utilise un mécanisme de comptage pour suivre le nombre d'entrées valides. La table d'exécution et la table de mémoire maintiennent respectivement des compteurs, garantissant la cohérence entre les deux par des contraintes. Cela exige une plus grande précision lors de la vérification, nécessitant de prouver que chaque instruction correspond au bon nombre d'entrées dans la table de mémoire.
Le processus de vérification adopte une approche descendante, comprenant trois étapes :
Cette méthode de validation détaillée aide à découvrir des erreurs potentielles, comme un problème clé dans le mécanisme de comptage des tables de saut.
Pour réaliser la vérification modulaire, nous avons divisé le système en trois parties indépendantes : la vérification du circuit d'instructions, la vérification de la table d'exécution et la mise en œuvre de la table de mémoire. Cette structure permet à plusieurs ingénieurs de travailler en parallèle, améliorant ainsi l'efficacité de la vérification.
Dans l'ensemble, bien que la validation zkVM présente des différences lors du traitement des états dynamiques, elle peut toujours adopter une approche modulaire similaire à celle de la validation des interprètes traditionnels en faisant correspondre les niveaux d'abstraction de l'implémentation. Cette approche minimise l'impact des différences, permettant à chaque instruction d'être validée de manière indépendante via l'interface get-set.