HMAC / SHA-1 no está roto. SHA-1 tiene una debilidad con respecto a colisiones (y sigue siendo "teórico" "ya que producir una colisión para SHA-1, aunque conceptualmente más fácil que el ataque genérico, es todavía tan costoso que nadie ha computado aún una colisión de ese tipo). Pero la resistencia HMAC no se basa en la resistencia a las colisiones.
De hecho, HMAC está probado seguro siempre y cuando la función hash que utiliza sea Merkle-Damgård function que a su vez se basa en una" función de compresión "interna que se comporta como una PRF . Esto es bastante técnico. Para resumir, la debilidad conocida de SHA-1 anula la prueba, pero nadie sabe cómo convertir eso en una debilidad en HMAC / SHA-1. Empíricamente, tenemos el ejemplo de MD4 : MD4 está extremadamente roto con respecto a las colisiones, con un costo cercano a cero (computar una colisión para MD4 toma menos tiempo que en realidad para pegar los dos mensajes en conflicto para verificar que es, de hecho, una colisión), y HMAC / MD4 también está dañado, pero con un costo bastante no trivial de 258 texto simple / pares de MAC (y eso es un ataque de falsificación, ni siquiera un ataque de recuperación clave, lo que lo hace totalmente inaplicable en la práctica. Si tenemos el mismo tipo de relación para SHA-1, HMAC / SHA-1 sigue siendo muy seguro.
Sin embargo, HOTP puede usarse con cualquier función hash, pero esto requiere "adaptaciones". En general, no debes jugar con los algoritmos criptográficos . Dicho esto, es bastante obvio (al menos para un criptógrafo) que reemplazar SHA-1 con "SHA-256 truncado a 160 bits" en HOTP producirá algo que es igualmente seguro (es decir, análisis detallado de seguridad de HOTP se aplica completamente con esa función hash alternativa). Sin embargo, cambiar la función hash significa que ya no puede probar su implementación con respecto a los valores de prueba publicados , y eso es una gran preocupación. Los errores de implementación son una fuente mucho más común de vulnerabilidades prácticas que las debilidades criptográficas.
Por lo tanto, use HOTP con HMAC / SHA-1 y sea feliz . No está roto.