mirror of
https://github.com/bitcoinbook/bitcoinbook
synced 2025-02-23 04:52:05 +00:00
Edited ch04_keys.adoc with Atlas code editor
This commit is contained in:
parent
543c4aaecc
commit
9eb432d31a
@ -926,7 +926,7 @@ the HASH160 algorithm. This is a _second preimage attack_.
|
|||||||
|
|
||||||
However, this changes when an attacker is able to influence the original input
|
However, this changes when an attacker is able to influence the original input
|
||||||
value. For example, an attacker participates in the creation of a
|
value. For example, an attacker participates in the creation of a
|
||||||
multisignature script where tthey don't need to submit their public key until after he learns all of the other party's public keys.
|
multisignature script where tthey don't need to submit their public key until after they learn all of the other partys' public keys.
|
||||||
In that case, the strength of hash algorithm is reduced to its square
|
In that case, the strength of hash algorithm is reduced to its square
|
||||||
root. For HASH160, the probability becomes 1-in-2^80^. This is a
|
root. For HASH160, the probability becomes 1-in-2^80^. This is a
|
||||||
_collision attack_.
|
_collision attack_.
|
||||||
@ -943,17 +943,17 @@ create collision attacks for it, but the existence of the Bitcoin
|
|||||||
network proves that collision attacks against 160-bit functions like
|
network proves that collision attacks against 160-bit functions like
|
||||||
HASH160 are practical. Bitcoin miners have spent the equivalent of
|
HASH160 are practical. Bitcoin miners have spent the equivalent of
|
||||||
billions of US dollars on special hardware, so creating a collision
|
billions of US dollars on special hardware, so creating a collision
|
||||||
attack wouldn't be cheap, but there are organizations which expect to
|
attack wouldn't be cheap, but there are organizations that expect to
|
||||||
receive billions of dollars in bitcoins to addresses generated by
|
receive billions of dollars in bitcoins to addresses generated by
|
||||||
processes involving multiple parties, which could make the attack
|
processes involving multiple parties, which could make the attack
|
||||||
profitable.
|
profitable.
|
||||||
|
|
||||||
There are well established cryptographic protocols for preventing
|
There are well-established cryptographic protocols for preventing
|
||||||
collision attacks but a simple solution which doesn't require any
|
collision attacks but a simple solution that doesn't require any
|
||||||
special knowledge on the part of wallet developers is to simply use
|
special knowledge on the part of wallet developers is to simply use
|
||||||
a stronger hash function. Later upgrades to Bitcoin made that possible
|
a stronger hash function. Later upgrades to Bitcoin made that possible
|
||||||
and newer Bitcoin addresses provide at least 128 bits of collision
|
and newer Bitcoin addresses provide at least 128 bits of collision
|
||||||
resistance. To perform 2^128^ hash operations would require all current
|
resistance. To perform 2^128^ hash operations would take all current
|
||||||
Bitcoin miners about 32 billion years.
|
Bitcoin miners about 32 billion years.
|
||||||
|
|
||||||
Although we do not believe there is any immediate threat to anyone
|
Although we do not believe there is any immediate threat to anyone
|
||||||
@ -961,7 +961,7 @@ creating new P2SH addresses, we recommend all new wallets use newer
|
|||||||
types of addresses to eliminate address collision attacks as a concern.
|
types of addresses to eliminate address collision attacks as a concern.
|
||||||
****
|
****
|
||||||
|
|
||||||
=== Bech32 addresses
|
=== Bech32 Addresses
|
||||||
|
|
||||||
In 2017, the Bitcoin protocol was upgraded. When the upgrade is used,
|
In 2017, the Bitcoin protocol was upgraded. When the upgrade is used,
|
||||||
it prevents transaction
|
it prevents transaction
|
||||||
@ -989,10 +989,10 @@ upgrade to an entirely new address format, so several Bitcoin
|
|||||||
contributors set out to design the best possible address format. They
|
contributors set out to design the best possible address format. They
|
||||||
identified several problems with base58check:
|
identified several problems with base58check:
|
||||||
|
|
||||||
- Its mixed case presentation made it inconvenient to read aloud or
|
- Its mixed-case presentation made it inconvenient to read aloud or
|
||||||
transcribe. Try reading one of the legacy addresses in this chapter
|
transcribe. Try reading one of the legacy addresses in this chapter
|
||||||
to a friend who you have transcribe it. Notice how you have to prefix
|
to a friend who you have transcribe it. Notice how you have to prefix
|
||||||
every letter with the words "uppercase" and "lowercase". Also note
|
every letter with the words "uppercase" and "lowercase." Also note
|
||||||
when you review their writing that the uppercase and lowercase
|
when you review their writing that the uppercase and lowercase
|
||||||
versions of some letters can look similar in many people's
|
versions of some letters can look similar in many people's
|
||||||
handwriting.
|
handwriting.
|
||||||
@ -1004,7 +1004,7 @@ identified several problems with base58check:
|
|||||||
located. It might take you several frustrating minutes to eventually
|
located. It might take you several frustrating minutes to eventually
|
||||||
discover the mistake.
|
discover the mistake.
|
||||||
|
|
||||||
- A mixed case alphabet also requires extra space to encode in QR codes,
|
- A mixed-case alphabet also requires extra space to encode in QR codes,
|
||||||
which are commonly used to share addresses and invoices
|
which are commonly used to share addresses and invoices
|
||||||
between wallets. That extra space means QR codes need to be larger at
|
between wallets. That extra space means QR codes need to be larger at
|
||||||
the same resolution or they become harder to scan quickly.
|
the same resolution or they become harder to scan quickly.
|
||||||
@ -1069,7 +1069,7 @@ image::images/mbc3_0409.png["The same bech32 address QR encoded in lowercase and
|
|||||||
hoped that we might never again need to go through the system-wide
|
hoped that we might never again need to go through the system-wide
|
||||||
upgrade cycles necessary to allow people to fully use P2SH and segwit.
|
upgrade cycles necessary to allow people to fully use P2SH and segwit.
|
||||||
|
|
||||||
==== Problems with bech32 addresses
|
==== Problems with Bech32 Addresses
|
||||||
|
|
||||||
Bech32 addresses would have been a success in every area except for one
|
Bech32 addresses would have been a success in every area except for one
|
||||||
problem. The mathematical guarantees about their ability to detect
|
problem. The mathematical guarantees about their ability to detect
|
||||||
@ -1084,7 +1084,7 @@ users' funds were safe.
|
|||||||
Unfortunately, the choice for one of the constants in the bech32
|
Unfortunately, the choice for one of the constants in the bech32
|
||||||
algorithm just happened to make it very easy to add or remove the letter
|
algorithm just happened to make it very easy to add or remove the letter
|
||||||
"q" in the penultimate position of an address that ends with the letter
|
"q" in the penultimate position of an address that ends with the letter
|
||||||
"p". In those cases, you can also add or remove the letter "q" multiple
|
"p." In those cases, you can also add or remove the letter "q" multiple
|
||||||
times. This will be caught by the checksum some of the time, but it
|
times. This will be caught by the checksum some of the time, but it
|
||||||
will be missed far more often than the one-in-a-billion expectations for
|
will be missed far more often than the one-in-a-billion expectations for
|
||||||
bech32's substitution errors. For an example, see <<bech32_length_extension_example>>.
|
bech32's substitution errors. For an example, see <<bech32_length_extension_example>>.
|
||||||
@ -1114,7 +1114,7 @@ bc1pqqqsq9txsqqqqqqqqqqqp
|
|||||||
|
|
||||||
For the initial version of segwit (version 0), this wasn't a practical
|
For the initial version of segwit (version 0), this wasn't a practical
|
||||||
concern. Only two valid lengths were defined for v0 segwit outputs: 22
|
concern. Only two valid lengths were defined for v0 segwit outputs: 22
|
||||||
bytes and 34 bytes. Those correspond to bech32 addresses 42 characters
|
bytes and 34 bytes. Those correspond to bech32 addresses that are 42 characters
|
||||||
or 62 characters long, so someone would need to add or remove the letter "q"
|
or 62 characters long, so someone would need to add or remove the letter "q"
|
||||||
from the penultimate position of a bech32 address 20 times in order to
|
from the penultimate position of a bech32 address 20 times in order to
|
||||||
send money to an invalid address without a wallet being able to detect
|
send money to an invalid address without a wallet being able to detect
|
||||||
@ -1158,7 +1158,12 @@ need to know about the HRPs already chosen, shown in
|
|||||||
[[bech32_hrps_for_bitcoin]]
|
[[bech32_hrps_for_bitcoin]]
|
||||||
.Bech32 HRPs for Bitcoin
|
.Bech32 HRPs for Bitcoin
|
||||||
[cols="1,1"]
|
[cols="1,1"]
|
||||||
|
[options="header"]
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
| HRPs
|
||||||
|
| Network
|
||||||
|
|
||||||
| bc
|
| bc
|
||||||
| Bitcoin mainnet
|
| Bitcoin mainnet
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user