Table of Contents

## What is a hash function?

A hash function is a function that, using a specific method, turns an array of input data of variable length into an output bit string of a predetermined length. The hash function's modification is known as hashing. The original data is referred to as the input array or message. The transformation's output is known as a hash or hash code.

**Hash functions are useful in the following situations:**

- Constructing associative arrays
- Searching for duplicates in a series of datasets
- Creating unique identifiers for datasets
- Calculating checksums from data for subsequent detection of errors arising during data storage and/or transmission
- Storing passwords in security systems as a hash code
- while producing an electronic signature.

**The hash function's fundamental features are as follows:**

- A message of any length is fed into the hash function's input;
- A fixed-length data block is generated at the hash function's output;
- The values at the hash function's output are evenly dispersed; and
- When one bit in the hash function's input changes, the output fluctuates.

**A "good" hash function must meet two requirements:**

- a quick calculation
- the fewest collisions.

Hash functions do not support backward transformation, so obtaining the original message from its digest is impossible. As a result, they are also known as "one-way encryption functions."

Hash functions are built iteratively by dividing the original message into blocks of a given size and performing a series of modifications on them using both reversible and irreversible operations. A compression function is typically included in the hashing transformation since its output is frequently smaller in size than the block provided as input. The previous cycle's output, as well as the next message block, are supplied into the input of each hashing cycle.

**How do collisions occur in hashing?**

Collision occurs when a newly entered key maps to an existing occupied space in the hash table.

**Cryptographic hash functions**

Among the various available hash functions, it is conventional to differentiate cryptographically strong ones employed in cryptography, because they are subject to extra restrictions.

Cryptographic hash functions must be irreversible and collision-resistant.

Cryptographic hash functions should have an avalanche effect, which means that even if the parameter changes a little, the function's result changes drastically. The hash value, in particular, should not leak information about individual bits of the input. This condition is critical to the cryptographic strength of hashing algorithms, which hash the user's password to generate a key.

Hashing is frequently used in digital signature techniques, where the hash code is encrypted rather than the message itself, which decreases calculation time while simultaneously increasing cryptographic strength. In addition, instead of passwords, the values of their hash codes are often saved.

## Create Cryptographic hash function

To create a cryptographic hash of a file, you send the file into a computer program called a cryptographic hash function. Suppose you want to create a cryptographic hash—a fingerprint—of your favorite cat picture.

The output—the hash—is a 256-bit number; 256 bits equals 32 bytes because 1 byte consists of 8 bits. Thus, to store the number in a file, the file will be 32 bytes big, which is tiny compared to the size of the 1.21 MB cat picture. The particular cryptographic hash function used in this example is called SHA256 (Secure Hash Algorithm with 256-bit output) and is the most commonly used one in Bitcoin.

Now the following image shows, what happens when you change the cat picture a little and run it through the same cryptographic hash function.

This hash turns out completely different than the first hash. Let’s compare them:

Old hash:

dee6a5d375827436ee4b47a930160457901dce84ff0fac58bf79ab0edb479561

New hash:

d2ca4f53c825730186db9ea585075f96cd6df1bfd4fb7c687a23b912b2b39bf6

See how that tiny change to the cat picture made a huge difference in the hash value? The hash value is completely different, but the length of the hash is always the same regardless of input. The input “Hello” will also result in a 256-bit hash value.

**Generating a hash function using block encryption techniques**

A block symmetric encryption technique can be used as a hash function. If a cryptographically secure block algorithm is utilized, the hash function that is based on it will be trustworthy.

Message encryption is the most basic application of a block algorithm to obtain a hash code. The message is provided in this case as a sequence of blocks, the length of which is equal to the length of the encryption method block. If needed, the final block is padded on the right with zeros to provide the correct length block. The final encrypted block of text will be used as the hash value. The generated hash value will have the following features if a trustworthy block encryption technique is used:

- Without knowledge of the encryption key, it is practically impossible to calculate the hash value for a given open array of information.
- Without knowing the encryption key, it is practically impossible to select open data for a given hash function value.

## What does Bitcoin use for hashing?

Bitcoin always employs double hashing and is hashed in one of two ways:

- RIPEMD160 (SHA256 (x)) is known as Hash160, and it generates a 160-bit output.
- generating a portion of bitcoin addresses by hashing the public key.

2.SHA256 (SHA256 (x)) is also known as Hash256, and it generates a 256-bit result.

- Creating a checksum in a bitcoin address
- In a merkle tree, hashing a block.
- Connecting transaction outputs and inputs
- The block header's hash

Satoshi (author of the Bitcoin white paper) appears to prefer Hash256 when collisions are a concern and Hash160 when just the second (multipurpose) previews are important. This corresponds to the objective of obtaining 128-bit security.

A cryptographic hash function reduces a large block of input data to a smaller, random result. The hash function for Bitcoin is known as SHA-256. To increase security, Bitcoin uses the SHA-256 algorithm twice, a technique known as double-SHA-256.

## What is a perfect hash in bitcoin?

A perfect hash in Bitcoin is one that begins with plenty of zeros.

Bitcoin is becoming significantly more difficult. At the moment, a valid hash must begin with roughly 17 zeros, which means that only one out of every 1.4e+20 hashes will be successful. The exact number of zeros at the beginning of the hash is not crucial. To be more specific, the hash must be smaller than a certain value determined by the difficulty level of Bitcoin mining. Miners obtain the hash of the previous block when they mine. They try hashing billions of times to construct a valid block that meets the complexity target.

## Summary

Message encryption is the most fundamental use of a block algorithm to generate a hash code. A cryptographic hash function is a function that converts a huge block of input data into a smaller, random output. Bitcoin employs the SHA-256 algorithm twice to boost security, a practice known as double-SHA-256.

## Further reading

Introduction to Blockchain

Brief History of Bitcoin

Proof Of Work Explained

Double Spending Problem