Vitalik : Comment les bourses centralisées peuvent-elles prouver l'existence de leurs fonds ?

IntermédiaireDec 04, 2023
Cet article se penche sur les tentatives historiques visant à rendre les transactions plus proches de l'absence de confiance, sur les limites de ces technologies et sur des idées plus récentes et plus puissantes utilisant les ZK-SNARK et d'autres technologies de pointe.
Vitalik : Comment les bourses centralisées peuvent-elles prouver l'existence de leurs fonds ?

Chaque fois qu'une importante bourse centralisée s'effondre, une question revient souvent : pouvons-nous utiliser la technologie cryptographique pour résoudre le problème ? Les bourses pourraient créer des preuves cryptographiques montrant que les fonds qu'elles détiennent sur la chaîne sont suffisants pour couvrir leurs obligations envers les utilisateurs, au lieu de s'appuyer sur des méthodes "légales" telles que les autorisations gouvernementales, les examens des auditeurs et la vérification des antécédents personnels des personnes qui gèrent et exploitent la bourse. Les bourses pourraient mettre en place un système dans lequel il serait fondamentalement impossible de retirer les fonds des déposants sans leur consentement. Potentiellement, nous pourrions explorer tout le spectre entre les CEX ambitieux et pleins de bonne volonté qui "ne font pas de mauvaises choses" et les DEX sur la chaîne qui "ne peuvent pas faire de mauvaises choses" mais qui sont actuellement inefficaces et qui laissent échapper des informations sur la vie privée. Cet article se penche sur les tentatives historiques visant à rendre les transactions plus proches de l'absence de confiance, sur les limites de ces technologies et sur certaines idées plus récentes et plus puissantes utilisant les ZK-SNARK et d'autres technologies de pointe.

Bilans et arbres de Merkle : La preuve de solvabilité à l'ancienne

Les premières tentatives des bourses d'échange d'utiliser des méthodes cryptographiques pour prouver qu'elles n'escroquent pas leurs utilisateurs remontent à loin. En 2011, MtGox, la plus grande bourse d'échange de bitcoins de l'époque, a prouvé qu'elle disposait de fonds en transférant 424242 BTC à une adresse annoncée à l'avance. En 2013, des discussions ont été entamées sur la manière de prouver l'autre côté de l'équation : le montant total des dépôts des clients. Si vous prouvez que les dépôts des clients sont égaux à X (une "preuve de responsabilité") et que vous prouvez la propriété des clés privées pour les pièces X (une "preuve d'actif"), vous avez une preuve de solvabilité : vous avez montré que la bourse dispose des fonds nécessaires pour rembourser tous les déposants.

La méthode la plus simple pour prouver les dépôts consistait à publier une liste de paires (nom d'utilisateur, solde). Chaque utilisateur peut vérifier si son solde est inclus, et n'importe qui peut vérifier l'ensemble de la liste pour s'assurer (i) que chaque solde n'est pas négatif, et (ii) que le total est égal au montant réclamé. Toutefois, cette méthode ne respecte pas la vie privée, et une légère modification pourrait être apportée : publier une liste de paires (hash(nom d'utilisateur, sel), solde) et envoyer en privé à chaque utilisateur la valeur de son sel. Mais même ces fuites d'informations sur l'équilibre et les modèles de changement d'équilibre. Le désir de protéger la vie privée nous amène à l'invention suivante : la technologie de l'arbre de Merkle (également connue sous le nom d'arbre de hachage).

Vert : Nœud Charlie. Bleu : nœud de David, qui est également le nœud que Charlie recevra dans le cadre de sa preuve. Jaune : Nœud racine, visible par tous.

La technologie de l'arbre de Merkle consiste à placer le bilan d'un client dans un arbre de somme de Merkle. Dans cet arbre, chaque nœud est une paire (balance, hachage). Les nœuds de la couche inférieure représentent les soldes des clients individuels et les valeurs de hachage salées de leurs noms d'utilisateur. Dans chaque nœud supérieur, le solde est la somme des deux soldes inférieurs et la valeur de hachage est le hachage des deux nœuds inférieurs. Une preuve de la somme de Merkle, comme une preuve de Merkle, est une "branche" de l'arbre, composée de nœuds frères sur le chemin de la feuille à la racine.

Les bourses envoient à chaque utilisateur une preuve de la somme de Merkle de son solde pour prouver ses avoirs. Les utilisateurs ont alors l'assurance que leur solde est correctement inclus dans le total. Vous trouverez un exemple de code simple ici.

