mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2024-11-22 08:08:11 +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:
|
||||
|
||||
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,
|
||||
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
|
||||
@ -691,7 +691,7 @@ modern standards that may provide additional features or safety.
|
||||
[[recovery_code_words]]
|
||||
==== 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
|
||||
derive a deterministic wallet. The sequence of words is sufficient to
|
||||
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 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
|
||||
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"]
|
||||
|
||||
<<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">
|
||||
@ -804,7 +804,7 @@ data and the length of recovery code in((("wallets", "recovery codes", "generati
|
||||
[[recovery_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
|
||||
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
|
||||
@ -989,13 +989,13 @@ recovery code across multiple locations without relying on the safety of
|
||||
any individual code.
|
||||
|
||||
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]]
|
||||
===== 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
|
||||
recovery code is stretched with a salt consisting of the constant string
|
||||
+"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.
|
||||
|
||||
* 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">
|
||||
@ -1044,7 +1044,7 @@ her family to recover the cryptocurrency estate.
|
||||
[[hd_wallet_details]]
|
||||
==== 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
|
||||
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
|
||||
private key on an offline software wallet application or
|
||||
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]]
|
||||
.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.
|
||||
|
||||
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
|
||||
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
|
||||
@ -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
|
||||
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
|
||||
BIP44 structure are identified by the fact that they only used one
|
||||
branch of the tree: m/44++'++/.
|
||||
@ -1536,7 +1536,7 @@ a few more examples.
|
||||
</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_
|
||||
leading cause--is data loss. If the keys and other essential data
|
||||
required to spend your bitcoins is lost, those bitcoins will forever be
|
||||
|
Loading…
Reference in New Issue
Block a user