mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2024-11-25 17:38:26 +00:00
Edited ch05_wallets.adoc with Atlas code editor
This commit is contained in:
parent
8a7dc26895
commit
dd1e2af69a
@ -286,7 +286,7 @@ Several ((("wallets", "recovery codes", "types of", id="wallet-recovery-type")))
|
|||||||
writing:
|
writing:
|
||||||
|
|
||||||
BIP39::
|
BIP39::
|
||||||
The most ((("BIP39 recovery codes")))popular method for generating recovery codes for the
|
The most ((("BIP39 recovery codes", primary-sortas="BIP039")))popular method for generating recovery codes for the
|
||||||
past decade, BIP39 involves generating a random sequence of bytes,
|
past decade, BIP39 involves generating a random sequence of bytes,
|
||||||
adding a checksum to it, and encoding the data into a series of 12 to
|
adding a checksum to it, and encoding the data into a series of 12 to
|
||||||
24 words (which may be localized to a user's native language). The
|
24 words (which may be localized to a user's native language). The
|
||||||
@ -691,7 +691,7 @@ modern standards that may provide additional features or safety.
|
|||||||
[[recovery_code_words]]
|
[[recovery_code_words]]
|
||||||
==== BIP39 Recovery Codes
|
==== BIP39 Recovery Codes
|
||||||
|
|
||||||
BIP39 ((("wallets", "recovery codes", id="wallet-recovery-bip39")))((("recovery codes", id="recovery-code-bip39")))((("BIP39 recovery codes", id="bip39-recovery")))recovery codes are word
|
BIP39 ((("wallets", "recovery codes", id="wallet-recovery-bip39")))((("recovery codes", id="recovery-code-bip39")))((("BIP39 recovery codes", primary-sortas="BIP039", id="bip39-recovery")))recovery codes are word
|
||||||
sequences that represent (encode) a random number used as a seed to
|
sequences that represent (encode) a random number used as a seed to
|
||||||
derive a deterministic wallet. The sequence of words is sufficient to
|
derive a deterministic wallet. The sequence of words is sufficient to
|
||||||
re-create the seed and from there, re-create all the
|
re-create the seed and from there, re-create all the
|
||||||
@ -726,7 +726,7 @@ steps 7 through 9 are shown in <<recovery_to_seed>>.
|
|||||||
[[generating_recovery_words]]
|
[[generating_recovery_words]]
|
||||||
===== Generating a recovery code
|
===== Generating a recovery code
|
||||||
|
|
||||||
Recovery((("wallets", "recovery codes", "generating", id="wallet-recovery-bip39-generate")))((("recovery codes", "generating", id="recovery-code-bip39-generate")))((("BIP39 recovery codes", "generating", id="bip39-recovery-generate")))((("entropy", "recovery code generation", id="entropy-recovery-generate"))) codes are generated automatically by the wallet application using the
|
Recovery((("wallets", "recovery codes", "generating", id="wallet-recovery-bip39-generate")))((("recovery codes", "generating", id="recovery-code-bip39-generate")))((("BIP39 recovery codes", "generating", primary-sortas="BIP039", id="bip39-recovery-generate")))((("entropy", "recovery code generation", id="entropy-recovery-generate"))) codes are generated automatically by the wallet application using the
|
||||||
standardized process defined in BIP39. The wallet starts from a source
|
standardized process defined in BIP39. The wallet starts from a source
|
||||||
of entropy, adds a checksum, and then maps the entropy to a word list:
|
of entropy, adds a checksum, and then maps the entropy to a word list:
|
||||||
|
|
||||||
@ -752,7 +752,7 @@ generate a BIP39 recovery code.
|
|||||||
image::images/mbc3_0504.png["Generating entropy and encoding as a recovery code"]
|
image::images/mbc3_0504.png["Generating entropy and encoding as a recovery code"]
|
||||||
|
|
||||||
<<table_4-5>> shows the relationship between the size of the entropy
|
<<table_4-5>> shows the relationship between the size of the entropy
|
||||||
data and the length of recovery code in((("wallets", "recovery codes", "generating", startref="wallet-recovery-bip39-generate")))((("recovery codes", "generating", startref="recovery-code-bip39-generate")))((("BIP39 recovery codes", "generating", startref="bip39-recovery-generate")))((("entropy", "recovery code generation", startref="entropy-recovery-generate"))) words.
|
data and the length of recovery code in((("wallets", "recovery codes", "generating", startref="wallet-recovery-bip39-generate")))((("recovery codes", "generating", startref="recovery-code-bip39-generate")))((("BIP39 recovery codes", "generating", primary-sortas="BIP039", startref="bip39-recovery-generate")))((("entropy", "recovery code generation", startref="entropy-recovery-generate"))) words.
|
||||||
|
|
||||||
++++
|
++++
|
||||||
<table id="table_4-5">
|
<table id="table_4-5">
|
||||||
@ -804,7 +804,7 @@ data and the length of recovery code in((("wallets", "recovery codes", "generati
|
|||||||
[[recovery_to_seed]]
|
[[recovery_to_seed]]
|
||||||
===== From recovery code to seed
|
===== From recovery code to seed
|
||||||
|
|
||||||
The ((("wallets", "recovery codes", "seed generation", id="wallet-recovery-bip39-seed")))((("recovery codes", "seed generation", id="recovery-code-bip39-seed")))((("BIP39 recovery codes", "seed generation", id="bip39-recovery-seed")))((("entropy", "seed generation", id="entropy-seed-generate")))((("seeds", "generating", id="seed-generate")))((("key-stretching functions", id="key-stretch")))recovery code
|
The ((("wallets", "recovery codes", "seed generation", id="wallet-recovery-bip39-seed")))((("recovery codes", "seed generation", id="recovery-code-bip39-seed")))((("BIP39 recovery codes", "seed generation", primary-sortas="BIP039", id="bip39-recovery-seed")))((("entropy", "seed generation", id="entropy-seed-generate")))((("seeds", "generating", id="seed-generate")))((("key-stretching functions", id="key-stretch")))recovery code
|
||||||
represents entropy with a length of 128 to 256 bits. The entropy is then
|
represents entropy with a length of 128 to 256 bits. The entropy is then
|
||||||
used to derive a longer (512-bit) seed through the use of the
|
used to derive a longer (512-bit) seed through the use of the
|
||||||
key-stretching function PBKDF2. The seed produced is then used to build
|
key-stretching function PBKDF2. The seed produced is then used to build
|
||||||
@ -989,13 +989,13 @@ recovery code across multiple locations without relying on the safety of
|
|||||||
any individual code.
|
any individual code.
|
||||||
|
|
||||||
As of 2023, most modern wallets generate 128 bits of entropy for their
|
As of 2023, most modern wallets generate 128 bits of entropy for their
|
||||||
recovery codes (or a value near 128, such as((("wallets", "recovery codes", "seed generation", startref="wallet-recovery-bip39-seed")))((("recovery codes", "seed generation", startref="recovery-code-bip39-seed")))((("BIP39 recovery codes", "seed generation", startref="bip39-recovery-seed")))((("entropy", "seed generation", startref="entropy-seed-generate")))((("seeds", "generating", startref="seed-generate"))) Electrum v2's 132 bits).
|
recovery codes (or a value near 128, such as((("wallets", "recovery codes", "seed generation", startref="wallet-recovery-bip39-seed")))((("recovery codes", "seed generation", startref="recovery-code-bip39-seed")))((("BIP39 recovery codes", "seed generation", primary-sortas="BIP039", startref="bip39-recovery-seed")))((("entropy", "seed generation", startref="entropy-seed-generate")))((("seeds", "generating", startref="seed-generate"))) Electrum v2's 132 bits).
|
||||||
****
|
****
|
||||||
|
|
||||||
[[recovery_passphrase]]
|
[[recovery_passphrase]]
|
||||||
===== Optional passphrase in BIP39
|
===== Optional passphrase in BIP39
|
||||||
|
|
||||||
The((("wallets", "recovery codes", "passphrases", id="wallet-recovery-bip39-passphrase")))((("recovery codes", "passphrases", id="recovery-code-bip39-passphrase")))((("BIP39 recovery codes", "passphrases", id="bip39-recovery-passphrase")))((("passphrases (for recovery codes)", id="passphrase-optional"))) BIP39 standard allows the use of an optional
|
The((("wallets", "recovery codes", "passphrases", id="wallet-recovery-bip39-passphrase")))((("recovery codes", "passphrases", id="recovery-code-bip39-passphrase")))((("BIP39 recovery codes", "passphrases", primary-sortas="BIP039", id="bip39-recovery-passphrase")))((("passphrases (for recovery codes)", id="passphrase-optional"))) BIP39 standard allows the use of an optional
|
||||||
passphrase in the derivation of the seed. If no passphrase is used, the
|
passphrase in the derivation of the seed. If no passphrase is used, the
|
||||||
recovery code is stretched with a salt consisting of the constant string
|
recovery code is stretched with a salt consisting of the constant string
|
||||||
+"mnemonic"+, producing a specific 512-bit seed from any given recovery code.
|
+"mnemonic"+, producing a specific 512-bit seed from any given recovery code.
|
||||||
@ -1030,7 +1030,7 @@ It's important to note that the use of a passphrase also introduces the risk of
|
|||||||
|
|
||||||
* If the wallet owner is incapacitated or dead and no one else knows the passphrase, the seed is useless and all the funds stored in the wallet are lost forever.
|
* If the wallet owner is incapacitated or dead and no one else knows the passphrase, the seed is useless and all the funds stored in the wallet are lost forever.
|
||||||
|
|
||||||
* Conversely, if the owner backs up the passphrase in the same place as the seed, it defeats the purpose of a second((("wallets", "recovery codes", startref="wallet-recovery-bip39")))((("recovery codes", startref="recovery-code-bip39")))((("BIP39 recovery codes", startref="bip39-recovery")))((("wallets", "recovery codes", "passphrases", startref="wallet-recovery-bip39-passphrase")))((("recovery codes", "passphrases", startref="recovery-code-bip39-passphrase")))((("BIP39 recovery codes", "passphrases", startref="bip39-recovery-passphrase")))((("passphrases (for recovery codes)", startref="passphrase-optional"))) factor.
|
* Conversely, if the owner backs up the passphrase in the same place as the seed, it defeats the purpose of a second((("wallets", "recovery codes", startref="wallet-recovery-bip39")))((("recovery codes", startref="recovery-code-bip39")))((("BIP39 recovery codes", primary-sortas="BIP039", startref="bip39-recovery")))((("wallets", "recovery codes", "passphrases", startref="wallet-recovery-bip39-passphrase")))((("recovery codes", "passphrases", startref="recovery-code-bip39-passphrase")))((("BIP39 recovery codes", "passphrases", primary-sortas="BIP039", startref="bip39-recovery-passphrase")))((("passphrases (for recovery codes)", startref="passphrase-optional"))) factor.
|
||||||
|
|
||||||
++++
|
++++
|
||||||
<p class="fix_tracking2">
|
<p class="fix_tracking2">
|
||||||
@ -1044,7 +1044,7 @@ her family to recover the cryptocurrency estate.
|
|||||||
[[hd_wallet_details]]
|
[[hd_wallet_details]]
|
||||||
==== Creating an HD Wallet from the Seed
|
==== Creating an HD Wallet from the Seed
|
||||||
|
|
||||||
HD wallets ((("wallets", "key generation", "HD (hierarchical deterministic)", id="wallet-keygen-hd")))((("key generation", "HD (hierarchical deterministic)", id="keygen-hd")))((("HD (hierarchical deterministic) key generation", id="hd-keygen")))((("BIP32 HD (hierarchical deterministic) key generation", id="bip32")))((("seeds", "HD wallet creation", id="seed-hdwallet")))are created from a ((("root seeds")))single _root seed_, which is a
|
HD wallets ((("wallets", "key generation", "HD (hierarchical deterministic)", id="wallet-keygen-hd")))((("key generation", "HD (hierarchical deterministic)", id="keygen-hd")))((("HD (hierarchical deterministic) key generation", id="hd-keygen")))((("BIP32 HD (hierarchical deterministic) key generation", primary-sortas="BIP032", id="bip32")))((("seeds", "HD wallet creation", id="seed-hdwallet")))are created from a ((("root seeds")))single _root seed_, which is a
|
||||||
128-, 256-, or 512-bit random number. Most commonly, this seed is
|
128-, 256-, or 512-bit random number. Most commonly, this seed is
|
||||||
generated by or decrypted from a recovery code as detailed in the previous section.
|
generated by or decrypted from a recovery code as detailed in the previous section.
|
||||||
|
|
||||||
@ -1281,7 +1281,7 @@ user can create "receive" addresses at will, while the private keys are
|
|||||||
safely stored offline. To spend the funds, the user can use the extended
|
safely stored offline. To spend the funds, the user can use the extended
|
||||||
private key on an offline software wallet application or
|
private key on an offline software wallet application or
|
||||||
the hardware signing device. <<CKDpub>> illustrates the
|
the hardware signing device. <<CKDpub>> illustrates the
|
||||||
mechanism for extending a parent public key to derive child ((("wallets", "key generation", "HD (hierarchical deterministic)", startref="wallet-keygen-hd")))((("key generation", "HD (hierarchical deterministic)", startref="keygen-hd")))((("HD (hierarchical deterministic) key generation", startref="hd-keygen")))((("BIP32 HD (hierarchical deterministic) key generation", startref="bip32")))((("seeds", "HD wallet creation", startref="seed-hdwallet")))((("key generation", "HD (hierarchical deterministic)", "public child key derivation", startref="keygen-hd-public-child")))((("HD (hierarchical deterministic) key generation", "public child key derivation", startref="hd-keygen-public-child")))((("public child key derivation", startref="public-child")))((("child key pair derivation", "public keys", startref="child-key-pair-public")))public keys.
|
mechanism for extending a parent public key to derive child ((("wallets", "key generation", "HD (hierarchical deterministic)", startref="wallet-keygen-hd")))((("key generation", "HD (hierarchical deterministic)", startref="keygen-hd")))((("HD (hierarchical deterministic) key generation", startref="hd-keygen")))((("BIP32 HD (hierarchical deterministic) key generation", primary-sortas="BIP032", startref="bip32")))((("seeds", "HD wallet creation", startref="seed-hdwallet")))((("key generation", "HD (hierarchical deterministic)", "public child key derivation", startref="keygen-hd-public-child")))((("HD (hierarchical deterministic) key generation", "public child key derivation", startref="hd-keygen-public-child")))((("public child key derivation", startref="public-child")))((("child key pair derivation", "public keys", startref="child-key-pair-public")))public keys.
|
||||||
|
|
||||||
[[CKDpub]]
|
[[CKDpub]]
|
||||||
.Extending a parent public key to create a child public key.
|
.Extending a parent public key to create a child public key.
|
||||||
@ -1465,7 +1465,7 @@ because the possibilities for internal organization into branches and
|
|||||||
subbranches are endless.
|
subbranches are endless.
|
||||||
|
|
||||||
Two BIPs offer a solution to this complexity by creating some proposed
|
Two BIPs offer a solution to this complexity by creating some proposed
|
||||||
standards for the structure of HD wallet trees. ((("BIP43 HD wallet tree structure")))BIP43 proposes the use
|
standards for the structure of HD wallet trees. ((("BIP43 HD wallet tree structure", primary-sortas="BIP043")))BIP43 proposes the use
|
||||||
of the first hardened child index as a special identifier that signifies
|
of the first hardened child index as a special identifier that signifies
|
||||||
the "purpose" of the tree structure. Based on BIP43, an HD wallet
|
the "purpose" of the tree structure. Based on BIP43, an HD wallet
|
||||||
should use only one level-1 branch of the tree, with the index number
|
should use only one level-1 branch of the tree, with the index number
|
||||||
@ -1474,7 +1474,7 @@ defining its purpose. For example, an HD wallet using only branch
|
|||||||
m/i++'++/ is intended to signify a specific purpose, and that
|
m/i++'++/ is intended to signify a specific purpose, and that
|
||||||
purpose is identified by index number "i."
|
purpose is identified by index number "i."
|
||||||
|
|
||||||
Extending that specification, ((("BIP44 HD wallet tree structure", id="bip44")))BIP44 proposes a multiaccount structure
|
Extending that specification, ((("BIP44 HD wallet tree structure", primary-sortas="BIP044", id="bip44")))BIP44 proposes a multiaccount structure
|
||||||
as "purpose" number +44'+ under BIP43. All HD wallets following the
|
as "purpose" number +44'+ under BIP43. All HD wallets following the
|
||||||
BIP44 structure are identified by the fact that they only used one
|
BIP44 structure are identified by the fact that they only used one
|
||||||
branch of the tree: m/44++'++/.
|
branch of the tree: m/44++'++/.
|
||||||
@ -1536,7 +1536,7 @@ a few more examples.
|
|||||||
</table>
|
</table>
|
||||||
++++
|
++++
|
||||||
|
|
||||||
Many people ((("BIP44 HD wallet tree structure", startref="bip44")))focus on securing their bitcoins against theft and other
|
Many people ((("BIP44 HD wallet tree structure", primary-sortas="BIP044", startref="bip44")))focus on securing their bitcoins against theft and other
|
||||||
attacks, but one of the leading causes of lost bitcoins--perhaps _the_
|
attacks, but one of the leading causes of lost bitcoins--perhaps _the_
|
||||||
leading cause--is data loss. If the keys and other essential data
|
leading cause--is data loss. If the keys and other essential data
|
||||||
required to spend your bitcoins is lost, those bitcoins will forever be
|
required to spend your bitcoins is lost, those bitcoins will forever be
|
||||||
|
Loading…
Reference in New Issue
Block a user