Les fuites de confidentialité dans ce modèle sont beaucoup plus faibles que dans une liste entièrement publique et peuvent être encore réduites en mélangeant les branches à chaque fois que la racine est publiée. Cependant, certaines fuites de données privées subsistent. Charlie peut savoir que quelqu'un a un solde de 164 ETH, que la somme des soldes de deux utilisateurs est de 70 ETH, etc. Un pirate contrôlant de nombreux comptes peut encore en apprendre beaucoup sur les utilisateurs de la bourse.

Un aspect subtil mais important de ce schéma est la possibilité de soldes négatifs : Que se passe-t-il si un échange avec un solde client de 1390 ETH ne dispose que de 890 ETH en réserve et tente de couvrir le déficit en ajoutant un solde de -500 ETH sur un compte fictif dans l'arbre ? Il s'avère que cette possibilité ne rompt pas le schéma, bien que ce soit précisément la raison pour laquelle nous avons besoin d'arbres de somme de Merkle au lieu d'arbres de Merkle ordinaires. Supposons que Henry soit un compte fictif contrôlé par la bourse, sur lequel est placé -500 ETH.

La vérification de la preuve de Greta échouera : l'échange devra lui offrir le nœud -500 ETH de Henry, qu'elle rejettera car il n'est pas valide. La vérification d'Eve et de Fred échouera également car le total d'ETH sur les nœuds intermédiaires au-dessus d'Henry est de -230, ce qui les rend également invalides ! Pour échapper au vol, la bourse devra espérer que personne dans la moitié droite de l'arbre ne vérifie sa preuve de solde.

Si la bourse peut identifier des utilisateurs valant 500ETH, et qu'elle pense que ces utilisateurs ne prendront pas la peine de vérifier la preuve ou ne seront pas crus lorsqu'ils se plaignent de n'avoir jamais reçu de preuve, alors la bourse peut en toute confiance échapper à la sanction pour vol. Cependant, la bourse pourrait également obtenir le même effet en excluant ces utilisateurs de l'arbre.

Par conséquent, dans le seul but de démontrer la preuve de responsabilité, la technologie de l'arbre de Merkle est essentiellement aussi bonne que le système de preuve de responsabilité. Mais ses caractéristiques en matière de protection de la vie privée ne sont pas encore idéales. Vous pouvez utiliser les arbres de Merkle de manière plus intelligente, par exemple en faisant de chaque satoshi ou wei une feuille individuelle, mais en fin de compte, avec des techniques plus modernes, il y a de meilleures façons d'y parvenir.

Améliorer la confidentialité et la robustesse avec ZK-SNARKs

Les ZK-SNARK sont une technologie puissante, qui pourrait être à la cryptographie ce que les transformateurs sont à l'intelligence artificielle : une technologie universellement puissante qui surmonte complètement une pléthore de problèmes dans des technologies spécifiques développées il y a des dizaines d'années. Naturellement, nous pouvons utiliser les ZK-SNARK pour simplifier considérablement et améliorer la confidentialité dans les protocoles de preuve de responsabilité.

La chose la plus simple que nous puissions faire est de placer tous les dépôts des utilisateurs dans un arbre de Merkle (ou plus simplement, un engagement KZG) et d'utiliser un ZK-SNARK pour prouver que tous les soldes dans l'arbre sont non négatifs et que leur somme totale correspond à une valeur déclarée. En ajoutant une couche de hachage pour la confidentialité, le fait de donner à chaque utilisateur une branche de Merkle (ou une preuve KZG) ne révèlera pas les soldes des autres utilisateurs.

L'utilisation des engagements KZG est une méthode qui permet d'éviter les fuites de confidentialité, car elle élimine la nécessité de fournir des "nœuds frères" comme preuve. Un simple ZK-SNARK peut être utilisé pour prouver la somme des soldes et que chaque solde est non négatif. Nous pouvons utiliser un ZK-SNARK spécialisé pour prouver la somme et la non-négativité des soldes dans le KZG susmentionné. Voici un exemple simple qui permet d'atteindre cet objectif. Nous introduisons un polynôme auxiliaire qui "établit les bits de chaque solde" (à des fins d'illustration, supposons que les soldes sont compris dans ), et toutes les 16 positions suivent un total courant avec un décalage, de sorte que la somme est nulle uniquement lorsque le total réel est cohérent avec le total déclaré. Si z est la -128ème racine de l'unité, nous pouvons prouver l'équation suivante.

