Gli ID OpenPGP sono porzioni dell'impronta digitale SHA-1, come definite nello standard . Un ID chiave breve corrisponde agli ultimi 32 bit e l'ID chiave lungo corrisponde agli ultimi 64 bit. Una collisione richiede in genere una media di 2 operazioni n / 2 , dove n è la dimensione dell'hash in bit. Generare collisioni per ID brevi e ID lunghi è banale, richiedendo in media 2 operazioni 16 e 2 32 , rispettivamente. In questo caso, una collisione viene definita come la creazione di due input hash diversi che hanno digesti identici. In realtà è persino possibile scontrarsi con l'impronta digitale SHA-1 completa, come Google ha mostrato . Collidere una piena impronta digitale OpenPGP non richiede altro che scontrare un singolo hash SHA-1. Questo è difficile, ma possibile con una potenza di calcolo sufficiente.
Creare un preimage è diverso. A differenza di una collisione, un attacco preimage richiede la creazione di un input che corrisponda a un digest hash specifico. L'attaccante non può fornire entrambi gli input, solo uno, rendendolo un attacco molto più difficile. A differenza di un attacco di collisione, un attacco di preimage richiede 2 operazioni complete n per un hash di dimensioni n . Per questo motivo, la creazione di una preimage per un ID breve richiede solo 2 operazioni 32 , che è decisamente banale. Fare lo stesso per un ID lungo richiede 2 operazioni 64 , il che non è facile, ma tutt'altro che impossibile. Fare lo stesso con l'intera impronta digitale a 160 bit è semplicemente impossibile con la tecnologia attuale.
In breve:
+-------------+-----------+------------+
| | Collision | Preimage |
+-------------+-----------+------------+
| Short ID | Trivial | Easy |
+-------------+-----------+------------+
| Long ID | Easy | Hard |
+-------------+-----------+------------+
| Fingerprint | Hard | Impossible |
+-------------+-----------+------------+