Comment les zk-SNARKs améliorent-elles le système de Preuve de Réserves de Binance ?

2023-02-23

Points clés à retenir

  • En novembre 2022, Binance a publié son système de Preuve de Réserves utilisant la cryptographie de l’Arbre de Merkle pour permettre aux utilisateurs de vérifier leurs avoirs.

  • Binance a amélioré sa solution en mettant en œuvre les zk-SNARKs, une forme de preuves Zero-Knowledge.

  • Les utilisateurs peuvent désormais vérifier que le solde net total de chaque compte n’est pas négatif et que tous les actifs de l’utilisateur font partie du solde total net des actifs de l’utilisateur déclaré par Binance, et ce, de manière privée et sécurisée.

Jetons un coup d’œil sous le capot de la nouvelle solution de Preuve de Réserves de Binance. En combinant les zk-SNARKs et les informations de l’Arbre de Merkle, cette nouvelle solution offre aux utilisateurs un moyen plus efficace de vérifier l’état des réserves de Binance.

Au cours des derniers mois, l’équipe de développement de Binance a travaillé dur pour mettre au point des solutions avancées de preuve de sa solvabilité. De tels outils sont devenus essentiels pour les exchanges centralisés de cryptomonnaies du fait de la crise de perte de confiance qui a frappé le secteur suite à l’effondrement de FTX. Les fonds des utilisateurs stockés sur Binance sont adossés selon un ratio de 1:1, plus les réserves. Trouver un moyen de le prouver au public de manière simple et transparente est devenu une partie importante du plan de Binance pour restaurer la confiance dans l’industrie. 

En novembre 2022, nous avons publié notre système de Preuve de réserves utilisant une technique cryptographique d’Arbre de Merkle pour permettre aux utilisateurs de vérifier leurs avoirs sur Binance. Bien qu’il s’agisse d’une avancée dans la démarche de transparence des fonds des utilisateurs de Binance, cette solution présentait deux lacunes :

  1. Pour protéger la vie privée des utilisateurs, les nœuds Feuilles de la preuve de Merkle représentaient le hachage des avoirs des utilisateurs. Ainsi, la Racine de Merkle ne pouvait pas refléter la somme des informations sur le solde de ses nœuds Feuilles.

  1. L’entité dont les réserves étaient vérifiées pouvait potentiellement ajouter un solde négatif à un faux compte quelque part dans l’Arbre, pour réduire le total des réserves obligatoires. Le diagramme suivant, tiré du blog de Vitalik Buterin, montre un exemple de cette Arbre de Merkle malveillant (bien qu’ici, la Racine reflète la somme des soldes de tous les nœuds Feuilles, ce qui peut introduire des problèmes de confidentialité).

Nous disposons désormais d’une solution remédiant à ces lacunes, renforçant ainsi le système de Preuve de Réserves de Binance. En utilisant les protocoles de Preuve Zero-Knowledge, autrement appelés les zk-Snarks, nous pouvons prouver que :

  1. Tous les nœuds Feuilles de l’arbre de Merkle ont contribué au solde total des utilisateurs de Binance pour chaque actif.

  2. L’Arbre de Merkle ne contient aucun utilisateur disposant d’un solde total net négatif (valeur globale en USD de tous les actifs détenus par l’utilisateur).

Quelques mots sur les soldes négatifs et les performances

Étant donné que Binance propose des marges, des prêts crypto et des produits de trading de futures, le solde de chaque utilisateur pour chaque actif crypto peut être composé d’actifs et de passifs. Le solde d’un utilisateur pour un actif crypto spécifique peut être négatif, mais le solde total net de tous ses actifs crypto ne doit pas être négatif (car tous les prêts sont entièrement collatéralisés).

Imaginons qu’Alice a déposé 10 000 BUSD sur Binance, puis a utilisé 4 000 BUSD comme collatéral pour emprunter 2 BNB (à un taux de 1 BNB = 1 000 BUSD, en supposant que Binance est toujours en sur-collatéralisation). Le tableau suivant présente le bilan d’Alice :

BNB (prix : 1 000 BUSD)

BUSD (prix : 1 BUSD)

Solde Total Net (BUSD)

Actifs

Passifs

Actifs

Passifs

Alice

2

2

10 000

0

10 000

Si Alice trade ensuite 1 BNB pour 1 000 BUSD avec Bob (qui a également déposé 10 000 BUSD), leur bilan se présente comme suit après le trade :

BNB (prix : 1 000 BUSD)

