Private key vs public key bitcoin


Here is a private key in hexadecimal - bits in hexadecimal is 32 bytes, or 64 characters in the range or A-F. Wallet software may use a BIP 32 seed to generate many private keys and corresponding public keys from a single secret value. This is called a hierarchical deterministic wallet , or HD wallet for short.

The seed value, or master extended key , consists of a bit private key and a bit chain code , for bits in total. The seed value should not be confused with the private keys used directly to sign Bitcoin transactions. Users are strongly advised to use HD wallets, for safety reasons: An HD wallet only needs to be backed up once typically using a mnemonic phrase ; thereafter in the future, that single backup can always deterministically regenerate the same private keys.

Therefore, it can safely recover all addresses, and all funds sent to those addresses. Non-HD wallets generate a new randomly-selected private key for each new address; therefore, if the wallet file is lost or damaged, the user will irretrievably lose all funds received to addresses generated after the most recent backup. When importing or sweeping ECDSA private keys, a shorter format known as wallet import format is often used, which offers a few advantages.

Wallet import format is the most common way to represent private keys in Bitcoin. For private keys associated with uncompressed public keys, they are 51 characters and always start with the number 5 on mainnet 9 on testnet. Private keys associated with compressed public keys are 52 characters and start with a capital L or K on mainnet c on testnet. This is the same private key in mainnet wallet import format:.

When a WIF private key is imported, it always corresponds to exactly one Bitcoin address. Any utility which performs the conversion can display the matching Bitcoin address. The mathematical conversion is somewhat complex and best left to a computer, but it's notable that the WIF guarantees it will always correspond to the same address no matter which program is used to convert it. The Bitcoin address implemented using the sample above is: Some applications use the mini private key format.

Not every private key or Bitcoin address has a corresponding mini private key - they have to be generated a certain way in order to ensure a mini private key exists for an address.

The mini private key is used for applications where space is critical, such as in QR codes and in physical bitcoins. The above example has a mini key, which is:. The private key is only needed to spend the bitcoins, not necessarily to see the value of them. However, not all random numbers are created equally.

To ensure that our private key is difficult to guess, the Standards for Efficient Cryptography Group recommends that we pick a private key between the number 1 and a number slightly smaller than 1. An excerpt of the SECG guidelines. We can add this validation check fairly easily by adding the SECG-provided upper bound as an attribute to our PrivateKey module:. Before we pass our private key into our valid? Now we can call PrivateKey.

Sign up for Pete's mailing list and have fresh content delivered to you, hot off the presses every week! The most basic process for turning a Bitcoin private key into a sharable public address involves three basic steps. The first step is to transform our private key into a public key with the help of elliptic curve cryptography. The first element in this tuple is our Bitcoin public key. Once we have our public key in memory, our next step in transforming it into a public address is to hash it.

Next, we pipe our public key through two hashing functions: Flipping the arguments to: This gives us a thirty two byte binary. If we wanted, we could Base58Check encode this with a testnet version byte of 0xEF. As its name suggests, converting our private key into a WIF allows us to easily import it into most Bitcoin wallet software:.

Importing our test private key. After initiating the transaction with our faucet, we should see our Bitcoin arrive at our address on either a blockchain explorer , or within our wallet software.

Our tBTC has arrived. Elixir, thanks to its Erlang heritage, ships with a wealth of tools that make this kind of hashing, signing, and byte mashing a walk in the park. I encourage you to check our the PrivateKey module on Github to get a better feel for the simplicity of the code we wrote today.