SHA-1 Extension attack

Il calcolo dello SHA-1 avviene secondo quanto descritto nella RFC 3174. Il codice Javascript che lo implementa non è particolarmente efficiente, ma segue passo passo la descrizione della RFC, metodo 1.
Segreto (del quale si suppone l'attaccante conosca solo la lunghezza):
Lunghezza in bit: ?
Bit segreto: 0
Padding:
H0 H1 H2 H3 H4
Risultato:
                   
L'hash del segreto di lunghezza 8 è quello calcolato sopra.
Qual è l'hash del segreto con l'aggiunta di ?

Soluzione

Chiamiamo il segreto s: lo SHA-1 viene calcolato su un blocco di 512 bit s|p. Il padding p è calcolabile anche senza conoscere s perché dipende solo dalla lunghezza di s, che supponiamo di conoscere.

Se aggiungiamo x al blocco di 512 s|p, sappiamo che il calcolo dello SHA-1 del secondo blocco deve iniziare proprio dal primo bit di x, perché per definizione s|p è lungo un multiplo di 512. Si tratta quindi di calcolare lo SHA-1 di s|p|x|p', visto che anche in questo caso verrà aggiunto del padding.

Il padding p' dipende solo dalla lunghezza di s|p|x:

Lo SHA-1 del blocco x|p'= può essere calcolato grazie al fatto che ci si trova all'inizio del secondo blocco e si conosce il risultato del calcolo sul primo (SHA1(s|p) lo hash del segreto!): .

Mattia Monga