Se l'algoritmo della firma è valido (e usato correttamente con chiavi sufficientemente grandi che sono state generate in modo corretto e opportunamente casuale), quindi, nella pratica , la risposta è no: avere accesso a molte firme esistenti non consentono all'aggressore di forgiare nuove, per non parlare di ricalcolare la chiave privata.
Da un punto di vista teorico: la maggior parte dello schema di firma (in realtà tutto) inizia con l'hashing del messaggio da firmare e la firma viene effettivamente calcolata sul valore hash. Pertanto, se l'autore dell'attacco ha una firma esistente S per il messaggio M , che esegue l'hash su h (M) e trova un messaggio M ' tale che h (M) = h (M') , quindi S è anche una firma valida per M ' ("firma valida" significa "una firma che verrà accettata dai verificatori"). Quindi un possibile modo di attaccare è provare molte varianti di un messaggio fasullo M ' finché non si trova uno hash allo stesso h (M) di una firma esistente, in cui indica che l'autore dell'attacco ha creato una nuova firma (più precisamente, ha riciclato con successo una firma esistente per un nuovo messaggio).
Questo è un secondo attacco preimage sulla funzione di hash. Avere molte firme esistenti offre più bersagli per l'attaccante, il che rende più facile l'attacco. Ma più semplice non è facile . Un algoritmo di firma "normale" utilizzerà le funzioni di hash che sono abbastanza forti e con un output sufficientemente ampio che gli attacchi di second preimage non sono fattibili, per qualsiasi numero pratico di obiettivi. Per inserire alcune figure al suo interno: con una funzione hash a 160 bit (ad es. SHA-1), il costo di un attacco con preimage secondario con un obiettivo è circa 2 160 ; se l'attaccante può raccogliere un milione di firme esistenti, il costo scende a circa 2 140 : questo è un milione di volte più semplice, ma comunque troppo difficile (es. vedi there ).
Nota la stampa fine, però: insisto perché l'algoritmo sia usato correttamente. Ad esempio, considera DSA (o la sua variante di curva ellittica ECDSA). Quando si calcola una firma, è necessario generare un valore casuale k scelto in modo uniforme nell'intervallo [1..q-1] per un dato numero intero intero q (è necessario un nuovo k casuale per ciascuna firma). Se la scelta è parziale in qualche modo, questo potrebbe essere sfruttato per un attacco di recupero chiave. Un caso estremo è la debacle di Sony-PS3, in cui hanno usato un valore fisso di k , sempre lo stesso indipendentemente dal messaggio da firmare. Questo è molto sbagliato: due firme conosciute sono sufficienti per ricostruire la chiave privata. Più in generale, Bleichenbacher ha dimostrato (una dozzina di anni fa) che se k viene scelto prendendo una stringa casuale di bit della stessa dimensione di q , quindi riducendo modulo q , quindi il leggero bias è sufficiente per ricostruire la chiave privata da circa 2 63 firme conosciute (per un q > 160 ).
Ovviamente, in quella situazione, il problema non è consentire all'utente malintenzionato di vedere molte firme, ma di usare l'algoritmo in modo improprio. L'implementazione degli algoritmi crittografici è difficile (bambini, non farlo a casa!).