Files
notes/docs/lectures/cryptography/15_hash_functions.md
T

96 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Hash Functions
#### Multiple Signatures
- Could we simply split up a message and sign parts?
![1649192960.png](img/1649192960.png)\
A lot of faff for signing large files
- An attacker can remove $s_{n-1}$ (or $s_{any}$) and it would still be valid
### Properties of Hash Functions
1. Any input length
2. Fixed output length
3. Pre-image resistance (one way)
4. Second pre-image resistance
- If we have a hashed message, we cannot find another message with the same hash
5. Collision resistance
#### Pre-image Resistance
- Hash functions must be one-way
- Given a hash of a message $H(x)$ it must be infeasible to calculate $x$
- Less applicable to digital signatures
- Crucial to password storage and key derivation
#### Second Pre-image Resistance
- Weak collision resistance
- Given a message $x_1$ and a hash of that message $H(x_1)$ it should be infeasible to find a second message $x_2$ such that $H(x_1)=H(x_2)$
![1649193613.png](img/1649193613.png)
##### Second pre-image attack
![1649193645.png](img/1649193645.png)
Oscar finds a weak message (one of the messages is known ahead of time), he replaces the message $x_1$ with $x_2$. Now Oscar can send a signed message to Alice
#### Collision Resistance
- Strong collision resistance
- It is not possible to find **any** message pair $x_1, x_2$ such that $H(x_1)=H(x_2)$
- In practice, this is *much easier than finding a weak collision*
![1649193812.png](img/1649193812.png)
### Preventing Collisions
![1649193848.png](img/1649193848.png)
#### Collision Attack
![1649193973.png](img/1649193973.png)
##### How Likely
**Second pre-image attacks**
- For a 256 bit hash with good random properties we might expect $2^{256}$ bit brute force before we find a collision with $x_1$
**Collision Attacks**
- There are many other possible collisions beyond those simply with $x_1$
### The Birthday Paradox
> What is the probability two people in this room share a birthday
- It is easier to first calculate the probability $P(n)$ that $n$ people do not share any birthdays:
$$
\begin{align*}
P(2)&=(1-\frac{1}{365}) \\
P(3)&=(1-\frac{1}{365})\cdot (1-\frac{2}{365}) \\
P(n)&=(1-\frac{1}{365})\cdot (1-\frac{2}{365})\dots (1-\frac{n-1}{365})
\end{align*}
$$
- The probability of at least one collision is $1 – P(\textrm{no collision})$.
- The probability of a collision with only 23 people is ~50%!
- For 40 people it’s ~90%
- The same principle applies to hash functions, the more hashes computed, the more likely a collision becomes
![1649194470.png](img/1649194470.png)
#### The Birthday Attack
- The output of the hash must be long enough to avoid a birthday attack
- Given a hash function outputs $n$ bit hashes
- You will find a collision after approx $\sqrt{(2^n)}=2^{\frac n2}$ random attempts
- This means that your bit length needs to be double the size of your desired security margin
- `SHA-256` therefore offers equivalent security to `AES 128`
- left at `25:55`