La première valeur dans une configuration efficace est 0 0 0 0 0 0 0 0 0 0 1 2 5 10 20 -165 0 0 0 0 0 0 0 0 1 3 6 12 25 50 -300... Pour comprendre comment de telles équations peuvent être transformées en vérifications polynomiales puis en ZK-SNARKs, reportez-vous à mon article sur les ZK-SNARKs pour plus d'explications ici et ici . Bien qu'il ne s'agisse pas d'un protocole optimal, il démontre que les preuves cryptographiques de ce type ne sont plus aussi mystérieuses de nos jours !

Quelques formules supplémentaires suffisent pour adapter ces systèmes de contraintes à des scénarios plus complexes. Par exemple, dans un système de négociation à effet de levier, il est acceptable que des utilisateurs individuels aient des soldes négatifs, à condition qu'ils disposent de suffisamment d'autres actifs pour couvrir les fonds avec une certaine garantie. Un SNARK peut être utilisé pour prouver cette contrainte plus complexe, en rassurant les utilisateurs que la bourse ne risquera pas leurs fonds en exemptant secrètement d'autres utilisateurs des règles.

À plus long terme, ce type de preuve de dette ZK pourrait être utilisé non seulement pour les dépôts des clients dans les bourses, mais aussi pour une gamme plus large de prêts. Chaque fois qu'une personne contracte un prêt, elle inscrit un enregistrement dans un polynôme ou un arbre contenant ce prêt, la racine de cette structure étant publiée sur la chaîne. Cela permettrait à toute personne souhaitant obtenir un prêt de fournir aux prêteurs la preuve ZK qu'elle n'a pas trop emprunté dans le cadre d'autres prêts. En fin de compte, les innovations juridiques pourraient même faire en sorte que les prêts ainsi engagés soient plus prioritaires que les prêts non engagés. Cela nous conduit dans la même direction qu'une idée discutée dans "Decentralized Society : Finding the Soul of Web3" : établir un concept de réputation négative ou de garantie sur la chaîne par le biais d'une forme de "jeton lié à l'âme".

Preuve du patrimoine

La version la plus simple de la preuve d'actif est le protocole que nous avons vu ci-dessus : pour prouver que vous détenez X pièces, il vous suffit de déplacer X pièces à un moment convenu à l'avance ou dans une transaction qui comprend le message "Ces fonds appartiennent à Binance" dans son champ de données. Pour éviter les frais de transaction, vous pouvez alternativement signer un message hors chaîne ; Bitcoin et Ethereum ont tous deux des normes pour les messages de signature hors chaîne.

Cette technique simple de preuve d'actif pose deux problèmes pratiques :

  1. Transformation en "entrepôt frigorifique".

  2. Double usage des garanties.

Pour des raisons de sécurité, la plupart des bourses conservent la majorité des fonds de leurs clients dans une "chambre froide" : sur des ordinateurs hors ligne où les transactions doivent être signées manuellement et transférées sur l'internet. Le système de stockage à froid que j'utilisais autrefois pour mes fonds personnels impliquait un ordinateur hors ligne en permanence, générant un code QR contenant la transaction signée, que je pouvais scanner à l'aide de mon téléphone. Les protocoles d'échange modernes sont plus complexes et impliquent souvent des calculs multipartites entre plusieurs appareils. Dans ces conditions, même un message supplémentaire pour prouver le contrôle d'une adresse est une opération coûteuse !

Une transaction peut prendre plusieurs chemins :

  • Conservez quelques adresses à long terme connues du public. L'échange génère plusieurs adresses, publie une preuve de propriété pour chacune d'entre elles, puis les réutilise. Il s'agit de loin du système le plus simple, bien qu'il ajoute certaines restrictions sur la manière de protéger la sécurité et la vie privée.

  • Créez de nombreuses adresses et choisissez-en quelques-unes au hasard. La bourse pourrait avoir de nombreuses adresses, ne les utilisant peut-être qu'une seule fois et les retirant après une transaction. Dans ce cas, la bourse peut disposer d'un protocole permettant de sélectionner au hasard quelques adresses qui doivent être "ouvertes" pour en prouver la propriété. Certaines bourses ont déjà fait quelque chose de similaire avec des auditeurs, mais en principe, cette technique pourrait devenir un processus entièrement automatisé.

  • Options ZKP plus complexes. Par exemple, un échange pourrait définir toutes ses adresses comme des multi-signatures 1/2, où la clé de chaque adresse est différente, et l'autre est une version masquée d'une clé de secours d'urgence "majeure", stockée de manière complexe mais hautement sécurisée, comme une multi-signature 12/16. Pour protéger la vie privée et éviter d'exposer l'ensemble de ses adresses, une bourse pourrait même exécuter une preuve à connaissance nulle sur la blockchain, prouvant le solde total de toutes les adresses ayant ce format sur la chaîne.

