Comment fonctionne un porte-monnaie papier bitcoin
Par taz le lundi 31 mars 2014, 07:00 - Économie - Lien permanent
Michael Nielsen a récemment vulgarisé le fonctionnement du protocole bitcoin dans un article certes un peu technique mais néanmoins très didactique.
Cette entrée va tenter d'expliquer le principe d'un porte-monnaie papier pour les bitcoins, support physique qui peut sembler à première vue paradoxal pour une monnaie électronique.
Intro : compte = couple
Une adresse bitcoin est comme une boite aux lettres : tout le monde peut y déposer des sous mais seuls ceux qui ont la clef de la boite peuvent en retirer[1]. Par exemple l'adresse bitcoin de ce weblog est 1radjaJx4P2GNuxv58PMjE6GJZscZX9um .
Mais il s'agit d'une boite aux lettres transparente. Son contenu, et même le détails des transactions entrées/sorties de bitcoins, sont en effet publics, consultables sur la block chain. En ce sens, il est souvent possible de tracer les transactions et de reconstituer le trajet des pièces virtuelles d'adresse en adresse, d'autant plus que des outils systématiques de visualisation des flux comme Quantabytes commencent à être développés. Voilà pourquoi le réseau n'est pas anonyme.
Pour être à même de retirer de l'argent d'une boîte, il faut disposer de sa clef privée. Autrement dit le titulaire d'un compte en bitcoins possède un couple adresse publique / clef privée qu'on pourrait comparer à un couple IBAN / code secret pour accéder à son compte en ligne pour un compte en banque. Techniquement clef privée et adresse publique sont générées simultanément lors de la création d'un nouveau compte (ou porte-monnaie) bitcoin.
Mathématiquement un porte-monnaie est un couple (adresse publique, clef privée). Il s'agit donc de deux nombres. Un porte-monnaie permet de stocker des bitcoins grâce à son adresse publique, et d'en retirer grâce à sa clef privée. En pratique un porte-monnaie peut se matérialiser de différentes manières.
Le stockage à chaud (hot storage) décrit essentiellement les porte-monnaies en ligne : la clef privée est stockée sur internet. De nombreux site internet (par exemple coinbase) proposent des porte-monnaies en ligne.
Le stockage à froid (cold storage) de bitcoins consiste à entreposer ses bitcoins sur un support déconnecté d'internet. Alors que la boite aux lettres est toujours présente sur le réseau décentralisé, la clef privée est stockée sur un support physique (clef USB, papier) hors-ligne.
Le porte-monnaie papier
À l'heure où les piratages et vols de bitcoins sont légion, Alice peut légitimement se dire que garder les informations de son porte-monnaie hors-ligne est plus sûr pour éviter de perdre ses bitcoins. Elle peut donc se créer un porte-monnaie papier, c'est-à-dire un compte bitcoin où adresse publique et clef privée sont imprimées sur une feuille de papier.
Pour cela, Alice va générer un couple de nombres compatibles avec la spécification mathématique d'un porte-monnaie bitcoin, et va les imprimer, tout simplement. Cela peut tout à fait être fait hors-ligne, c'est uniquement lorsque des bitcoins seront stockés sur ce porte-monnaie que le porte-monnaie naîtra dans le réseau. Alice prendra quelques précautions pour s'assurer de l'unicité de la clef privée et ne pas la perdre, auquel cas elle n'aurait plus moyen de récupérer ses précieux bitcoins...
Historiquement les premiers bitcoins physiques furent les Casascius coins. Les 8 premiers chiffres de l'adresse publique sont gravés sur l'avers de la pièce et permettent d'accéder à l'adresse publique complète sur une liste d'adresses publiques Casascius. La clef privée est transcrite sur le revers de la pièce et protégée par un hologramme.
En pratique, plutôt que des nombres, Alice préfèrera imprimer une représentation graphique de ces nombres : des QR codes. Cela lui facilitera la vie pour les transactions, car les QR codes peuvent être facilement convertis en nombres par les smartphones munis d'une caméra et d'un logiciel adéquat (par exemple mycelium).
De nombreux sites proposent la création de porte-monnaie papier, comme bitaddress, ou Bitcoin Paper Wallet.
Ci-dessus, l'image d' un porte-monnaie papier à imprimer généré par bitaddress : à gauche, le QR code public pour charger des bitcoins et consulter le solde, à droite le QR code privé pour en retirer.
Maintenant, supposons qu'Alice veuille donner 1 bitcoin (฿) à Bob. Comment faire ?
- Elle peut transférer 1 ฿ de son propre porte-monnaie papier vers une adresse appartenant à Bob. Pour s'assurer du bon déroulement de la transaction, Bob va consulter le contenu de son porte-monnaie (qui est public). Dès que celui-ci est crédité d'1 ฿, ce qui en pratique prend environ une heure aujourd'hui, Bob est sûr d'avoir bien reçu l'argent.
- Une autre possibilité est qu'Alice donne à Bob un porte-monnaie contenant 1 ฿, par exemple un porte-monnaie papier. Bob peut vérifier sur le block chain que le compte contient bien 1 ฿. Toutefois dans ce cas, il est capital que Bob soit assuré que la clef privée du porte-monnaie papier n'est pas stockée ailleurs, sinon celui qui en possèderait une copie pourrait à tout moment vider le porte-monnaie de Bob !
(À suivre : chiffrement de la clef privée d'un porte-monnaie papier via BIT38, et fragmentation d'une clef privée avec l'algorithme de distribution de Shamir.)
Note
[1] C'est l'idée qui sous-tend le principe du chiffrement asymétrique (El-Gamal, RSA, Diffie-Hellman...).
13 derniers coms