Preuve des réserves de fonds

Audit

En savoir plus sur le processus d'audit de Kraken

Processus d'audit de preuve de réserves de fonds Kraken  

Introduction

Ce document fournit des informations générales et un aperçu du processus d’audit Kraken.

Kraken possède des réserves de fonds complètes et utilise un audit indépendant, vérifié par cryptographie, pour démontrer à des tiers, y compris nos clients, que nous détenons l'entièreté des fonds. Des audits transparents et vérifiés de manière indépendante sont essentiels afin de garantir que les entreprises conservent des réserves complètes des fonds appartenant aux clients. Une preuve de réserves de fonds publique est techniquement possible à implémenter. Cependant, il existe d'importantes externalités, la confidentialité des utilisateurs étant l'une d’entre elles, qui doivent être soigneusement prises en compte lors de la concrétisation spécifique d'une preuve de réserves de fonds publique. Nous croyons que les plateformes d'échange et les portefeuilles doivent être dignes de confiance et répondre au désir de transparence de la communauté.

Au cours des dernières semaines, Kraken a mis au point et utilisé un audit indépendant vérifié de manière cryptographique par un leader du secteur. Nous sommes fiers de présenter ce résumé de notre processus à la communauté mondiale des monnaies digitales. Nous croyons que l’industrie du Bitcoin est capable de fournir un niveau de sécurité et de responsabilité supérieur à celui des services financiers traditionnels et notre objectif est de mener la charge vers une transparence optimale.

Contexte actuel

Cet élan d'initiative a pris naissance suite à la proposition de Greg Maxwell. Elle permet aux plateformes d’échanges et portefeuilles de prouver leurs réserves de fonds Bitcoin. [1]

À ce jour, les audits produits par l’industrie du Bitcoin ont été opaques, superficiels et sans vérification cryptographique visible par le public et vérifiable de manière indépendante. Kraken cherche à fournir une preuve de concept et à définir les normes de l'industrie en matière de transparence et de responsabilité pour l'écosystème de la monnaie numérique que les autres peuvent suivre et améliorer.

Qualité du processus

La proposition de Maxwell aurait nécessité que les entreprises Bitcoin révèlent toutes leurs adresses détenant des fonds. Cette méthode aurait dévoilé publiquement les portefeuilles et fonds totaux des plateformes d'échange et fournisseurs de portefeuille, une information sensible qui présente de potentiels risques de sécurité pour les entreprises et leurs utilisateurs. Pire encore, cela résulterait en une faille inadmissible dans la vie privée des utilisateurs et l'historique et la trajectoire des fonds d'un individu ainsi que l'activité financière pourraient être tracés par des parties tierces sans juste cause ou procédure officielle.

Notre procédure ne nécessite pas que nous divulguions notre solde total, adresses ou clés au public. En combinant les forces d'un auditeur de confiance ainsi que de la cryptographie publiquement vérifiable, l'audit de Kraken représente l'équilibre idéal entre la vie privée et la transparence.

Puisque que le Bitcoin est la crypto-monnaie dominante, notre audit initial couvrira uniquement les réserves de fonds Bitcoin. Cependant, des audits pour d'autres actifs seront considérés dans le cas de développements futurs.

Aperçu du Processus

  • Phase 1 - l'auditeur vérifie la totalité des fonds du portefeuille appartenant à Kraken

    Kraken fournit à l'auditeur toutes nos adresses publiques et les signe. Au moment de la signature, le hachage de bloc fait partie du message signé et peut être utilisé comme horodatage pour vérifier quand la signature a été faite. Les signatures de ces adresses publiques seront vérifiées et l'auditeur utilisera la chaîne de blocs bitcoin pour calculer la quantité totale disponible dans ces adresses à un certain moment déterminé.

    Le code requis pour cette phase a été écrit par Michael Gronager, COO de Payward, et pourrait être distribué en open source dans son intégralité à l’avenir. Toutefois, la plupart du code est déjà open source car il est basé sur libcoin. [2]

  • Phase 2 - L'auditeur vérifie que solde des utilisateurs de Kraken correspond aux fonds du portefeuille de Kraken

    Kraken communique à l’auditeur les soldes BTC de chacun de nos utilisateurs et génère un arbre Merkle. L’auditeur publiera le hachage du nœud racine à la vue de tous et affirmera, s’il est vrai, que le total des avoirs représentés par le hachage racine est très proche de la valeur qu’il voit dans notre portefeuille de la chaîne de blocs. Ce flux garantit également que Kraken ne cache rien dans aucun des nœuds conduisant au nœud racine.

    Pour cette phase de l'audit, l'auditeur aura accès au code source du programme générateur d'arborescence et au fichier de données des soldes des comptes individuels. Kraken a publié du code C++ pour cette phase sous licence MIT: https://github.com/payward/krakendb

  • Phase 3 - Les utilisateurs vérifient indépendamment que les soldes de leurs comptes ont été inclus dans les données utilisées par l'auditeur

    Kraken donne aux utilisateurs le montant que nous avons fournit à l'auditeur, ainsi que les nœuds (et les nœuds adjacents) de leur compte à la racine (ce qui correspond à celui publié par l'auditeur). Nous révélons également la méthode de hachage utilisée pour générer le hachage du nœud, afin qu'ils puissent vérifier que le nœud représente le montant que nous réclamons.

    Cela permettra aux utilisateurs de vérifier par eux-mêmes que leur compte a bien été inclus dans les données vérifiées par l'auditeur.