Un autre enjeu majeur est d'empêcher le double usage des garanties. Les bourses pourraient facilement faire la navette entre les garanties pour prouver l'existence de réserves, en prétendant être solvables alors qu'elles ne le sont pas. Idéalement, la preuve de solvabilité devrait être en temps réel, et mise à jour après chaque bloc. Si cela n'est pas pratique, une option moins idéale consiste à coordonner un horaire fixe entre les différents échanges, par exemple en prévoyant des réserves tous les mardis à 14 heures UTC.

La dernière question est la suivante : peut-on faire une preuve d'actif avec une monnaie fiduciaire ? Les bourses ne détiennent pas seulement des crypto-monnaies, mais aussi des monnaies fiduciaires au sein du système bancaire. La réponse est : oui, mais un tel processus reposera inévitablement sur le modèle de confiance "fiat" : la banque elle-même peut prouver les soldes, les auditeurs peuvent prouver les bilans, etc. Étant donné que la monnaie fiduciaire ne peut pas être vérifiée cryptographiquement, c'est le mieux que l'on puisse faire dans ce cadre, mais cela vaut la peine d'être fait.

Une autre approche consiste à séparer clairement une entité qui gère l'échange et traite avec des stablecoins adossés à des actifs comme l'USDC, d'une autre entité qui gère le processus d'entrée et de sortie d'argent entre les crypto-monnaies et le système bancaire traditionnel (l'USDC elle-même). Étant donné que les "dettes" de l'USDC ne sont que des jetons ERC20 sur la chaîne, la preuve de la responsabilité est "gratuite" et ne nécessite qu'une preuve de l'actif.

Plasma et Validiums : Pouvons-nous faire en sorte que les CEX ne soient pas entravés ?

Supposons que nous voulions aller plus loin : nous ne voulons pas seulement prouver que la bourse dispose des fonds nécessaires pour rembourser l'argent des utilisateurs. Au contraire, nous voulons empêcher complètement la bourse de voler les fonds des utilisateurs.

La première tentative majeure à cet égard a été Plasma, une solution d'extension populaire dans la communauté de recherche Ethereum en 2017 et 2018. Plasma divise le solde en un ensemble de "pièces" individuelles, chacune étant affectée d'un index et située à une position spécifique dans l'arbre de Merkle d'un bloc Plasma. Pour que le transfert d'une pièce soit valide, il faut que la transaction soit placée au bon endroit dans l'arbre, la racine de l'arbre étant publiée sur la chaîne.

Schéma simplifié d'une version de Plasma. Les pièces sont stockées dans un contrat intelligent et les règles du protocole Plasma sont exécutées de force lors du retrait.

OmiseGo a tenté de créer une bourse d'échange décentralisée sur la base de ce protocole, mais depuis lors, l'entreprise s'est tournée vers d'autres idées. À cet égard, le groupe Plasma lui-même a également évolué, devenant le projet Optimism, qui se concentre sur les rollups EVM optimistes.

Les limites technologiques du Plasma, tel qu'il est conçu en 2018 (comme prouver la fragmentation des pièces), ne valent pas la peine d'être prises en compte. Depuis le pic du discours sur le plasma en 2018, les ZK-SNARK sont devenus plus viables dans les cas d'utilisation liés à l'expansion. Comme nous l'avons déjà mentionné, les ZK-SNARK ont tout changé.

Une version plus moderne du concept Plasma est ce que Starkware appelle le validium : c'est essentiellement la même chose que le ZK-rollup, sauf que les données sont stockées en dehors de la chaîne. Cette structure peut être utilisée dans de nombreux cas, notamment lorsqu'un serveur centralisé doit exécuter un code et prouver sa bonne exécution. Dans un validium, les opérateurs ne peuvent pas voler de fonds, bien que, selon les détails de la mise en œuvre, certains fonds d'utilisateurs puissent être bloqués si l'opérateur disparaît.

