What are the requirements of a hash function?
Strong-Collision resistance also implies Weak-Collision resistance. If a hash function is not the latter, it can not be the former either.
How can we avoid collisions in hash functions?
We can’t, as the amount of possible inputs will always be bigger than the amount of possible outputs.
All we can do is attempt to minimise the chance of an adversary finding these collisions.
How many attempts at most does it take to find a collision in a hash function?
If the output of a hash function is n bits long, collisions will be found after hashing at most 2^(n + 1) messages.
Considering the birthday paradox, around how many hashes need to be completed to find a collision?
2^(n / 2) attempts