Dans cet article, je vous propose de nous intéresser à la façon dont les clefs fonctionnent pour Chia. Une documentation officielle est disponible sur le site de chia : https://docs.chia.net/docs/09keys/keys-and-signatures/, mais elle reste très technique, et pas toujours simple à comprendre (en tout cas, à ce jour).
Merci à Matt Hauff (aka Quexington), développeur Chia, pour ces réponses !
Phrase mnémonique/clef privée
La création de votre portefeuille commence avec une phrase mnémonique. Il s'agit d'une suite de 24 mots, sélectionnés aléatoirement dans un dictionnaire de 2048 mots possibles. Un petit calcul nous montre qu'il y a environ 3x10⁷⁹ possibilités. C'est à peu près le nombre d'atomes dans l'univers observable (estimé à 2x10⁷⁹), donc autant dire que vos chances de tomber au hasard sur un portefeuille existant sont nulles, même en essayant toute votre vie.
Cette phrase permet de générer votre Master Private Key (que l'on appelle généralement plus simplement la clef privée). Cette opération est réversible (bijective) : vous pouvez récupérer votre phrase mnémonique à partir de votre clef privée. Cette clef privée permet de générer votre Master Public Key (souvent appelée simplement clef publique), celle-ci ne permet pas de revenir vers la clef privée, c'est une opération unidirectionnelle (non-bijective).
Les termes "publique" et "privé" (ou "secret") sont couramment utilisés en cryptographie. Une clef dites publique est partageable sans compromettre la sécurité de vos chia. Une clef privée ne doit jamais être partagée, car elle permet de dépenser l'argent de votre portefeuille.
Ces informations sont visibles avec les commandes suivantes :
# Affiche les informations publiques:
chia keys show
# Affiche les informations publiques ET privées
chia keys show --show-mnemonic-seed
En résumé : une phrase mnémonique et la clef privée sont mathématiquement la même chose (une simple opération permets de passer de l'un à l'autre).
Les adresses
Techniquement, une adresse est représentée par un couple {clef privée adresse/clef publique adresse}. Ce couple de clefs est généré à partir de votre Master Private Key.
La clef publique adresse est tout simplement votre adresse. Elle est publique, et donc partageable. Avec elle, une personne tierce pourra créer une transaction visant à créditer cette adresse. Le solde de cette adresse est également publique.
La clef privée adresse permet de signer les transactions. Cela signifie qu'une transaction visant à dépenser de l'argent d'une adresse doit être signée avec la clef privée adresse correspondante pour être valide. Une transaction signée avec une autre clef sera considérée comme invalide, et ne sera pas acceptée par la blockchain.
Une clef maître privée permet de générer une quasi-infinité d'adresses (infinité de couple {clef privée adresse/clef publique adresse}).
Ces adresses ne sont pas générées aléatoirement, elles suivent un ordre spécifique. Vous serez toujours en mesure de régénérer les mêmes adresses de manière déterministe. Vous pouvez utiliser cette commande pour générer un nombre défini d'adresses :
chia keys derive wallet-address -i 0 -n 10
-i est l'indice de départ (ici nous voulons commencer à partir de la première adresse, son indice est 0)
-n est le nombre d'adresse que l'on souhaite voir (cette commande en affichera donc 10).
La Master Public Key permets également de générer les adresses (publiques uniquement). C'est une fonctionnalité pas encore implémenté dans l'application, mais Bram a expliqué lors de l'AMA de Mars que ce serait une fonctionnalité supportée dans le futur.
Portefeuille
La notion de portefeuille n'existe pas dans la blockchain Chia (qui suit le Coin Model, ou UTXO pour le bitcoin). Le portefeuille tel qu'il apparaît dans l'application Chia est en fait l'agrégation des adresses qui peuvent être générées à partir de votre clef privée.
Ainsi, pour connaître votre solde, l'application va simplement faire le solde des 100 premières adresses qui vous appartiennent. Ce nombre peut être changé dans le fichier de configuration.
Pour être tout à fait rigoureux, il faudrait également parler de la notion de coin, mais cela sera pour un prochain article.
N'hésitez pas à venir en discuter sur Discord !
Comments