Tout cela est très prometteur : la relation entre CEX et DEX est loin d'être une opposition binaire. En fait, il existe tout un éventail d'options, y compris diverses formes de centralisation hybride, qui vous permettent de bénéficier d'avantages tels que l'efficacité tout en disposant de nombreuses garanties cryptographiques pour protéger les opérateurs centralisés contre la plupart des formes d'abus.

Toutefois, dans la moitié droite de cet espace de conception, il est nécessaire d'aborder une question fondamentale : la gestion des erreurs de l'utilisateur. Jusqu'à présent, le type d'erreur le plus critique est le suivant : Que faire si les utilisateurs oublient leurs mots de passe, perdent leurs appareils, sont piratés ou perdent l'accès à leurs comptes ?

Les bourses peuvent résoudre ce problème : tout d'abord en récupérant les courriers électroniques et, en cas d'échec, en recourant à des formes plus complexes de récupération par le biais de KYC. Toutefois, pour pouvoir résoudre ces problèmes, les bourses doivent avoir un contrôle réel sur les pièces. Pour pouvoir rétablir l'accès aux comptes d'utilisateurs à juste titre, les échanges doivent disposer d'un pouvoir qui pourrait également être utilisé à mauvais escient pour voler des fonds sur ces comptes. Il s'agit d'un compromis inévitable.

La solution idéale à long terme repose sur l'autodétention, complétée par des technologies telles que la multi-signature et les portefeuilles de récupération sociale, afin d'aider les utilisateurs à faire face aux situations d'urgence. Mais à court terme, il existe deux solutions alternatives apparentes, chacune ayant des coûts et des avantages nettement différents.

Conclusion : De meilleurs échanges à l'avenir

À court terme, il existe deux catégories distinctes d'échanges : les échanges conservés et les échanges non conservés. Aujourd'hui, ce dernier est représenté par des DEX comme Uniswap. À l'avenir, nous pourrions également voir des CEX cryptographiquement "contraints", où les fonds des utilisateurs sont conservés dans quelque chose qui s'apparente à un contrat intelligent validium. Nous pourrions également assister à l'émergence d'échanges semi-custodiaux, où nous leur confions des devises plutôt que des crypto-monnaies.

Les deux types d'échanges continueront d'exister. Le moyen le plus simple, compatible avec le passé, de renforcer la sécurité des échanges de biens en dépôt est d'augmenter la preuve des réserves. Cela implique une combinaison de preuve d'actif et de preuve de passif. L'élaboration de protocoles bien structurés pour ces deux types d'échanges présente des défis techniques, mais nous devrions progresser autant que possible dans ces deux domaines et ouvrir les logiciels et les processus à la source afin que tous les échanges puissent en bénéficier.

À plus long terme, j'espère que nous évoluerons de plus en plus vers des échanges non privatifs de liberté, du moins en ce qui concerne les crypto-monnaies. Le recouvrement des portefeuilles existera pour les nouveaux utilisateurs qui traitent de petits montants et pour les institutions qui ont besoin de telles dispositions pour des raisons juridiques. Des options de récupération hautement centralisées peuvent être nécessaires, mais elles peuvent être effectuées au niveau du portefeuille, et non au sein de l'échange lui-même. La façon dont magic.link interagit avec des plateformes comme Polymarket est un exemple de cette approche. En ce qui concerne les devises, les flux entre le système bancaire traditionnel et l'écosystème cryptographique peuvent être facilités par des processus locaux d'entrée et de sortie d'argent pour les monnaies stables adossées à des actifs, comme l'USDC. Toutefois, il faudra du temps pour atteindre pleinement cet objectif.

Nous remercions tout particulièrement Balaji Srinivasan, ainsi que le personnel de Coinbase, Kraken et Binance pour leurs discussions.

Clause de non-responsabilité:

  1. Cet article est repris de[Chaincatcher] . Tous les droits d'auteur appartiennent à l'auteur original[Vitalik]. Si vous avez des objections à cette réimpression, veuillez contacter l'équipe de Gate Learn, qui s'en chargera rapidement.
  2. Clause de non-responsabilité : Les points de vue et les opinions exprimés dans cet article sont uniquement ceux de l'auteur et ne constituent pas un conseil en investissement.
  3. Les traductions de l'article dans d'autres langues sont effectuées par l'équipe de Gate Learn. Sauf mention contraire, il est interdit de copier, distribuer ou plagier les articles traduits.
Jetzt anfangen
Registrieren Sie sich und erhalten Sie einen
100
-Euro-Gutschein!
Benutzerkonto erstellen