If you’ve spent even a little bit of time learning about Bitcoin and other cryptocurrencies, you’ve no doubt heard the term “cryptographic hash function.” You may have heard of various “cryptographic hash algorithms” like DSA, SHA-1, SHA 256, MD5, BLAKE, and RIPEMD. In case those terms flew over your head, just know that cryptographic hash functions relate to information security in our modern world. They are what allows the Bitcoin blockchain to remain decentralized, and therefore, secure.
Typically, a hash function takes input data and forms a complex mathematical operation on it, resulting in a fixed-size output data. The size of the input data (also called message or string) is meaningless. What’s important to know is that the output data (also called digest) is always a fixed length.
You are no doubt already familiar with hash functions, even if you don’t realize it. For instance, every time you create a user account on a website, your password serves as the input of a hash function. Every time you visit that website and enter your password, a fast function is performed on your password. As long as the password matches the stored output, you can proceed to your account.
Hash functions have been used in computational processes for a long time, whether you realize it or not. Cryptographic hash functions are used for several security applications, such as message authentication codes (MACs), e-commerce protocols, and digital signatures. However, the advent of cryptocurrencies has brought them to the forefront.
Bitcoin Hashing Properties
The following are important properties that a cryptography-viable hash function needs to function properly:
A cryptographic hash function shouldn’t take a long time to get from input to output. As you can imagine, more complicated hash functions are more secure. However, if the process takes too long, the process will be inefficient and less useful.
It’s vital that two different inputs don’t have the same hash output; this is imperative to digital safety. While mathematically this is possible, it’s best if the odds are astronomically long for two different inputs to end up with the same output. In the event two distinct inputs have the same output, it’s referred to as a cryptographic hash collision, making it imperative for a hash to have a strong collision resistance. Otherwise, the algorithm will be vulnerable to collision attacks, which threatens security. Collision resistance is born of two other forms of resistance
Under ideal circumstances, it’s ideal that an input can’t be found based on the hash output. Any given input should have just one set hash output. If this resistance is absent in a function, it will likely be vulnerable to preimage attacks.
Second preimage resistance
It should also be difficult to find a second input on the off chance that input shares an output with another input. Functions that can’t resist this are vulnerable to second pre-image attacks.
At times, those in the cryptography community believe they have created a function that’s collision resistant. However, later on, malicious users find a way to cause a collision within the algorithm.
It’s vital for a hash function to hide input information. It should not be easy, or even possible, to learn information about the input merely by looking at the output. Even if a malicious player has a slight bit of information, even something as simple as the number being odd or even, security is an issue.
The final output of a hash function should be randomly distributed. Ideally, it would look akin to a series of coin flips so that a malicious player cannot find a pattern that could lead him or her to the original input.
It’s possible to compare a good cryptographic hash function to a meat grinder. Much like a meat grinder, a hash function will take original pieces of something, puts them through an algorithm and comes up with something distinct from what was put into it to the point that it’s impossible to replicate the original pieces. If this is achieved, creating proof of work, verifying passwords, and verifying file integrity are just a few of the functions that can be performed by hashing. Of course, hashing has also become a key component of Bitcoin mining.
Proof Of Work
A proof-of-work system is intended to deter service abuses like span or the denial of service on networks that require a service requester. They are akin to a puzzle in that the requester must connect different pieces to come up with a solution in order to receive a particular service from the provider. Vital to a proof of work system is asymmetry, as the work must be difficult but achievable for the requester but easy to confirm on the other side.
Cryptocurrency miners tend to use computational work to solve a string of numbers that start with multiple zeros, which is commonly called a challenge string. More zeros mean the mining process will be more difficult. A miner can “solve” a string by locating the response or proof string. However, this requires investing a significant amount of computational power to hash the transactions, create a new block, and then create a possible solution. The response string must be run through a hash function to confirm if the output is equal or less than the challenge string. If not, the nonce will be changed millions of times until the specific requirements are met. When that finally happens, the block can be added to the blockchain.
The hash function will only be applied once to confirm if the requester did the required amount of work and if the solution is good or not. If the provider confirms the solution is good, the requester can access the service. This is the system at the heart of every proof-of-work based algorithm.
Bitcoin Mining And Bitcoin Hash
This relates to Bitcoin mining in the sense that mining is an action performed by a requester who is offering computational power to help Bitcoin, who is the provider, to verify transactions. A miner may search the Bitcoin mempool, where unconfirmed transactions are stored, verify the transactions, add them to a new block, and then find the proof string that will go to the Bitcoin networks blockchain. The blockchain will confirm whether or not the proof is correct. If it is, the block can be added to the blockchain and the miner will be rewarded with Bitcoin.
It currently takes miners around 10 minutes to find the new block, although mining difficulty is adjusted every 2016 blocks. Changing the difficulty helps to preserve the average time it takes to create a block. Meanwhile, the miner gets a cut of the transaction fee for each transaction he helped to verify. Also, if his proof of solution is accepted by the network, he gets freshly minted Bitcoins, which are created whenever a new block gets added to the blockchain.
One could compare this to a safe that’s housing some kind of prize. You need to crack the safe’s code to get the prize. However, part of the safe’s combination will be on the safe, leaving you to figure out the rest on your own. If you fail to crack it, the safe will reset itself. Of course, the process is far more complicated.
As you can hopefully see, hashing is vital to Bitcoin mining, as it allows the proof-of-work algorithm to function. It’s a fiction that’s both efficient and secure. Even though the SHA 256 hashing algorithm used by BTC has continued to be resistant to collision attacks, a new generation of SHA-3 algorithms may be used at some point down the road. Of course, it’s unclear if Bitcoin will make the switch to this new infrastructure.