Author

Topic: Phrase de récupération et restauration d'un wallet. (Read 288 times)

legendary
Activity: 2464
Merit: 3158
Il y aurais un paramètres "times" qui rentre en compte en plus de la clé privée et adresse lors de la création de la signature que l'on ne vois pas dans l'outils alors ?
Si oui ça expliquerais cela.

On va attendre l'avis de Yogg il devrais savoir.

Merci.


Hello o/

En fait, ce n'est pas vraiment un paramètre "time". Si la signature est différente, il y'a une autre raison.
Ca ne sert à rien de le rendre obligatoire, si tu veux horodater la donnée, tu peux mettre une date dans le message.
D'ailleurs, c'est une bonne idée, car juste faire un message signé qui dirait "coucou je suis yogg" bin n'importe qui pourrait le réutiliser.
(Rajouter du contexte pour éviter l'usurpation d'identité)




Pour ce qui est du fait que la signature change à chaque fois sur le portail que j'ai link, ça vient d'autre chose.
Ca dépend comment tu implémentes l'algorithme, ce qui importe vraiment c'est que la signature permette de "valider" le message.
C'est un algo basé sur ECDSA (https://fr.wikipedia.org/wiki/Elliptic_curve_digital_signature_algorithm)

Tu vois dans la partie "Signature" que la 1ere étape est :
Reuse of the same value for k in a signature algorithm leads to exposure of the private key

Pourtant Bitcoin Core te ressort une signature identique avec le même message. Huh

Pour moi, tu prends un point de départ sur ta courbe, tu fait la projection et tu vois où tu atterris.
Si tu prend le même point de départ, tu atterriras toujours au même endroit.
Par contre si tu le change, t'arrivera à un autre endroit, mais tant que t'es sur la courbe elliptique, tout roule.



EDIT :

Okay, je pense avoir mis le doigt dessus.

