Recours à la cryptographie

Pour être valide, chaque transaction doit être signée, au sens cryptographique du terme en utilisant de la cryptographie asymétrique, ce qui est rendu possible par le fait qu’une adresse bitcoin est aussi l’empreinte cryptographique d’une clef publique. Une transaction reçoit en entrée la référence d’une transaction précédente qui justifie que les fonds induits sont bien réels, et produit en sortie une ou plusieurs adresses bitcoin avec les montants attribués correspondants. Une transaction équilibre toujours ses entrées et ses sorties.

Pour transmettre des bitcoins, un utilisateur doit signer cryptographiquement une transaction faisant référence en entrée à une ou plusieurs transactions précédentes dont le montant de sortie est suffisant. La clef privée, utilisée pour signer cette transaction, doit correspondre à la clef publique ayant reçu des bitcoins précédemment. L’utilisateur doit donc stocker toutes ces clefs privées, sans bien sûr partager ces informations. Le fichier correspondant dans le logiciel s’appelle wallet.dat et c’est ce fichier qui doit être conservé et sauvegardé par l’utilisateur, de façon confidentielle. La perte de ce portefeuille électronique rendrait impossible l’utilisation des bitcoins correspondants, qui resteraient éternellement dans la base sans jamais pouvoir changer d’adresse.

La cryptographie est utilisée pour permettre l’authentification et la non répudiation décrite plus haut, grâce à la signature des transactions et aux fonctions à sens unique. À aucun moment le système n’assure la confidentialité et le chiffrement des données transmises sur le réseau. Toutes les transactions sont donc en clair, et leur anonymat n’est protégé que par le fait que le logiciel n’utilise aucune donnée personnelle de l’utilisateur. Par conséquent, un utilisateur ne peut trahir son identité que s’il le fait volontairement, si son adresse IP est traçable, ou éventuellement à la suite d’une méticuleuse et complexe étude statistique sur la base de données des transactions.

Bitcoin utilise le concept de preuve de travail, initialement imaginé pour résoudre le problème du spam, et implémenté par exemple dans le système Hashcash. Les algorithmes de hashage sont SHA-256 et RIPEMD-160. Un double hash en SHA-256 est utilisé pour obtenir le hash des blocs et donc la preuve de travail, tandis qu’un SHA-256 suivi d’un RIPEMD-160 est utilisé pour construire les adresses bitcoins.

Les signatures de transactions sont effectuées en utilisant la cryptographie à courbes elliptiques, dite ECDSA. En l’occurrence, la courbe employée est secp256k1.

Le système Bitcoin ne chiffre aucune des données qu’il utilise. La cryptographie est seulement utilisée pour créer des signatures non falsifiables et implanter des fonctions à sens unique. Seul le portefeuille de clefs privées est susceptible d’être chiffré par l’utilisateur, mais ceci est facultatif, relève de sa seule compétence et ne fait pas partie des spécifications du système : la confidentialité peut être à la charge du système d’exploitation ou d’un logiciel de chiffrement adapté, comme pour n’importe quel autre fichier.