BUSD (prix : 1 BUSD)

Solde Total Net (BUSD)

Actifs

Passifs

Actifs

Passifs

Alice

1

2

11 000

0

10 000

Bob

1

0

9 000

0

10 000

Dans ce cas, le solde de BNB d’Alice sera à -1, ce qui n’est pas un nœud valide dans un Arbre de Merkle et ne couvre qu’un seul actif : le BNB. Cependant, si l’on considère le solde total net, Alice est toujours à 10 000 BUSD.

L’autre défi provient de la taille de la base d’utilisateurs de Binance. Une solution viable doit pouvoir générer une preuve utilisateur et une preuve zk-SNARK pour des dizaines de millions d’utilisateurs, dont certains peuvent détenir plus de 300 actifs crypto sur notre plateforme. 

Nous voulons apporter la preuve des faits suivants dans un délai raisonnable :

  1. Les actifs de chaque utilisateur de Binance font partie du solde total des utilisateurs indiqué dans l’instantané. Les utilisateurs peuvent vérifier notre solde total déclaré par rapport aux actifs détenus aux adresses contrôlées par Binance, en utilisant un explorateur de blockchain (comme Etherscan pour les portefeuilles Ethereum ou BscScan pour les portefeuilles BNB Chain).

  2. Le solde total net de chaque utilisateur n’est pas négatif, ce qui atteste que nous n’avons pas créé de comptes fictifs avec un solde négatif pour réduire artificiellement la taille de nos réserves vérifiées.

Que sont les zk-Snarks ?

Avant que nous ne plongions dans les détails de notre solution, une brève explication du mécanisme de preuves Zero-Knowledge s’impose. Les protocoles de preuves Zero-Knowledge, comme les zk-Snarks, permettent à une partie, le « prouveur », de démontrer à une autre partie, le « vérificateur », que le prouveur a exécuté certains calculs avec précision avec certaines entrées, sous certaines contraintes, le tout sans divulguer lesdites entrées. Le calcul peut prendre du temps, mais le mécanisme mathématique sous-jacent aide le vérificateur à évaluer la preuve rapidement et en toute sécurité.

Le prouveur (Binance) commence par définir un ensemble de contraintes pour le calcul qu’il veut prouver. Les contraintes sont définies dans des circuits pouvant être exprimés dans un langage de programmation de plus haut niveau (dans notre cas, une version forkée de gnark.)

Le prouveur exécute ensuite un calcul relativement lourd, en hachant les identifiants et les bilans de tous les utilisateurs et génère ensuite la preuve que le calcul respecte les contraintes énoncées précédemment. Pour ce faire, le prouveur utilise la trace de calcul (témoin) et des entrées publiques ou privées. 

Le vérificateur (l’utilisateur) reçoit la preuve et la vérifie avec l’entrée publique du circuit pour s’assurer que le calcul a été exécuté avec précision, et que toutes les contraintes ont bien été respectées. Le calcul de la vérification est extrêmement rapide par rapport à celui de la preuve. Si le prouveur ne génère pas la preuve sur les circuits prédéfinis, il ne peut pas produire de preuve valide pour passer la vérification.

Pour en savoir plus sur le fonctionnement des zk-Snarks, vous pouvez vous référer à cette série d’articles.

Notre solution

L’élément fondamental de notre solution améliorée de Preuve de Réserves est toujours un Arbre de Merkle. Voilà à quoi ressemblerait l’exemple précédent :

En plus de l’arbre de Merkle, nous maintenons également un état global qui représente une liste du solde total net de chaque actif que chaque client de Binance détient.

Pour prouver nos réserves, nous allons générer une preuve zk-SNARK pour la construction de l’Arbre de Merkle. Pour chaque ensemble de soldes de l’utilisateur, un nœud de Feuille de l’Arbre de Merkle, notre circuit s’assurera que :

  1. Le solde de chaque actif de cet utilisateur est inclus dans la liste d’états globale mentionnée ci-dessus.

  2. Le solde total net de l’utilisateur n’est pas négatif. 

  3. Le changement de la Racine de l’Arbre de Merkle est valide après la mise à jour des informations de cet utilisateur dans le hachage du nœud Feuille.

Veuillez vous référer à cette spécification technique et à notre code source pour le circuit (contraintes) pour le détail de l’implémentation. 

Pour chaque cas de preuve de nos réserves, nous publierons :