Failles

Dans cette section, nous décrivons certaines des lacunes de cet audit. Veuillez notez qu'il ne s'agit évidemment pas d'une liste exhaustive des faiblesses notées. Cependant, comme nous accordons de l'importance à la transparence envers nos utilisateurs, nous fournissons des informations informelles sur les défaillances spécifiques identifiées jusqu'à présent dans le processus d'audit.

Contrairement aux actifs physiques, l'information ne doit pas nécessairement être enlevée de la possession d'une personne pour être acquise par une autre. Par conséquent, Kraken ou une autre société utilisant cette méthode d'audit ne peut pas prouver que les clés privées n'ont pas été dupliquées par un attaquant. Nous ne pouvons pas non plus prouver que nous possédons exclusivement les fonds audités. Nous pouvons seulement montrer qu'au moment de l'audit, nous étions l'un des détenteurs des clés privées.

L'audit complet ne peut probablement pas être effectué sur demande et sans préavis. Compte tenu des informations requises, de la structure de l'audit et des pratiques standardisées du secteur en matière de sécurité du stockage hors-ligne, il n'est pas possible d'effectuer un audit surprise le même jour. Nous prévoyons un audit "léger” basé sur un audit complet précédent, reposant sur des signatures déjà générées, ce qui peut être fait plus fréquemment.

L’auditeur doit être fiable et compétent. La communauté doit également croire que l'auditeur valorise sa réputation et qu’il est en capacité technique d’effectuer l’audit. Dans le cadre de ce processus d'audit, l'audité a les moyens de tromper un auditeur moins technique ou moins paranoïaque. L’auditeur a également la possibilité de compromettre intentionnellement ou par inadvertance des informations confidentielles de la société et du client. L'auditeur et l'audité doivent tous deux déterminer qui fournit l'ordinateur, l'espace d'audit, la blockchain, la connexion Internet, le routeur, le serveur DNS, etc. Il faut croire que, si l'objectif est de dissimuler une fraude d'un milliard de dollars, tout élément qui pourrait compromettre le processus de vérification devrait être pris en considération.

La vérification n'est pas continuellement effectuée en temps réel. Il est possible que les clés aient été perdues ou que des fonds aient été volés depuis le dernier audit. L’audit complet réitère l’affirmation selon laquelle les clés n’ont pas été perdues, bien qu’il soit davantage exposé aux menaces, car il est nécessaire d’utiliser des clés de stockage hors-ligne pour effectuer l’audit.

L’audité peut emprunter des fonds temporairement ou partager les clés avec le véritable propriétaire des fonds afin d'approuver un audit.

L'auditeur peut agir en collusion avec l'audité ou bien succomber à ses menaces.

De manière continue

Nous avons l'intention d'effectuer des audits de manière continue. Étant donné qu'il n'existe pas d'auditeur de confiance universel, il est possible que nous ayons recours à des auditeurs différents, ou à des auditeurs multiples à chaque fois. Cela permet de rassurer les personnes doutant des accréditations d'un auditeur individuel en particulier

Changements et améliorations à venir

Nous espérons recevoir du feedback de la part de la communauté afin de nous aider ainsi que d'autres acteurs dans l'amélioration de processus pour de futurs audits. En tant que membres de cette communauté, nous espérons également travailler avec des organisations du secteur telles que DATA (www.datauthority.org) afin d'aider à développer des standards de base, des outils scalables et un manuel exhaustif afin de permettre aux autres acteurs de l'industrie d'effectuer des audits comparables.

