HMAC / SHA-1 è non rotto. SHA-1 ha un punto debole riguardo a collisioni (ed è ancora "teorico" "Dal momento che produrre una collisione per SHA-1, sebbene concettualmente più semplice dell'attacco generico, è ancora così costoso che nessuno ha ancora calcolato una collisione del genere). Ma la resistenza HMAC non si basa sulla resistenza alle collisioni.
In effetti, HMAC è provato sicuro fintanto che la funzione di hash che usa è Funzione Merkle-Damgård che si basa su una" funzione di compressione "interna che si comporta come un PRF . Questo è piuttosto tecnico. Per farla breve, la nota debolezza di SHA-1 annulla la prova, ma nessuno sa come trasformarlo in un punto debole su HMAC / SHA-1. Empiricamente, abbiamo l'esempio di MD4 : MD4 è estremamente rotto per quanto riguarda le collisioni, con un costo quasi pari a zero (calcolare una collisione per MD4 richiede meno tempo rispetto all'effettivo blocco dei due messaggi in collisione per verificare che si tratti effettivamente di una collisione) e anche HMAC / MD4 è guasto, ma con un costo abbastanza non banale di 2 58 in testo semplice / coppie MAC (e questo è un attacco di contraffazione, nemmeno un attacco di recupero chiave), rendendolo assolutamente non applicabile nella pratica. Se abbiamo lo stesso tipo di rapporto per SHA-1, allora HMAC / SHA-1 è ancora molto sicuro.
Tuttavia, HOTP può essere utilizzato con qualsiasi funzione di hash, ma ciò richiede "adattamenti". In generale, non devi giocare con algoritmi crittografici . Detto questo, è piuttosto ovvio (almeno per un crittografo) che la sostituzione di SHA-1 con "SHA-256 troncato a 160 bit" in HOTP produrrà qualcosa che è ugualmente sicuro (cioè il l'analisi della sicurezza dettagliata di HOTP si applica completamente con quella funzione di hash alternativa). Tuttavia, la modifica della funzione di hash significa che non puoi più testare la tua implementazione per quanto riguarda i valori di test pubblicati e questa è una grande preoccupazione. I bug di implementazione sono una fonte molto più comune di vulnerabilità pratiche rispetto alle debolezze crittografiche.
Pertanto, usa HOTP con HMAC / SHA-1 e sii felice . Non è rotto.