Transmettre le titre original « Un paradigme à connaissance zéro : Partie 1 - Qu’est-ce qu’une zk-VM ? »
Que sont les preuves à divulgation nulle de connaissance (ZKP) ?
Si vous n’avez aucune connaissance préalable des preuves à divulgation nulle de connaissance (ZKP), cette vidéo de Wired explique le concept à cinq niveaux de difficulté de manière interactive avec des exemples et des démonstrations facilement compréhensibles. Hautement recommandé.
En termes simples, les ZKP permettent à une partie (prouveur) de prouver à une autre partie (le vérificateur) qu’elle sait quelque chose sans révéler ce que c’est ou toute information supplémentaire. Plus précisément, les ZKP prouvent la connaissance d’une donnée, ou la connaissance du résultat d’un calcul, sans révéler les données ou les entrées. Le processus de création d’une preuve à divulgation nulle de connaissance implique une série de modèles mathématiques pour transformer les résultats d’un calcul en une information autrement dénuée de sens qui prouve l’exécution réussie du code, qui peut ensuite être vérifiée.
Dans certains cas, il faut moins de travail pour vérifier la preuve, qui est construite après plusieurs cycles de conversions algébriques et de cryptographie, qu’il n’en faudrait pour exécuter le calcul. Cette combinaison unique de sécurité et d’évolutivité est ce qui fait de la cryptographie à connaissance nulle un outil si puissant.
zkSNARKs : Argument de connaissance non interactif succinct de la connaissance
zkSTARKs : Zero Knowledge Scalable Transparent Argument de la connaissance
(Note : le pont de Succinct utilise des SNARK mais SP1 est un protocole basé sur STARK)
Il convient de noter que tous les STARK sont des SNARK, mais que tous les SNARK ne sont pas des STARK.
Pour une meilleure compréhension générale des SNARK et des STARK, nous vous recommandons de lire cette série d’articles @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c"> écrite par Yan Zhang et Yi Sun d’Axiom, et cette collection d’articles dans le github de Ventali Tan.
Une machine virtuelle (VM) est un programme qui exécute des programmes. Dans le contexte, une zkVM est un ordinateur virtuel qui est implémenté comme un système pour générer des preuves à divulgation nulle de connaissance, ou un circuit universel, ou un outil, pour générer des ZKP pour tout programme ou calcul.
Les zkVM éliminent le besoin d’apprendre des mathématiques et de la cryptographie compliquées pour concevoir et coder ZK, et permettent à tout développeur d’exécuter des programmes écrits dans ses langages préférés et de générer des ZKP, ce qui facilite grandement l’intégration et l’interaction avec zéro connaissance. D’une manière générale, la plupart des références aux zkVM incluent implicitement les chaînes d’outils du compilateur et les systèmes de preuve ajoutés à la machine virtuelle qui exécute les programmes, et pas seulement la machine virtuelle elle-même. Ci-dessous, nous résumons les principaux composants d’une zkVM et leurs fonctions :
Les principaux composants d’une zkVM
La conception et l’implémentation de chaque composant sont régies par le choix de la preuve (SNARK ou STARK) et l’architecture du jeu d’instructions (ISA) de la zkVM. Traditionnellement, un ISA spécifie ce dont un processeur est capable (types de données, registres, mémoire, etc.) et la séquence d’actions que le processeur effectue lorsqu’il exécute un programme. Dans le contexte, l’ISA détermine le code machine qui est interprétable et exécutable par la machine virtuelle. Le choix d’un ISA peut entraîner des différences radicales dans l’accessibilité et la convivialité de la zkVM, ainsi que dans la vitesse et l’efficacité des processus de génération de preuves, et sous-tend la construction de toute zkVM.
Vous trouverez ci-dessous quelques exemples de zkVM et de leurs composants pour votre référence.
zkVM et leurs composants
Pour l’instant, nous nous concentrerons sur les interactions entre chaque composant à un niveau élevé afin de fournir un cadre pour comprendre les processus algébriques et cryptographiques ainsi que les compromis de conception d’une zkVM dans un article ultérieur.
Le diagramme suivant est un organigramme abstrait et généralisé d’une zkVM, divisé et catégorisé entre le format (entrées / sorties) d’un programme lorsqu’il se déplace à travers les composants d’une zkVM. Nous examinerons chaque processus en profondeur dans les articles suivants.
Flux général pour une zkVM
Le flux de processus d’une zkVM est généralement le suivant :
Le prouveur reçoit la trace et la représente comme un ensemble de polynômes liés par un ensemble de contraintes, traduisant essentiellement le calcul en algèbre en cartographiant mathématiquement les faits.
Le prouveur s’engage sur ces polynômes en utilisant un schéma d’engagement polynomial (PCS). Un schéma d’engagement est un protocole qui permet au prouveur de créer une empreinte digitale de certaines données X, ce qui est appelé un engagement envers X, et de prouver plus tard des faits sur X sans révéler X, en utilisant l’engagement envers X. Le PCS est l’empreinte digitale ; une version succincte « prétraitée » des contraintes sur le calcul. Cela permet au prouveur de prouver des faits sur le calcul, maintenant exprimés dans une équation polynomiale, en utilisant des valeurs aléatoires proposées par le vérificateur dans les étapes suivantes.
Le prouveur exécute une preuve Oracle interactive polynomiale (PIOP) pour montrer que les polynômes validés représentent une trace d’exécution qui satisfait les contraintes données. Un PIOP est un protocole de preuve interactif consistant en une série de tours dans lesquels le prouveur envoie des engagements aux polynômes, le vérificateur répond avec des valeurs de champ aléatoires et le prouveur fournit des évaluations du polynôme à ces valeurs aléatoires, comme si l’on « résolvait » l’équation polynomiale en utilisant des valeurs aléatoires pour persuader le vérificateur de manière probabiliste.
Application de l’heuristique Fiat-Shamir ; le prouveur exécute le PIOP en mode non interactif, où le comportement du vérificateur se limite à l’envoi de points de défi pseudo-aléatoires. En cryptographie, l’heuristique Fiat-Shamir convertit une preuve de connaissance interactive en une signature numérique pour vérification. Cette étape crypte la preuve et en fait une connaissance nulle.
Le prouveur doit convaincre le vérificateur que les évaluations polynomiales revendiquées sont correctes, en ce qui concerne les engagements polynomiaux qu’il a envoyés au vérificateur. Pour ce faire, le prouveur produit une preuve d'« évaluation » ou d'« ouverture », qui est fournie par le schéma d’engagement polynomial (empreinte).
En résumé, une preuve zkVM prouve, pour un programme donné, un résultat donné, et des conditions initiales données, qu’il existe une entrée qui fait que le programme produit le résultat donné lorsqu’il est exécuté à partir des conditions initiales données. Nous pouvons combiner cette instruction avec le flux de processus pour arriver à la description suivante d’une zkVM.
Une preuve zkVM prouve, pour un programme de machine virtuelle donné et une sortie donnée, qu’il existe une entrée qui amène le programme donné à produire la sortie donnée lorsqu’il est exécuté sur la machine virtuelle.
Quels sont les critères selon lesquels nous devrions évaluer les zkVM ? En d’autres termes, quand devrions-nous dire qu’une zkVM est meilleure qu’une autre ? À vrai dire, la réponse dépend du cas d’utilisation.
L’étude de marché de Lita suggère que pour la plupart des cas d’utilisation commerciale, les propriétés les plus importantes, à savoir la vitesse, l’efficacité et la concision, sont soit la vitesse, soit l’efficacité du cœur-temps, selon l’application. Certaines applications sont sensibles au prix et veulent optimiser la faible consommation d’énergie et la faible utilisation du capital dans la prouvation ; Pour ceux-ci, l’efficacité du temps de base est probablement la mesure la plus importante à optimiser. D’autres applications, en particulier les applications liées à la finance ou au trading, sont sensibles à la latence et souhaitent optimiser la vitesse.
La plupart des comparaisons de performance se concentrent exclusivement sur la vitesse, ce qui est important mais ne constitue pas une mesure holistique de la performance. Il existe également quelques propriétés importantes qui mesurent la fiabilité d’une zkVM ; dont la plupart ne sont pas conformes aux normes de production, même pour les leaders du marché.
Nous proposons par la présente que les zkVM soient évaluées sur les critères suivants, séparés en deux sous-ensembles :
Principaux critères d’évaluation des machines virtuelles zk
Base de référence : Mesure la fiabilité des zkVM
Performance : Mesure les capacités d’une zkVM
4.1 Base de référence : hypothèses relatives à l’exactitude, à la sécurité et à la confiance
Lors de l’évaluation des zkVM pour les applications critiques, l’exactitude et la sécurité doivent être considérées comme la base de référence. Il doit y avoir suffisamment de raisons d’être confiant quant à l’exactitude et une garantie revendiquée suffisamment solide. En outre, les hypothèses de confiance doivent être suffisamment faibles pour l’application.
Sans ces propriétés, la zkVM est potentiellement pire qu’inutile pour l’application, car elle peut ne pas fonctionner comme spécifié et exposer les utilisateurs au piratage et aux exploits.
i. Exactitude
L’exactitude est composée de trois propriétés :
Vous pouvez avoir la complétude sans la solidité ; Si le système de preuve prouve tout, y compris la fausseté, il est évident qu’il est complet mais pas solide. Inversement, vous pouvez avoir la solidité sans l’exhaustivité ; Si le système de preuve prouve qu’un programme a existé mais ne peut pas prouver les calculs, il est évidemment solide (après tout, il ne prouve jamais aucune fausseté), mais pas complet.
ii. Sécurité
En pratique, les trois propriétés d’exactitude ont des tolérances non nulles. Cela implique que toutes les preuves sont des probabilités statistiques d’exactitude, et non des certitudes absolues. Une tolérance fait référence à la probabilité maximale tolérable qu’une propriété échoue. Les tolérances zéro sont bien sûr l’idéal, mais les zkVM n’atteignent pas les tolérances zéro sur toutes ces propriétés dans la pratique. La solidité et l’exhaustivité parfaites semblent être incompatibles avec la concision, et il n’y a pas de méthodes connues pour atteindre une connaissance nulle parfaite. Une façon courante de mesurer la sécurité est en bits de sécurité, où une tolérance de 1 / (2^n) est appelée n bits de sécurité. Plus il y a de sécurité, mieux c’est.
Si une zkVM est parfaitement correcte, cela n’implique pas nécessairement qu’elle est fiable. L’exactitude implique seulement que la zkVM satisfait ses propriétés de sécurité jusqu’aux tolérances revendiquées. Cela ne signifie pas que les tolérances alléguées sont suffisamment faibles pour être prêtes à être commercialisées. De plus, si une zkVM est suffisamment sécurisée, cela ne signifie pas qu’elle est correcte ; La sécurité fait référence aux tolérances revendiquées, et non aux tolérances réellement atteintes. Ce n’est que lorsqu’une zkVM est à la fois parfaitement correcte et suffisamment sûre que l’on peut dire qu’elle est fiable jusqu’aux tolérances revendiquées.
iii. Hypothèses de confiance
Lorsque les zkVM ont des hypothèses de confiance, cela prend généralement la forme d’un processus de configuration approuvé. Un processus de configuration pour un système d’épreuve ZK s’exécute une fois, avant que la première épreuve ne soit générée à l’aide du système d’épreuve, afin de générer des informations appelées « données de configuration ». Dans un processus de configuration approuvé, un ou plusieurs individus génèrent un caractère aléatoire qui est incorporé dans les données de configuration, et il faut supposer qu’au moins un de ces individus a supprimé le caractère aléatoire qu’il a incorporé dans les données de configuration.
Il existe deux modèles courants d’hypothèse de confiance dans la pratique.
Une hypothèse de confiance majoritaire honnête stipule que sur un ensemble de N individus, plus de N/2 de ces individus ont fait preuve d’intégrité dans certaines interactions particulières avec le système, qui est couramment utilisé par les blockchains
Une hypothèse de confiance « 1 sur N » stipule que sur un ensemble de N individus, au moins un de ces individus a fait preuve d’intégrité dans une ou plusieurs interactions particulières avec le système, ce qui est couramment utilisé par les outils et applications basés sur MPC.
Il est généralement admis que toutes choses étant égales par ailleurs, les zkVM sans hypothèses de confiance sont plus sûres que les zkVM qui nécessitent des hypothèses de confiance.
4.2 Le trilemme de la zkVM : équilibrer la vitesse, l’efficacité et la concision dans les zkVM
Le trilemme de la zkVM : vitesse, efficacité et concision
La rapidité, l’efficacité et la concision sont toutes des propriétés à échelle mobile. Tous ces facteurs contribuent au coût de l’utilisateur final de zkVM. La façon dont ils doivent être pondérés dans une évaluation dépend de l’application. Souvent, la solution la plus rapide n’est pas la plus efficace ou la plus succincte ; La solution la plus succincte n’est pas la plus rapide ni la plus efficace ; et ainsi de suite. Définissons d’abord chaque propriété avant d’expliquer leur relation
i. Vitesse
La vitesse doit être définie et mesurée par rapport à des programmes, des intrants et des systèmes d’essai spécifiques pour s’assurer qu’elle peut être évaluée quantitativement. Cette métrique est essentielle pour les applications sensibles à la latence où la disponibilité rapide des preuves est essentielle, mais s’accompagne d’une surcharge plus élevée et de tailles d’épreuve plus importantes
ii. Efficience
Le prouveur consomme deux types de ressources : le temps du cœur et l’espace. L’efficacité peut donc être subdivisée en efficacité du temps de base et efficacité de l’espace.
Efficacité cœur-temps : Temps moyen de fonctionnement du prouveur sur tous les cœurs multiplié par le nombre de cœurs exécutant le prouveur. Pour un étalon monocœur, la consommation de temps de cœur et la vitesse sont la même chose. Pour un étalon multicœur fonctionnant en mode multicœur sur un système multicœur, la consommation de temps de cœur et la vitesse ne sont pas la même chose. Si un programme utilise pleinement 5 cœurs ou threads pendant 5 secondes, cela représenterait 25 secondes de temps utilisateur et 5 secondes de temps d’horloge murale.
Efficacité de l’espace : Fait référence à la capacité de stockage utilisée, telle que la RAM
Le temps de l’utilisateur est intéressant en tant qu’approximation de l’énergie consommée par l’exécution d’un calcul. Dans une situation où tous les cœurs sont pleinement utilisés presque tout le temps, la consommation d’énergie d’un processeur doit rester relativement constante. Dans cette situation, le temps passé par l’utilisateur à exécuter du code en mode utilisateur, principalement en mode utilisateur, doit être à peu près linéairement proportionnel au nombre de wattheures (c’est-à-dire d’énergie) consommés par cette exécution de code.
L’économie de la consommation d’énergie, ou de l’utilisation des ressources informatiques, devrait être intéressante du point de vue de toute opération d’essai qui a une échelle suffisante pour que sa facture d’énergie (ou sa facture de cloud computing) pour l’étalonnage représente un coût opérationnel considérable. Pour ces raisons, le temps de l’utilisateur est une mesure intéressante. La réduction des coûts de vérification permet aux fournisseurs de services de répercuter les prix de vérification plus bas sur les clients sensibles aux coûts.
Les deux types d’efficacité sont liés à la consommation d’énergie du processus d’étalonnage et à la quantité de capital utilisée par le processus d’étalonnage, qui se rapporte au coût financier de l’étalonnage. Pour opérationnaliser la définition de l’efficacité pour la mesure, la définition doit être faite par rapport à un ou plusieurs programmes d’essai, à un ou plusieurs intrants d’essai à chacun de ces programmes et à un ou plusieurs systèmes d’essai.
iii. Concision
La concision est un composite de trois mesures distinctes, la complexité de la vérification des preuves étant subdivisée :
La vérification est généralement une opération à cœur unique, donc la vitesse et l’efficacité du temps de cœur sont généralement équivalentes dans ce contexte. Comme pour la vitesse et l’efficacité, l’opérationnalisation de la définition de la concision nécessite de spécifier des ensembles de programmes de test, d’entrées de test et de systèmes de test.
Une fois chaque propriété de performance définie, nous illustrons maintenant les effets dimunitifs de l’optimisation d’une propriété par rapport aux autres.
En général, optimiser pour une qualité signifie ne pas optimiser pour une autre qualité, et donc une analyse multidimensionnelle est nécessaire pour choisir une solution optimale au cas par cas.
Une bonne façon de pondérer ces propriétés dans une évaluation peut être de définir des niveaux acceptables pour chaque propriété, puis de déterminer quelles propriétés sont les plus importantes. Les propriétés les plus importantes doivent être optimisées, sous réserve de maintenir des niveaux suffisamment bons sur toutes les autres propriétés.
Ci-dessous, nous résumons chaque propriété et leurs principales considérations :
Propriétés d’évaluation des zkVM
Avec le tableau ci-dessus, nous concluons ici le premier article de notre série. Dans les prochains articles, nous nous appuierons sur l’organigramme ci-dessus pour expliquer les processus arithmétiques et cryptographiques courants dans les zkVM.
Si vous avez trouvé cela utile, visitez notre site Web et notre gitbook pour en savoir plus sur ce que nous construisons chez Lita.
Suivez-nous également sur X et Discord pour rester à jour afin de ne pas manquer le reste de la série
Transmettre le titre original « Un paradigme à connaissance zéro : Partie 1 - Qu’est-ce qu’une zk-VM ? »
Que sont les preuves à divulgation nulle de connaissance (ZKP) ?
Si vous n’avez aucune connaissance préalable des preuves à divulgation nulle de connaissance (ZKP), cette vidéo de Wired explique le concept à cinq niveaux de difficulté de manière interactive avec des exemples et des démonstrations facilement compréhensibles. Hautement recommandé.
En termes simples, les ZKP permettent à une partie (prouveur) de prouver à une autre partie (le vérificateur) qu’elle sait quelque chose sans révéler ce que c’est ou toute information supplémentaire. Plus précisément, les ZKP prouvent la connaissance d’une donnée, ou la connaissance du résultat d’un calcul, sans révéler les données ou les entrées. Le processus de création d’une preuve à divulgation nulle de connaissance implique une série de modèles mathématiques pour transformer les résultats d’un calcul en une information autrement dénuée de sens qui prouve l’exécution réussie du code, qui peut ensuite être vérifiée.
Dans certains cas, il faut moins de travail pour vérifier la preuve, qui est construite après plusieurs cycles de conversions algébriques et de cryptographie, qu’il n’en faudrait pour exécuter le calcul. Cette combinaison unique de sécurité et d’évolutivité est ce qui fait de la cryptographie à connaissance nulle un outil si puissant.
zkSNARKs : Argument de connaissance non interactif succinct de la connaissance
zkSTARKs : Zero Knowledge Scalable Transparent Argument de la connaissance
(Note : le pont de Succinct utilise des SNARK mais SP1 est un protocole basé sur STARK)
Il convient de noter que tous les STARK sont des SNARK, mais que tous les SNARK ne sont pas des STARK.
Pour une meilleure compréhension générale des SNARK et des STARK, nous vous recommandons de lire cette série d’articles @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c"> écrite par Yan Zhang et Yi Sun d’Axiom, et cette collection d’articles dans le github de Ventali Tan.
Une machine virtuelle (VM) est un programme qui exécute des programmes. Dans le contexte, une zkVM est un ordinateur virtuel qui est implémenté comme un système pour générer des preuves à divulgation nulle de connaissance, ou un circuit universel, ou un outil, pour générer des ZKP pour tout programme ou calcul.
Les zkVM éliminent le besoin d’apprendre des mathématiques et de la cryptographie compliquées pour concevoir et coder ZK, et permettent à tout développeur d’exécuter des programmes écrits dans ses langages préférés et de générer des ZKP, ce qui facilite grandement l’intégration et l’interaction avec zéro connaissance. D’une manière générale, la plupart des références aux zkVM incluent implicitement les chaînes d’outils du compilateur et les systèmes de preuve ajoutés à la machine virtuelle qui exécute les programmes, et pas seulement la machine virtuelle elle-même. Ci-dessous, nous résumons les principaux composants d’une zkVM et leurs fonctions :
Les principaux composants d’une zkVM
La conception et l’implémentation de chaque composant sont régies par le choix de la preuve (SNARK ou STARK) et l’architecture du jeu d’instructions (ISA) de la zkVM. Traditionnellement, un ISA spécifie ce dont un processeur est capable (types de données, registres, mémoire, etc.) et la séquence d’actions que le processeur effectue lorsqu’il exécute un programme. Dans le contexte, l’ISA détermine le code machine qui est interprétable et exécutable par la machine virtuelle. Le choix d’un ISA peut entraîner des différences radicales dans l’accessibilité et la convivialité de la zkVM, ainsi que dans la vitesse et l’efficacité des processus de génération de preuves, et sous-tend la construction de toute zkVM.
Vous trouverez ci-dessous quelques exemples de zkVM et de leurs composants pour votre référence.
zkVM et leurs composants
Pour l’instant, nous nous concentrerons sur les interactions entre chaque composant à un niveau élevé afin de fournir un cadre pour comprendre les processus algébriques et cryptographiques ainsi que les compromis de conception d’une zkVM dans un article ultérieur.
Le diagramme suivant est un organigramme abstrait et généralisé d’une zkVM, divisé et catégorisé entre le format (entrées / sorties) d’un programme lorsqu’il se déplace à travers les composants d’une zkVM. Nous examinerons chaque processus en profondeur dans les articles suivants.
Flux général pour une zkVM
Le flux de processus d’une zkVM est généralement le suivant :
Le prouveur reçoit la trace et la représente comme un ensemble de polynômes liés par un ensemble de contraintes, traduisant essentiellement le calcul en algèbre en cartographiant mathématiquement les faits.
Le prouveur s’engage sur ces polynômes en utilisant un schéma d’engagement polynomial (PCS). Un schéma d’engagement est un protocole qui permet au prouveur de créer une empreinte digitale de certaines données X, ce qui est appelé un engagement envers X, et de prouver plus tard des faits sur X sans révéler X, en utilisant l’engagement envers X. Le PCS est l’empreinte digitale ; une version succincte « prétraitée » des contraintes sur le calcul. Cela permet au prouveur de prouver des faits sur le calcul, maintenant exprimés dans une équation polynomiale, en utilisant des valeurs aléatoires proposées par le vérificateur dans les étapes suivantes.
Le prouveur exécute une preuve Oracle interactive polynomiale (PIOP) pour montrer que les polynômes validés représentent une trace d’exécution qui satisfait les contraintes données. Un PIOP est un protocole de preuve interactif consistant en une série de tours dans lesquels le prouveur envoie des engagements aux polynômes, le vérificateur répond avec des valeurs de champ aléatoires et le prouveur fournit des évaluations du polynôme à ces valeurs aléatoires, comme si l’on « résolvait » l’équation polynomiale en utilisant des valeurs aléatoires pour persuader le vérificateur de manière probabiliste.
Application de l’heuristique Fiat-Shamir ; le prouveur exécute le PIOP en mode non interactif, où le comportement du vérificateur se limite à l’envoi de points de défi pseudo-aléatoires. En cryptographie, l’heuristique Fiat-Shamir convertit une preuve de connaissance interactive en une signature numérique pour vérification. Cette étape crypte la preuve et en fait une connaissance nulle.
Le prouveur doit convaincre le vérificateur que les évaluations polynomiales revendiquées sont correctes, en ce qui concerne les engagements polynomiaux qu’il a envoyés au vérificateur. Pour ce faire, le prouveur produit une preuve d'« évaluation » ou d'« ouverture », qui est fournie par le schéma d’engagement polynomial (empreinte).
En résumé, une preuve zkVM prouve, pour un programme donné, un résultat donné, et des conditions initiales données, qu’il existe une entrée qui fait que le programme produit le résultat donné lorsqu’il est exécuté à partir des conditions initiales données. Nous pouvons combiner cette instruction avec le flux de processus pour arriver à la description suivante d’une zkVM.
Une preuve zkVM prouve, pour un programme de machine virtuelle donné et une sortie donnée, qu’il existe une entrée qui amène le programme donné à produire la sortie donnée lorsqu’il est exécuté sur la machine virtuelle.
Quels sont les critères selon lesquels nous devrions évaluer les zkVM ? En d’autres termes, quand devrions-nous dire qu’une zkVM est meilleure qu’une autre ? À vrai dire, la réponse dépend du cas d’utilisation.
L’étude de marché de Lita suggère que pour la plupart des cas d’utilisation commerciale, les propriétés les plus importantes, à savoir la vitesse, l’efficacité et la concision, sont soit la vitesse, soit l’efficacité du cœur-temps, selon l’application. Certaines applications sont sensibles au prix et veulent optimiser la faible consommation d’énergie et la faible utilisation du capital dans la prouvation ; Pour ceux-ci, l’efficacité du temps de base est probablement la mesure la plus importante à optimiser. D’autres applications, en particulier les applications liées à la finance ou au trading, sont sensibles à la latence et souhaitent optimiser la vitesse.
La plupart des comparaisons de performance se concentrent exclusivement sur la vitesse, ce qui est important mais ne constitue pas une mesure holistique de la performance. Il existe également quelques propriétés importantes qui mesurent la fiabilité d’une zkVM ; dont la plupart ne sont pas conformes aux normes de production, même pour les leaders du marché.
Nous proposons par la présente que les zkVM soient évaluées sur les critères suivants, séparés en deux sous-ensembles :
Principaux critères d’évaluation des machines virtuelles zk
Base de référence : Mesure la fiabilité des zkVM
Performance : Mesure les capacités d’une zkVM
4.1 Base de référence : hypothèses relatives à l’exactitude, à la sécurité et à la confiance
Lors de l’évaluation des zkVM pour les applications critiques, l’exactitude et la sécurité doivent être considérées comme la base de référence. Il doit y avoir suffisamment de raisons d’être confiant quant à l’exactitude et une garantie revendiquée suffisamment solide. En outre, les hypothèses de confiance doivent être suffisamment faibles pour l’application.
Sans ces propriétés, la zkVM est potentiellement pire qu’inutile pour l’application, car elle peut ne pas fonctionner comme spécifié et exposer les utilisateurs au piratage et aux exploits.
i. Exactitude
L’exactitude est composée de trois propriétés :
Vous pouvez avoir la complétude sans la solidité ; Si le système de preuve prouve tout, y compris la fausseté, il est évident qu’il est complet mais pas solide. Inversement, vous pouvez avoir la solidité sans l’exhaustivité ; Si le système de preuve prouve qu’un programme a existé mais ne peut pas prouver les calculs, il est évidemment solide (après tout, il ne prouve jamais aucune fausseté), mais pas complet.
ii. Sécurité
En pratique, les trois propriétés d’exactitude ont des tolérances non nulles. Cela implique que toutes les preuves sont des probabilités statistiques d’exactitude, et non des certitudes absolues. Une tolérance fait référence à la probabilité maximale tolérable qu’une propriété échoue. Les tolérances zéro sont bien sûr l’idéal, mais les zkVM n’atteignent pas les tolérances zéro sur toutes ces propriétés dans la pratique. La solidité et l’exhaustivité parfaites semblent être incompatibles avec la concision, et il n’y a pas de méthodes connues pour atteindre une connaissance nulle parfaite. Une façon courante de mesurer la sécurité est en bits de sécurité, où une tolérance de 1 / (2^n) est appelée n bits de sécurité. Plus il y a de sécurité, mieux c’est.
Si une zkVM est parfaitement correcte, cela n’implique pas nécessairement qu’elle est fiable. L’exactitude implique seulement que la zkVM satisfait ses propriétés de sécurité jusqu’aux tolérances revendiquées. Cela ne signifie pas que les tolérances alléguées sont suffisamment faibles pour être prêtes à être commercialisées. De plus, si une zkVM est suffisamment sécurisée, cela ne signifie pas qu’elle est correcte ; La sécurité fait référence aux tolérances revendiquées, et non aux tolérances réellement atteintes. Ce n’est que lorsqu’une zkVM est à la fois parfaitement correcte et suffisamment sûre que l’on peut dire qu’elle est fiable jusqu’aux tolérances revendiquées.
iii. Hypothèses de confiance
Lorsque les zkVM ont des hypothèses de confiance, cela prend généralement la forme d’un processus de configuration approuvé. Un processus de configuration pour un système d’épreuve ZK s’exécute une fois, avant que la première épreuve ne soit générée à l’aide du système d’épreuve, afin de générer des informations appelées « données de configuration ». Dans un processus de configuration approuvé, un ou plusieurs individus génèrent un caractère aléatoire qui est incorporé dans les données de configuration, et il faut supposer qu’au moins un de ces individus a supprimé le caractère aléatoire qu’il a incorporé dans les données de configuration.
Il existe deux modèles courants d’hypothèse de confiance dans la pratique.
Une hypothèse de confiance majoritaire honnête stipule que sur un ensemble de N individus, plus de N/2 de ces individus ont fait preuve d’intégrité dans certaines interactions particulières avec le système, qui est couramment utilisé par les blockchains
Une hypothèse de confiance « 1 sur N » stipule que sur un ensemble de N individus, au moins un de ces individus a fait preuve d’intégrité dans une ou plusieurs interactions particulières avec le système, ce qui est couramment utilisé par les outils et applications basés sur MPC.
Il est généralement admis que toutes choses étant égales par ailleurs, les zkVM sans hypothèses de confiance sont plus sûres que les zkVM qui nécessitent des hypothèses de confiance.
4.2 Le trilemme de la zkVM : équilibrer la vitesse, l’efficacité et la concision dans les zkVM
Le trilemme de la zkVM : vitesse, efficacité et concision
La rapidité, l’efficacité et la concision sont toutes des propriétés à échelle mobile. Tous ces facteurs contribuent au coût de l’utilisateur final de zkVM. La façon dont ils doivent être pondérés dans une évaluation dépend de l’application. Souvent, la solution la plus rapide n’est pas la plus efficace ou la plus succincte ; La solution la plus succincte n’est pas la plus rapide ni la plus efficace ; et ainsi de suite. Définissons d’abord chaque propriété avant d’expliquer leur relation
i. Vitesse
La vitesse doit être définie et mesurée par rapport à des programmes, des intrants et des systèmes d’essai spécifiques pour s’assurer qu’elle peut être évaluée quantitativement. Cette métrique est essentielle pour les applications sensibles à la latence où la disponibilité rapide des preuves est essentielle, mais s’accompagne d’une surcharge plus élevée et de tailles d’épreuve plus importantes
ii. Efficience
Le prouveur consomme deux types de ressources : le temps du cœur et l’espace. L’efficacité peut donc être subdivisée en efficacité du temps de base et efficacité de l’espace.
Efficacité cœur-temps : Temps moyen de fonctionnement du prouveur sur tous les cœurs multiplié par le nombre de cœurs exécutant le prouveur. Pour un étalon monocœur, la consommation de temps de cœur et la vitesse sont la même chose. Pour un étalon multicœur fonctionnant en mode multicœur sur un système multicœur, la consommation de temps de cœur et la vitesse ne sont pas la même chose. Si un programme utilise pleinement 5 cœurs ou threads pendant 5 secondes, cela représenterait 25 secondes de temps utilisateur et 5 secondes de temps d’horloge murale.
Efficacité de l’espace : Fait référence à la capacité de stockage utilisée, telle que la RAM
Le temps de l’utilisateur est intéressant en tant qu’approximation de l’énergie consommée par l’exécution d’un calcul. Dans une situation où tous les cœurs sont pleinement utilisés presque tout le temps, la consommation d’énergie d’un processeur doit rester relativement constante. Dans cette situation, le temps passé par l’utilisateur à exécuter du code en mode utilisateur, principalement en mode utilisateur, doit être à peu près linéairement proportionnel au nombre de wattheures (c’est-à-dire d’énergie) consommés par cette exécution de code.
L’économie de la consommation d’énergie, ou de l’utilisation des ressources informatiques, devrait être intéressante du point de vue de toute opération d’essai qui a une échelle suffisante pour que sa facture d’énergie (ou sa facture de cloud computing) pour l’étalonnage représente un coût opérationnel considérable. Pour ces raisons, le temps de l’utilisateur est une mesure intéressante. La réduction des coûts de vérification permet aux fournisseurs de services de répercuter les prix de vérification plus bas sur les clients sensibles aux coûts.
Les deux types d’efficacité sont liés à la consommation d’énergie du processus d’étalonnage et à la quantité de capital utilisée par le processus d’étalonnage, qui se rapporte au coût financier de l’étalonnage. Pour opérationnaliser la définition de l’efficacité pour la mesure, la définition doit être faite par rapport à un ou plusieurs programmes d’essai, à un ou plusieurs intrants d’essai à chacun de ces programmes et à un ou plusieurs systèmes d’essai.
iii. Concision
La concision est un composite de trois mesures distinctes, la complexité de la vérification des preuves étant subdivisée :
La vérification est généralement une opération à cœur unique, donc la vitesse et l’efficacité du temps de cœur sont généralement équivalentes dans ce contexte. Comme pour la vitesse et l’efficacité, l’opérationnalisation de la définition de la concision nécessite de spécifier des ensembles de programmes de test, d’entrées de test et de systèmes de test.
Une fois chaque propriété de performance définie, nous illustrons maintenant les effets dimunitifs de l’optimisation d’une propriété par rapport aux autres.
En général, optimiser pour une qualité signifie ne pas optimiser pour une autre qualité, et donc une analyse multidimensionnelle est nécessaire pour choisir une solution optimale au cas par cas.
Une bonne façon de pondérer ces propriétés dans une évaluation peut être de définir des niveaux acceptables pour chaque propriété, puis de déterminer quelles propriétés sont les plus importantes. Les propriétés les plus importantes doivent être optimisées, sous réserve de maintenir des niveaux suffisamment bons sur toutes les autres propriétés.
Ci-dessous, nous résumons chaque propriété et leurs principales considérations :
Propriétés d’évaluation des zkVM
Avec le tableau ci-dessus, nous concluons ici le premier article de notre série. Dans les prochains articles, nous nous appuierons sur l’organigramme ci-dessus pour expliquer les processus arithmétiques et cryptographiques courants dans les zkVM.
Si vous avez trouvé cela utile, visitez notre site Web et notre gitbook pour en savoir plus sur ce que nous construisons chez Lita.
Suivez-nous également sur X et Discord pour rester à jour afin de ne pas manquer le reste de la série