Quote
To avoid this vulnerability, the industry best practice is to not generate k with a random-number generator seeded with entropy, but instead to use a deterministic-random process seeded with the transaction data itself. This ensures that each transaction produces a different k. The industry-standard algorithm for deterministic initialization of k is defined in RFC 6979, published by the Internet Engineering Task Force.
(https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch06.asciidoc#the-importance-of-randomness-in-signatures)

L'outil en ligne reinproject utilise un generateur de nombres aléatoires basés sur de l'entropie.
Le client Bitcoin Core considère le message à signer comme une transaction, donc le nombre "k" est produit de manière déterministe, ce qui explique que la signature est identique à chaque fois.
legendary
Activity: 2590
Merit: 2348
@ yogg :

Merci, je fais des tests avec l'outils :
https://reinproject.org/bitcoin-signature-tool/#sign

Mais pourquoi quand je clique plusieurs fois sur "sign message" avec la même clé privée, adresse et le message, cela produit des signatures différentes genres :
Code:
-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message. 19/2/2020
-----BEGIN SIGNATURE-----
1JpD5aexgHY2QJuc77grJqfj9KVcFCnxTx
IIIS3Kjn4rNh1QWShwvi1jPgd9N7X/bpsRW/QaLFP70FDwU9W8XANVg7yU1Ja0zJkAxRHSb/Qfxt9cz1T7iIRC4=
-----END BITCOIN SIGNED MESSAGE-----

-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message. 19/2/2020
-----BEGIN SIGNATURE-----
1JpD5aexgHY2QJuc77grJqfj9KVcFCnxTx
H0DHF6422uSyVfRTVy2z7WD84nleGJFdlHkI53MxjmYw9sh9m6xkc76qfouO567LgkpchxNeZWdWsyIRLe4rqRM=
-----END BITCOIN SIGNED MESSAGE-----

Cela devrait produire les même signature mais non  Huh

Donc suite des questionnement loll.
C'est parce que lors de la génération de la signature une clé aléatoire "éphémère" est rajoutée pour éviter qu'à partir de plusieurs signatures provenant d'une même clef (signant des transactions ou textes différents) on arrive à retrouver la clef privée utilisée.

Comme expliqué dans Mastering Bitcoin dont je parlais au-dessus :

As we saw in ECDSA Math, the signature generation algorithm uses a random key k, as the basis for an ephemeral private/public key pair. The value of k is not important, as long as it is random. If the same value k is used to produce two signatures on different messages (transactions), then the signing private key can be calculated by anyone. Reuse of the same value for k in a signature algorithm leads to exposure of the private key

Code:
S = k-1 (Hash(m) + dA * R) mod n

where:

k is the ephemeral private key

R is the x coordinate of the ephemeral public key

dA is the signing private key

m is the transaction data

n is the prime order of the elliptic curve
https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch06.asciidoc#the-importance-of-randomness-in-signatures
jr. member
Activity: 76
Merit: 7
Il y aurais un paramètres "times" qui rentre en compte en plus de la clé privée et adresse lors de la création de la signature que l'on ne vois pas dans l'outils alors ?
Si oui ça expliquerais cela.

On va attendre l'avis de Yogg il devrais savoir.

Merci.

legendary
Activity: 2114
Merit: 1693
C.D.P.E.M


Cela devrait produire les même signature mais non  Huh

Donc suite des questionnement loll.


peut etre a cause d'un potentiel "timestamps" qui permet de savoir a quel moment la signature a ete faite.

(a verifier, car je sors ca un peu au pif)
jr. member
Activity: 76
Merit: 7
@ yogg :

Merci, je fais des tests avec l'outils :
https://reinproject.org/bitcoin-signature-tool/#sign

Mais pourquoi quand je clique plusieurs fois sur "sign message" avec la même clé privée, adresse et le message, cela produit des signatures différentes genres :
Code:
-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message. 19/2/2020
-----BEGIN SIGNATURE-----
1JpD5aexgHY2QJuc77grJqfj9KVcFCnxTx
IIIS3Kjn4rNh1QWShwvi1jPgd9N7X/bpsRW/QaLFP70FDwU9W8XANVg7yU1Ja0zJkAxRHSb/Qfxt9cz1T7iIRC4=
-----END BITCOIN SIGNED MESSAGE-----

-----BEGIN BITCOIN SIGNED MESSAGE-----
This is an example of a signed message. 19/2/2020
-----BEGIN SIGNATURE-----
1JpD5aexgHY2QJuc77grJqfj9KVcFCnxTx
H0DHF6422uSyVfRTVy2z7WD84nleGJFdlHkI53MxjmYw9sh9m6xkc76qfouO567LgkpchxNeZWdWsyIRLe4rqRM=
-----END BITCOIN SIGNED MESSAGE-----

Cela devrait produire les même signature mais non  Huh

Donc suite des questionnement loll.
legendary
Activity: 2464
Merit: 3158
En fait la réponse a une de mes question m'amène a d'autres questionnement Undecided

 Grin Grin Grin
Bienvenue dans le terrier du lapin d'Alice aux pays des merveilles.
Boucles ta ceinture. Tongue

(Je rentre dans des considérations un peu techniques, je ne sait pas si je m'explique bien, hésites pas à revenir avec des questions Smiley )

Cette signature, elle est obtenue avec un algorithme a l'aide de la clé privée, Mais comment cette signature pourra être vérifiée ensuite pour savoir que c'est bien la clé privée qui a créer cette signature ?

Comme si quelqu'un signe un document, il faut pouvoir vérifié que cette signature est authentique avec la signature d'origine.

etc.etc. a mentionné la cryptographie asymétrique, mais il est plutôt question de signature numérique (cryptographique) dans ce cas là. (https://fr.wikipedia.org/wiki/Signature_num%C3%A9rique)

En fait, voici un exemple :

Code:
-----BEGIN BITCOIN SIGNED MESSAGE-----
Coucou cyberbob69, c'est yogg de bitcointalk
On est le 19 fevrier 2020 et ce message est pour t'expliquer comment ca marche
Essaie de changer un chiffre dans cette suite, tu verra, ça ne se vérifie plus ;)
3726531752648152863
-----BEGIN SIGNATURE-----
1yogg7RkwrSsh1UNi5jw3oUALHBaP4KrX
IA1ogS+44e083yLRBCL2niNDG1XYQ/vStYKOp1CnBcQiFqUgc5CgwnV7VHutaHPPsa7tm+HuTKQMfInlcJRl40M=
-----END BITCOIN SIGNED MESSAGE-----

Si tu copies colles ce texte dans un outil de vérification de signatures Bitcoin, tel que https://reinproject.org/bitcoin-signature-tool/ tu peux vérifier que la signature correspond.

En fait, en "signant" le message avec la clé privée qui a pour adresse publique 1yogg7RkwrSsh1UNi5jw3oUALHBaP4KrX, l'algo produit cette signature là :

Code:
IA1ogS+44e083yLRBCL2niNDG1XYQ/vStYKOp1CnBcQiFqUgc5CgwnV7VHutaHPPsa7tm+HuTKQMfInlcJRl40M=

Si tu changes ne serait-ce qu'un bout de la donnée du message dans l'outil de vérification de signature, tu va voir, ça ne se vérifiera pas.

Cela fait des années que j'utilise mon adresse 1yogg7R... sur le forum, et je fait attention à ma clé privée, donc je peut l'utiliser pour m'identifier et authentifier que certains messages viennent de moi et pas de personnes qui se font passer pour moi.



Bitcoin fonctionne un peu selon le même principe.
Il y'a une écriture dans la blockchain où une certaine adresse publique a reçu des fonds; et la seule façon "valide" pour le réseau de valider une transaction qui les dépense, c'est d'avoir reçu un message de transaction signé avec la clé privée liée à l'adresse publique qui détenait les fonds.
member
Activity: 228
Merit: 71
Comme si quelqu'un signe un document, il faut pouvoir vérifié que cette signature est authentique avec la signature d'origine.

....et c'est là qu'entre en scène la clé publique  Roll Eyes, c'est le principe même de la cryptographie asymétrique ma chère Lucette  Grin

Va donc voir Wikipédia, apprends bien la leçon et reviens demain. Interro écrite à 17h00.

jr. member
Activity: 76
Merit: 7
Ha oui, alors de ce fait la clé privée ne seras jamais dévoilée car la signature se fait dans la puce du hardware wallet a l'aide du logiciel du portefeuille btc.

Cette signature, elle est obtenue avec un algorithme a l'aide de la clé privée, Mais comment cette signature pourra être vérifiée ensuite pour savoir que c'est bien la clé privée qui a créer cette signature ?

Comme si quelqu'un signe un document, il faut pouvoir vérifié que cette signature est authentique avec la signature d'origine.

En fait la réponse a une de mes question m'amène a d'autres questionnement Undecided
legendary
Activity: 2464
Merit: 3158
Salut à vous,

Concernant les clés privées, clés publiques et l'adresse, si il y a un transfert de crypto du wallet vers une adresse, la clé privée sera a un moment dévoilée pour signer la transaction,  non ?
Si il reste des crypto associé a cette clé privée sur le wallet, y a-t-il un risque dans le cas où la clé privée aurais été subtilisée ?

Que faire alors ?

Hello !

Alors, la signature de la transaction se passe dans ton hardware wallet, de manière à ce que la clé privée ne remonte jamais dans le PC.
Il ne "reste" pas de cryptos sur une "clé privée" à moins que tu y aie reçu plusieurs transactions. Le reste t'es en général renvoyé directement par le wallet sur une autre de tes adresses.

T'a reçu 0.1 dans 1 transaction, si tu paie 0.01 à Bob, en vrai tu dis que tu prend les 0.1 en entrée, puis en sortie 0.01 à l'adresse de Bob, et 0.09 à une autre de tes adresses.
Ce message de transaction, tu le signes avec la clé privée qui contient les 0.1BTC que t’utilise en entrée de la transaction et voilà.
jr. member
Activity: 76
Merit: 7
...
Pour récupérer la première clé privée de cette branche, tu va utiliser la donnée "\0\0".
Quand tu passes ça dans l'algo, ça te renvoie la 1ere clé privée sur ta branche.

Après, tu peux récupérer "\0\1" ... "\0\2" .. Toutes des clés privées différentes, liées à des adresses publiques différentes.

Salut à vous,

Concernant les clés privées, clés publiques et l'adresse, si il y a un transfert de crypto du wallet vers une adresse, la clé privée sera a un moment dévoilée pour signer la transaction,  non ?
Si il reste des crypto associé a cette clé privée sur le wallet, y a-t-il un risque dans le cas où la clé privée aurais été subtilisée ?

Que faire alors ?

jr. member
Activity: 76
Merit: 7
@ yogg, @ Saint-loup,

Merci pour vos retours,

Par "re-créer" oui j'entend retomber sur les même jeux de clés depuis la seed d'origine.

Bon j'ai un peu mieux compris les bases de fonctionnement d'un wallet hardware, sans entrer dans les détails.

C'est aussi plus rassurant de savoir un peu comment ca fonctionne cette fameuse seed de récupération
legendary
Activity: 2590
Merit: 2348
Mais si c'est bien ça, comment on peut re-créer des numéro de clé privées différent avec la même phrase de départ ?
Qu'est-ce que tu entends par "re-créer" et pourquoi voudrais-tu en recréer des differents? Si il est deterministe c'est bien justement que par definition tu retombes sur le même jeu de clefs avec la même seed...
Je te conseille la page de iancoleman pour pratiquer et essayer de mieux appréhender la chose.
https://iancoleman.io/bip39/
Le passage de Mastering Bitcoin sur le sujet est également très didactique je trouve (après ça depend de ton niveau)
legendary
Activity: 2464
Merit: 3158
Hey cyberbob69,

T'a compris comment ça marchait dans les grandes lignes.

Mais si c'est bien ça, comment on peut re-créer des numéro de clé privées différent avec la même phrase de départ ?

En fait, ce sont des "branches de dérivation" différentes.


(https://developpaper.com/hp-wallet-concept-and-underlying-principle-bip32-bip39-bip44/)

Je vais vulgariser grossièrement :

Disons qu'une branche, c'est la donnée de ta seed avec un paramètre à la fin, utilisons \0 pour l'exemple.
T'es sur la branche "\0"

Pour récupérer la première clé privée de cette branche, tu va utiliser la donnée "\0\0".
Quand tu passes ça dans l'algo, ça te renvoie la 1ere clé privée sur ta branche.

Après, tu peux récupérer "\0\1" ... "\0\2" .. Toutes des clés privées différentes, liées à des adresses publiques différentes.

Tu peux aussi avoir un "compte".
Pour ça, tu change la branche sur laquelle tu te trouves.
Par exemple "\1\0" -> Ca te renvera la première clé privée sur la 2nde branche. (On compte à partir de 0)



Un autre détail : la seed te permet de récupérer une "master private key" (c'est la donnée "" dans mon exemple).
Il y'a une "master public key" qui y est liée.



(@guigui371 merci pour la mention Smiley )
legendary
Activity: 2114
Merit: 1693
C.D.P.E.M
Salut,

Merci pour les liens, je vais les parcourir après.

Donc si j'ai bien compris, grâce a plusieurs jeux d'algorithme mathématique, lorsque l'on part de la phrase de récup. de 24 mots, elle est convertie en nombre exa (qui est unique et n'existe qu'une fois, vu le nombre très grand de possibilité) ,
ensuite de ce nombre on peut re-créer, avec des algorithme, les différentes clé privées associée a tous les portefeuille que l'on avait sur cette phrase ?

Oui en gros c'est ca.
Apres je ne suis pas non plus un expert, peut etre que @yogg aura une explication plus technique.


Eh bien, de la meme maniere que grace a ton jeux de mots, ca te donne un nombre hexa, et bien tu derive de la toutes les clefs privee qui sont associees.


De la meme maniere qu'au scrable si on the donne A E I K L et N (tu as une main de merde) mais avec un ordinateur  tu peux generer  toutes les combinaisons possibles.

jr. member
Activity: 76
Merit: 7
Salut,

Merci pour les liens, je vais les parcourir après.

Donc si j'ai bien compris, grâce a plusieurs jeux d'algorithme mathématique, lorsque l'on part de la phrase de récup. de 24 mots, elle est convertie en nombre exa (qui est unique et n'existe qu'une fois, vu le nombre très grand de possibilité) ,
ensuite de ce nombre on peut re-créer, avec des algorithme, les différentes clé privées associée a tous les portefeuille que l'on avait sur cette phrase ?

Mais si c'est bien ça, comment on peut re-créer des numéro de clé privées différent avec la même phrase de départ ?

PS: concernant la clé publique, j'ai bien compris qu'elle est créée a partir d'algorithme sur la clé privée, et que l'inverse est mathématiquement impossible (heureusement).


 
legendary
Activity: 2114
Merit: 1693
C.D.P.E.M
Salut,
Alors c'est parceque les wallet sont deterministes et fonctionnent tous (ou presque) de la meme maniere.
Les mots sont convertis en chiffres et le wallet creer les clef privees a partir de ce point de depart.

Je te met des liens (en anglais) si tu veux faire plus de recherche. 


https://en.bitcoin.it/wiki/Seed_phrase

https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki

https://en.bitcoin.it/wiki/Deterministic_wallet


PS :
Si un jour tu restaure un ledger avec ta seed, la wallet sera "vide" d'info.
Il te faudra manuellement creer le wallet BTC, puis ETh, puis BCH .....
Et lors de cette manip, alors le wallet va re creer les meme pair de private / public keys et donc tes balances te seront accessibles.

En soit, juste avec les 24 mots ca ne te duplique pas ton ledger, ca te cree juste le meme point de depart et access aux meme addresses.
jr. member
Activity: 76
Merit: 7
Bonjour,

Je comprend a peu près le fonctionnement d'un hardware wallet genre Ledger, mais il fonctionne tous a peu près selon le même principe.
Mais j'ai du mal avec la récupération grâce a la phrase de 24 mots.
Cette phrase a été crée lors de la configuration du wallet, mais comment elle permet de récupérer TOUS les portefeuille qui lui était associer ?
Comment une seule phrase arrive a récupérer TOUTES les clés privées associée a tout les portefeuille que l'on avait créer au départ.

Je peu détailler si cela n'est pas assez clair ...
Merci.

Jump to: