Hashing is creating a sequence of characters (a hash) using a mathematical function. This sequence of characters is extremely secure and enables us to send messages in a safe way.
Cryptographic Hash Functions
These are a specific sort of a hash that is extra secure and perfect for cryptography; they have the following properties:
Deterministic – The exact hash value must be produced every time for a given input value.
Computationally efficient – Computers must be able to return the hash quickly; most can process a hash function in a fraction of a second.
Pre- Image Resistant – The hash function must not give any information about the input value.
Collision Resistant – It must be extremely difficult, or impossible enough to have two inputs that produce the same output. Since the input value can be of any length, and any characters, the possibilities for this value are infinite. Outputs have a fixed length and —for that reason— a fixed number of possibilities. It’s therefore possible for more than one input value to produce the same output. If the collision resistance isn’t strong enough, collisions could be found via a “birthday attack”.
This is an attack that exploits the mathematics behind probability theory. You’ve probably heard of the birthday example; If you have a room of 27 people, although it seems unlikely, there’s actually a 50% chance of two people having the same birthday.
Why is this? One person has a 1/365 probability of having the ‘right’ birthday. The chance of a second person having that same birthday is also 1/365. To find the probability that both have the same birthday, we have to multiply their probabilities. So scaling up, if you have 365 different birthdays and therefore 365 possibilities, you need the square root of 365 which is 23 randomly chosen people for a 50% chance of people matching.
Applying this theory to hashing, we realise that technically; no hash function is collision-free, but with it should take a long time for this to occur!
What is Hashing in Blockchain?
Bitcoin works on a blockchain and uses the hashing algorithm ‘SHA-256’ (Secure Hashing Algorithm 256). For bitcoin, hash functions are used for three mains functions:
- Mining – Miners race to solve a puzzle; each miner takes information from blocks they already know about and builds a block out of them. If the output from the algorithm is smaller than the target number, then it will be considered valid and can be accepted by the rest of the network. They then have the right to create the next block.
- Linking blocks – For added security; each block on the blockchain is linked to the previous one. This is achieved with a hash pointer (variables which store the address of another variable). Basically, each block contains the hash result from the previous block on the blockchain. This ensures that the history of the blockchain can be easily tracked and eliminates the possibility of a malicious block being added.
- Creating keys – To send or receive cryptocurrency, you need a private and a public key. These two keys are connected to each other via a hash function. This is an essential component to ensure that nobody can work out your private key based on your public key.
The Importance of Hashing
The hash function gives cryptocurrency a high level of security. Although, in theory, nothing online is immune to hacking; the hash function provides the maximum difficulty level currently available.