La cryptographie asymétrique a été inventée dans les années 1970. Cette méthode de cryptographie est utilisée pour générer une signature numérique, elle ne permet pas d’encoder puis de décoder un message.
Dans la cryptographie asymétrique, il existe deux types de clés : la clé privée et la clé publique. La clé privée (comme son nom l’indique) doit être conservée précieusement par son utilisateur et ne doit pas être partager avec d’autres personnes. À l’inverse, la clé publique (comme son nom l’indique) doit être partagée avec le réseaux.
Une clé publique est générée à partir d’une clé privée à l’aide d’une méthode de multiplication par courbe elliptique. Cette méthode n’est pas réversible (il est impossible de retrouver une clé privée grâce à la clé publique).
Ainsi, la personne qui a en sa possession la clé publique d’un autre utilisateur peut seulement valider que l’utilisateur en question est bien le signataire du message reçu.
Une clé privée permet de générer une signature en encodant un message. Une fois le message encodé, l’utilisateur distribue sa clé publique (associée à sa clé privée), le message et le message encodé afin de démontrer qu’il est bien le signataire.
Dans le domaine des chaînes de blocs, une clé privée permet de signer une transaction et donc d’envoyer des cryptomonnaies (les clés publiques étant connues par tout le réseaux).
Par exemple, un utilisateur X crypte le message suivant : « A envoie 1 BTC à B ». L’utilisateur X envoie ensuite ce message, le message crypté et sa clé publique au réseau Bitcoin qui va vérifier la signature. Ici, le « A » fait référence à une ancienne transaction qui avait été attribuée dans la chaîne de blocs à l’utilisateur X et sa signature permet :
1) de prouver que cette transaction lui était bien adressée ;
2) de valider la nouvelle transaction.
Dans la chaîne de blocs, la quantité de bitcoins que possèdent les utilisateurs n’est pas indiquée. C’est la quantité de bitcoins que les utilisateurs ont échangée entre eux qui est enregistrée. Autrement dit, il s’agit d’un livre de transactions et non d’un livre de comptes. Ainsi, pour faire une transaction, un utilisateur doit faire référence à une UTXO (Unspent Transaction Output), soit une transaction reçue dans le passé et qui n’a toujours pas été dépensée.
La clé privée doit donc être conservée dans un portefeuille hautement sécuritaire, car si elle est perdue ou subtilisée, il ne sera plus possible de transférer les cryptomonnaies qui s’y trouvent (cf. Comment sécuriser ses cryptomonnaies).
Une clé privée est généralement constituée d’une suite de 256 chiffres binaires (0 ou 1). Plus précisément, c’est un nombre entre 0 et 2256-1. Il existe donc 2256 = 1,2.1077 combinaisons possibles, ce qui est presque autant que le nombre d’atomes se trouvant dans l’univers!
En théorie, il serait possible de créer une clé privée par soi-même en choisissant une suite de 256 chiffres binaires (en tirant à pile ou face, par exemple). Il faut ensuite calculer sa clé publique et son adresse (une adresse est générée par un hachage de la clé publique). Cela serait très sécuritaire (impossible de se faire pirater) mais c’est nettement plus simple d’utiliser un portefeuille numérique, un portefeuille papier ou un portefeuille matériel!