Références

[1] Résumé par Zak Wilcox: https://iwilcox.me.uk/2014/proving-bitcoin-reserves. Nous tenons à remercier Greg Maxwell pour ses idées.

[2] libcoin est une transformation de bitcoin en librairies modulaires et réutilisables: https://github.com/libcoin/libcoin

Comment vérifier votre solde de compte Kraken à l'aide de l'audit Kraken

Voir également: Processus d'Audit des Réserves de Fonds de Kraken.

Ces instructions détaillent comment vérifier de manière cryptographique le solde votre compte Kraken et son inclusion dans l'audit.

Cette vérification reflètera le solde Bitcoin (XBT) de votre compte au moment de l'audit.

 

  • Étape 1

    Si ce n'est pas déjà fait, veuillez vous connecter à votre compte Kraken.

    Veuillez vous rendre sur https://www.kraken.com/ et vérifiez que la barre d'adresse de votre navigateur affiche "https://www.kraken.com/"

  • Étape 2

    Cliquez sur "Financement" onglet -> "Audit" sous-onglet -> "Bitcoin (XBT)" sur la gauche.

    Illustration 1. Page d'Audit Bitcoin de Kraken

  • Étape 3

    Consultez les informations de votre compte vérifiés par l'auditeur

    • La Date de l'audit, qui est l'horodatage utilisé par l'auditeur.

    • Le code d'Envoi, qui est un "64 bit salt".

    • La Quantité de Bitcoins détenus dans votre compte à la date de l'audit. Il s'agit de la valeur du solde de votre compte que nous avons fourni à l'auditeur.

    • Les Notes incluent les informations de l'auditeur prouvant le hachage racine utilisé pour l'audit. Un lien vers un compte-rendu détaillé et signé est également disponible.

    • Les Hachages du hachage de votre noeud vers le hachage racine, incluent les hachages adjacents. Les valeurs de hachage dans votre chemin direct sont affichés avec un asterisk (*) afin de les différencier des hachages adjacents du noeud. Avec ces hachages, vous pouvez vérifier que votre noeud a été inclu dans la racine:

    • La toute première ligne devrait correspondre à la valeur du hachage racine donnée par l'auditeur.

      Si vous voulez vérifier le hachage de votre propre noeud (le tout dernier hachage avec un * sur la liste), faites:

      
      sha256(sha256(<code d> || ":" || <montant sans point d ni initiaux>))</montant></code>

      La valeur devrait correspondre à la toute dernière valeur donnée dans les hachages.

      Exemple de code

      Code d'envoi: 379377cd8190f9bf

      Montant: 0.01500000

      Python

      
      import hashlib; print(hashlib.sha256(hashlib.sha256(b'379377cd8190f9bf:1500000').digest()).hexdigest());
      

      PHP

      
      echo hash('sha256', hash('sha256', '379377cd8190f9bf:1500000', true));
      

      Résultat

      
      66b51ba0f4a5cf8278acac6782ffdfb9a64b9f7c895bc308266b0757c7025b27
      

      Vous pouvez vérifier l'entièreté de vos branches de Merkle en faisant un hachage de chaque paire ou hachages (ou “tuple”). Le format est:

      
      sha256(hachage-gauche || hachage-droit)
      

      Le résultat devrait correspondre au hachage du tuple précédent (ou au hachage de la racine) comportant un *. Ce serait fait pour tous les tuples.

      Exception faite du hachage racine, tous les hachages sont donnés en tant que tuples, représentant le hachage-gauche et hachage-droite dans cet ordre. Un * est attribué aux hachages qui représentent votre noeud direct.

      Exemple de code:

      Hachages:

      
      306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3*
      c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b*
      5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c
      

      Python

      
      import hashlib; print(hashlib.sha256(b'c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'.decode('hex'))).hexdigest();
      

      PHP

      
      echo hash('sha256', hex2bin('c3fb1f931c681f4a7b779fb19e107bba156cae78c3a928707c42b395b056541b5e01ee0fee85641dd5cd4e3005792f973a2a1362180783041eb1719163b1d21c'));
      

      Résultat

      
      306daae528dc137c9053554c45e90a631ef859490a3ede651d488135602500a3