Quando una funzione di hash ha un output di dimensioni n bit, quindi:
- L'algoritmo generico per la ricerca di una preimage (o una seconda preimage) ha un costo medio di 2 n valutazioni della funzione di hash.
- L'algoritmo generico per trovare una collisione ha un costo medio di circa 2 n / 2 valutazioni della funzione di hash.
Per "generico" intendiamo "l'algoritmo che funziona contro ogni funzione di hash, per quanto perfetta possa essere quella funzione". Nel caso di pre-immagini e seconde pre-immagini, l'algoritmo generico è anche noto come "fortuna" (proviamo a inserire messaggi fino a quando non siamo fortunati). Per le collisioni, esistono vari algoritmi intelligenti che sono tutti aspetti del cosiddetto compleanno paradosso . Ho scritto "about" perché questi algoritmi intelligenti comportano anche alcuni costi di RAM o alcune limitazioni al parallelismo, quindi il costo effettivo di trovare una collisione non può essere espresso in un singolo numero; oppure, se preferisci, il costo matematico non si traduce esattamente in un numero proporzionato di dollari, se vuoi davvero fare il calcolo.
Diversi protocolli utilizzano le funzioni hash per vari motivi. È difficile accertare se un determinato protocollo è immune alle collisioni o meno. In alcuni casi, un attacco effettivo può richiedere un calcolo pre-immaginario; o forse è sufficiente una collisione; o la situazione potrebbe essere più complessa. Quindi, giusto per essere sicuri, di solito assumiamo il peggio e quindi osserviamo la resistenza più bassa. Pertanto, valutiamo una funzione di hash con un output a 160 bit per essere di forza "80 bit" (o 2 80 ). Sappiamo che possiamo essere eccessivamente prudenti qui; essere non possiamo essere sicuri.