Bitcoin Forum
May 10, 2024, 08:23:18 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Phrase de récupération et restauration d'un wallet.  (Read 288 times)
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 17, 2020, 06:01:37 PM
 #1

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.

1715372598
Hero Member
*
Offline Offline

Posts: 1715372598

View Profile Personal Message (Offline)

Ignore
1715372598
Reply with quote  #2

1715372598
Report to moderator
1715372598
Hero Member
*
Offline Offline

Posts: 1715372598

View Profile Personal Message (Offline)

Ignore
1715372598
Reply with quote  #2

1715372598
Report to moderator
In order to achieve higher forum ranks, you need both activity points and merit points.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1715372598
Hero Member
*
Offline Offline

Posts: 1715372598

View Profile Personal Message (Offline)

Ignore
1715372598
Reply with quote  #2

1715372598
Report to moderator
1715372598
Hero Member
*
Offline Offline

Posts: 1715372598

View Profile Personal Message (Offline)

Ignore
1715372598
Reply with quote  #2

1715372598
Report to moderator
guigui371
Legendary
*
Offline Offline

Activity: 2114
Merit: 1693

C.D.P.E.M


View Profile
February 17, 2020, 07:25:53 PM
Merited by Halab (3)
 #2

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.

it ain't much but it's honest work
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 17, 2020, 07:46:06 PM
Merited by Halab (2)
 #3

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).


 
guigui371
Legendary
*
Offline Offline

Activity: 2114
Merit: 1693

C.D.P.E.M


View Profile
February 17, 2020, 09:27:40 PM
 #4

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.


it ain't much but it's honest work
yogg
Legendary
*
Offline Offline

Activity: 2464
Merit: 3158



View Profile WWW
February 17, 2020, 09:55:31 PM
Merited by Halab (3), guigui371 (2), Yaplatu (1)
 #5

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 "<seed>\0"

Pour récupérer la première clé privée de cette branche, tu va utiliser la donnée "<seed>\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 "<seed>\0\1" ... "<seed>\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 "<seed>\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 "<seed>" dans mon exemple).
Il y'a une "master public key" qui y est liée.



(@guigui371 merci pour la mention Smiley )
Saint-loup
Legendary
*
Offline Offline

Activity: 2604
Merit: 2354



View Profile
February 17, 2020, 10:06:50 PM
Merited by Halab (3)
 #6

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)

██
██
██
██
██
██
██
██
██
██
██
██
██
... LIVECASINO.io    Play Live Games with up to 20% cashback!...██
██
██
██
██
██
██
██
██
██
██
██
██
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 17, 2020, 10:16:41 PM
 #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
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 18, 2020, 10:39:57 AM
 #8

...
Pour récupérer la première clé privée de cette branche, tu va utiliser la donnée "<seed>\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 "<seed>\0\1" ... "<seed>\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 ?

yogg
Legendary
*
Offline Offline

Activity: 2464
Merit: 3158



View Profile WWW
February 18, 2020, 11:06:36 AM
 #9

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à.
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 18, 2020, 11:53:33 AM
 #10

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
etc.etc.
Member
**
Offline Offline

Activity: 228
Merit: 71


View Profile WWW
February 18, 2020, 12:29:16 PM
Merited by Halab (2), guigui371 (1)
 #11

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.


yogg
Legendary
*
Offline Offline

Activity: 2464
Merit: 3158



View Profile WWW
February 19, 2020, 01:53:11 PM
Merited by Halab (1), guigui371 (1)
 #12

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.
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 19, 2020, 07:54:53 PM
 #13

@ 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.
guigui371
Legendary
*
Offline Offline

Activity: 2114
Merit: 1693

C.D.P.E.M


View Profile
February 19, 2020, 08:23:50 PM
 #14



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)

it ain't much but it's honest work
cyberbob69 (OP)
Jr. Member
*
Offline Offline

Activity: 76
Merit: 7


View Profile
February 19, 2020, 08:37:37 PM
 #15

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.

Saint-loup
Legendary
*
Offline Offline

Activity: 2604
Merit: 2354



View Profile
February 20, 2020, 11:29:46 AM
Merited by Halab (1), guigui371 (1), Yaplatu (1)
 #16

@ 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

██
██
██
██
██
██
██
██
██
██
██
██
██
... LIVECASINO.io    Play Live Games with up to 20% cashback!...██
██
██
██
██
██
██
██
██
██
██
██
██
yogg
Legendary
*
Offline Offline

Activity: 2464
Merit: 3158



View Profile WWW
February 20, 2020, 12:15:58 PM
Merited by Halab (1), guigui371 (1), F2b (1)
 #17

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 :
Quote
Choisir de manière aléatoire un nombre k entre 1 et n-1



J'ai fait le test avec Bitcoin, pour voir comment il se comporte, et effectivement quand tu signes un message directement avec la fonction intégrée à Bitcoin Core, la signature ne change pas.
Contrairement à l'outil proposé par reinproject.

Par ailleurs, les signatures données par l'outil en ligne sont bien vérifiées par Bitcoin Core.
1er essai :



2e essai :




J'en déduis donc que Bitcoin Core utilise toujours le même nombre de départ pour calculer la signature d'un message, alors que le site reinproject le change à chaque fois.




Ce n'est jamais une bonne idée de faire confiance à des portails webs, d'autant plus avec vos clés privées.
C'est utile pour des explications et expérimentations par contre.
Faites attention à ces données, elles se montrent de plus en plus vitales.




@Saint-Loup :

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.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!