March 8, 2024—The foundation of Bitcoin self-sovereignty is managing your private keys. Without control over them, you cede control of your money to someone else, aligning with the saying, “Not your keys, not your coins.” For those new to Bitcoin, the concept of where Bitcoin is stored may seem counterintuitive. Unlike traditional wallets that physically hold money, Bitcoin wallets only store private keys. Your Bitcoin is a series of data entries on the blockchain maintained by the network participants. When you transact with Bitcoin, you propose an update to the blockchain data using your private key, which ensures only you can authorize the transaction.
What Are Private Keys?
Private keys are extremely large numbers. This is a private key in binary:
1110001011011001011110111100000101000100000010001001111010111011010101110111001111111111101010111010010111010011101001110010100110111101000110000111110101111001101001011110011011101000001101101101110001101000110001111010001001001111011010101011001101101010
Though it may not seem impressive, its randomness ensures the security of your Bitcoin. The sheer number of possible private keys is as vast as the number of atoms in the visible universe. If the key generation process is genuinely random, your keys remain secure.
Here’s a private key in hexadecimal (binary uses two digits—1 and 0—whereas hexadecimal uses 16 digits, 0-9 and A-F):
E2D97BC144089EBB5773FFABA5D3A729BD187D79A5E6E836DC68C7A24F6AB36A
And here is a private key in uncompressed Wallet Import Format (WIF):
5KYC9aMMSDWGJciYRtwY3mNpeTn91BLagdjzJ4k4RQmdhQvE98G
In Bitcoin’s early days, people interacted with private keys using the WIF format. By generating one private key at a time, they would derive the corresponding public key through mathematical operations involving large numbers. All public keys are points on a graph representing a large curve.
Bitcoin uses a specific curve called Secp256k1, which includes a base point known as the “generator point.” This point is crucial for key generation and signing. The generator point for Bitcoin’s curve is:
G = 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
To generate a public key from a private key, you multiply the private key with the generator point. This creates a point on the graph with a mathematical relationship only you know.
This is an uncompressed public key showing both x and y points:
04C0E410A572C880D1A2106AFE1C6EA2F67830ABCC8BBDF24729F7BF3AFEA06158F0C04D7335D051A92442330A50B8C37CE0EC5AFC4FFEAB41732DA5108261FFED
Public keys are often compressed to store just the x coordinate and an indicator of the y coordinate’s sign, shortening the key considerably.
When signing a transaction with your private key, the process involves generating a random number (the nonce), using your private key and the transaction hash to create a signature (consisting of two values, r and s). This allows others to verify the signature without revealing your private key.
If you’re not familiar with these concepts, terms like binary, hexadecimal, and graph points can seem daunting. But advances in handling this data mean that most users now use more intuitive formats like seed phrases.
BIP 39 Mnemonic Seeds
Mnemonic seeds, or seed phrases, simplify interacting with your private keys. Instead of dealing with complex binary numbers, mnemonic seeds use words to represent the same information, making them easier to remember and work with.
For instance, a seed phrase might look like this:
truck renew fury donkey remind laptop reform detail split grief because fat
This 12-word sequence is easier to remember than a long binary string. Each word maps to a binary number through an encoding scheme. Bitcoin Improvement Proposal 39 (BIP 39) introduced this standardized encoding scheme.
The demonstration seed above translates to:
truck: 11101001001
renew: 10110110001
fury: 01011110011
donkey: 01000001001
remind: 10110101110
laptop: 01111101000
reform: 10110100010
detail: 00111100010
split: 11010010001
grief: 01100110100
because: 00010011110
fat: 01010011011
In binary, it appears as:
11101001001 10110110001 01011110011 01000001001 10110101110 01111101000 10110100010 00111100010 11010010001 01100110100 00010011110 0101001 1011
The process of encoding this information into a 12- or 24-word seed reduces transcription errors and provides a human-friendly format for interacting with private keys. The seed’s last word serves as a checksum to validate the seed phrase.
Seed phrases are hashed using SHA-512, which produces a hash of 512 bits. Half of the hash becomes the actual private key, while the other half is used as input to generate new key pairs.
This approach allows you to manage private keys with ease and safety while minimizing the risk of mistakes that could lead to loss of funds. In conclusion, Bitcoin’s security and sovereignty stem from the mathematical foundation of its key management system.