1. La preuve de Merkle : les hachages pour chaque utilisateur (pour Alice, représentée par les nœuds bleus dans l’image ci-dessus).

2. Les preuves zk-SNARK et les entrées publiques (un hachage de la liste du solde total net de chaque actif et la Racine de Merkle) du circuit pour tous les utilisateurs. 

En vérifiant la preuve de Merkle, les utilisateurs peuvent s’assurer que leur bilan est inclus dans la Racine de l’Arbre de Merkle. En vérifiant la preuve zk-SNARK, les utilisateurs peuvent s’assurer que la construction de l’Arbre de Merkle respecte bien les contraintes définies dans le circuit.

La sécurité de cette solution repose en grande partie sur la configuration de la clé de la preuve et de la clé de vérification. Nous travaillons sur une configuration décentralisée des clés. En ce qui concerne les cérémonies d’installation de confiance décentralisées existantes, la cérémonie d’Ethereum propose un bon exemple. Nous sommes sur le point d’avoir une solution MPC pour rendre la configuration plus fiable.

Performance

Au vu du nombre d’utilisateurs de Binance dont les soldes doivent être inclus, il n’existe aucun moyen d’obtenir une preuve unique de la construction de l’Arbre de Merkle qui couvrirait tous les utilisateurs en même temps. Une solution à ce problème est de diviser les utilisateurs en plusieurs lots de 864 chacun, afin d’avoir un circuit à plus petite échelle et des procédures de preuve parallèles.

Pour un lot contenant 864 utilisateurs, où chaque utilisateur possède 350 actifs différents, supposons que le solde de chaque actif se situe dans la plage [0, 2^64-1]. Avec un serveur de 32 cœurs et 128 Go, le temps de génération de la preuve zk-snark est d’environ 110 secondes et le temps de vérification de la preuve est inférieur à 1 milliseconde. 

Binance va démarrer 1 000 prouveurs en même temps afin de générer une preuve pour tous les comptes en 2 heures. Le coût de ce serveur de preuves pour une heure est d’environ 0,56 USD. Le coût total de la génération de toutes les preuves zk-snarks couvrant tous les utilisateurs serait d’environ 1 000 USD.

Conclusion

Nous fournirons la première itération de preuve pour les utilisateurs générée par cette nouvelle solution dans une annonce ultérieure de Preuve de Réserves. De plus, nous avons mis en libre accès notre processeur de données utilisateur, notre prouveur, notre circuit et notre vérificateur, afin que les exchanges centralisés reposant sur le même modèle que le nôtre puisse facilement générer des preuves pour leurs utilisateurs et leurs actifs. 

Nous espérons que cela contribuera à faire passer la transparence du secteur des actifs numériques au niveau supérieur.  Nous travaillons également à la mise en œuvre de la solution mentionnée dans le blog de Vitalik pour obtenir de meilleures performances, ce qui nous permettra de fournir une preuve plus fréquemment et à moindre coût.

Comme il s’agit de la première version de notre zk-SNARK, nous sommes impatients de recevoir les avis de la communauté afin de pouvoir continuer à améliorer le système.

Code et Lecture complémentaire

Tradez partout grâce à l'application mobile de crypto-trading Binance (iOS/Android)

Retrouvez-nous sur :

Instagram : https://www.instagram.com/binancefrench

Twitter : https://twitter.com/LeBinanceFR

Facebook : https://www.facebook.com/BinanceFrance

Telegram : https://t.me/BinanceFrench


Avertissement concernant les risques : Les prix des actifs numériques sont soumis à un risque de marché élevé et à une volatilité des prix. La valeur de votre investissement peut baisser ou augmenter, et vous pouvez ne pas récupérer le montant investi. Vous êtes seul responsable de vos décisions d'investissement et Binance n'est pas responsable des pertes que vous pourriez subir. Les performances passées ne sont pas un indicateur fiable des performances futures. Vous ne devez investir que dans des produits qui vous sont familiers et dont vous comprenez les risques. Vous devez examiner attentivement votre expérience en matière d'investissement, votre situation financière, vos objectifs d'investissement et votre tolérance au risque et consulter un conseiller financier indépendant avant d'effectuer tout investissement. Ceci ne saurait constituer ni un conseil en investissement, ni une incitation ou une recommandation à opérer sur tout actif numérique. Pour plus d'informations, consultez nos conditions d'utilisation et notre avertissement sur les risques.

249,106,509 utilisateurs nous ont choisis. Découvrez pourquoi aujourd’hui.
S’inscrire maintenant