How to Create A Bank Account Out of Thin Air
How is it possible to create an ‘account’ on decentralized networks like Bitcoin or Ethereum where no single person or organization maintains a central registry of users?
You may have heard that blockchain based cryptocurrencies like Bitcoin are decentralized, with no central authority in control. How then is it possible to create an ‘account’ on such a network where no single person or organization maintains a central registry of users?
“Banking was conceived in iniquity and born in sin.” — Josiah Stamp
By Colin McCrae
The answer to this question is fundamental to how blockchains allow users to interact with them.
For the purposes of this article, I will run through how Bitcoin ‘accounts’ are created. However, the principles are similar across all blockchains.
Bitcoin is fundamentally a payment network, tracking a ledger of ‘accounts’ (more correctly called public addresses, or public keys) with associated token (bitcoin) ‘balances’ (more correctly called ‘unspent transaction outputs’). For the rest of this article, I’ll refer to addresses (rather than accounts) and tokens (rather than a balance of bitcoins).
Bitcoin is designed to allow users anywhere in the world to transfer tokens associated with their addresses to any other valid address. Its design implements the following principles:
- Unlimited free addresses. Users can create practically unlimited new addresses virtually instantaneously for free, even whilst offline.
- Unique addresses for everyone. The new addresses are unique to the user who created them, collisions are practically impossible.
- Addresses are verifiable as valid. The new addresses (if generated following the correct procedure) will be immediately accepted as valid by the rest of the network when used.
- Addresses are secure. The new addresses are under the sole control of the user who created them.
Designing a system that meets these criteria demands a paradigm shift from historic forms of electronic money, where a central database or ledger maintains a list of the accounts, balances, and transactions of every user.
When you open a new bank account with your bank, they generate a new account number for you and start tracking every transaction and updating your balance accordingly. The bank must keep one master ledger against which it checks sufficient funds are available each time a transaction is made. If you wish to open a new bank account, you need to go back and ask your bank if they can do this for you. The bank controls your accounts completely, they can (for any number of reasons) freeze your account, deny you access, or in fact, allow for your funds to be confiscated if requested by certain authorities.
This couldn’t be further from how Bitcoin and other blockchain-based cryptocurrencies work.
When using a blockchain, there is no central authority. There is no facility to ‘freeze’ or confiscate someone’s funds. Valid transactions quickly become irreversible. Anybody can create any number of addresses (accounts) for themselves out of thin air. They can even do this on a piece of paper.
It’s worth re-iterating this point, as the enormity of what has been achieved here is sometime missed.
You can create a new Bitcoin account out of thin air by yourself.
Don’t believe it? Let’s go through the steps one by one and I’ll show you how it’s done.
A Private Key is Like A Password
The first part of creating your own Bitcoin account is to think up a password. However, this is no ordinary password. It needs to be really long, in fact a very specific length — to use computer terminology, 256-bit. Technically, it’s slightly less than 265-bit due to how the cryptography works.
It is difficult to visualize the number of possible passwords captured by a 256-bit number.
You could represent a 256-bit number in a host of different ways, including as a simple decimal number. To give you an idea of what this would look like, here’s a few examples:
As an ordinary decimal number (base 10), your private key (password) would need up to 78 digits:
As a hexadecimal number (base 16) you would need up to 64 digits:
Using lowercase letters only (base 26), you’d need up to 55 characters:
Using upper and lowercase letters as well as numbers (alphanumeric case sensitive, base 62), you’d need up to 43 characters:
The most common form for a Bitcoin private key to be written is Wallet Import Format (WIF). This uses the ‘Base58’ character set: all numbers and upper and lowercase characters excluding 0 (zero), O (uppercase ‘o’), I (uppercase ‘i’) and l (lowercase ‘L’). WIF also includes an error checking code such that any errors in copying will be detected automatically. It is also prefixed with a character that indicates that type of private key.
An example of a Bitcoin private key in uncompressed WIF is:
(51 characters always starting ‘5’)
This can also be shown as a two-dimensional (matrix) bar code, sometimes known as a Quick Response (QR) code.
If generated randomly, this password will be entirely unique in the universe. The chance that anyone else (or in fact any computer algorithm) could stumble upon this particular 256-bit number is as good as impossible. It would be easier, much easier in fact, to guess a particular grain of sand on Earth (around 64-bit possibilities), or indeed to guess particular atom within a particular grain of sand anywhere on Earth (around 128-bit possibilities).
To get an idea of the extraordinary number of combinations of private keys, imagine that every single atom in every single grain of sand on Earth contained another Earth filled with grains of sand. Correctly guessing a random 256-bit private key, would be like finding a specific atom in a specific grain of sand which itself is all hidden within a specific atom of a specific grain of sand on Earth.
Choosing a private key as a password to a Bitcoin account is like randomly selecting one of those atoms of a grain of sand, itself hidden inside a random atom of a random grain of sand.
Other ways to think about this:
- Hitting a one-in-a-million chance event 13 times in a row.
- Correctly guessing 100 rolls of a regular six-sided die in a row.
- Hitting your chosen number in American roulette 49 times in a row.
So now you have your account password. You don’t tell anyone this private key. But how do you get an account number (public address) that everyone will accept as valid and as yours and yours only?
A Public Key is Like an Account Number
Now you have your incredibly secure unique password, you need an address which you can give out to anyone who wants to send you funds. This address needs to be directly associated to you (with your password), and you need to be able to hand this out in public without fear of your private key being compromised.
The public address is generated entirely from the private key by the following steps:
- The private key is cryptographically ‘signed’ using a specific elliptic curve (secp256k1). An elliptic curve function is known as a trapdoor or one-way function — easy to compute in one direction, but very difficult to compute in reverse.
- The result of Step 1 is then put through two specific hash functions (SHA-256 and then RIPEMD-160). The hash functions map the output from Step 1 into a 160-bit number.
- The result of Step 2 is encoded using Base58Check, a version of Base58 encoding which includes version information and error checking. This gives the public address.
The associated public address for private key described earlier would be:
(34 characters — do not send funds to this address!)
The error checking information added ensures that the probability that a mistyped address is accepted as valid is 1 in 2³² (approximately 1 in 4.3 billion).
You can now see how it’s possible, through some smart cryptographic tricks, to create an ‘account’ on a network where no single person or organization maintains a central registry of users.
You can create practically unlimited new addresses virtually instantaneously for free, even whilst offline. These addresses are unique to the user who created them, collisions are practically impossible. The new addresses will be immediately accepted as valid by the rest of the network when used and are under the sole control of the user who created them.
Such a system really is a paradigm shift from historic forms of electronic money.
If you found this article interesting, please hold down the clap button below. Follow me on Medium to see more content like this.
I am currently working on EdgeFund, an open-source platform which offers a decentralized shared bankroll on the Blockchain. To learn more about EdgeFund, please visit our website. Join our Telegram group to chat to the team and follow us on Twitter!