Confunde hashes criptográficos con hashes de contraseña. Un hash criptográfico toma una entrada y da una salida de aspecto aleatorio. Un hash de contraseña toma una contraseña y un salt y muy lentamente da un resultado de apariencia aleatoria .
Lo que te preocupa aquí es ataques de preimagen . Desea asegurarse de que, conociendo un hash y
, el atacante no pueda encontrar un valor x
tal que h(x) = y
. 80 bits de complejidad todavía se consideran generalmente "buenos" (aunque no "grandes", y posiblemente vulnerables a un atacante bien financiado, como un estado-nación). Lo que esto significa es que quieres un hash donde el mejor ataque de preimagen tiene una complejidad de más de 80 bits.
Análisis
Comencemos con MD5
ya que es una especie de elemento secundario de criptografía obsoleta. El ataque de preimagen más conocido en MD5
es 116.9 bits , muy por encima de 80. Pero desea proteger 1 Trillones de secretos, que le permiten al atacante realizar algunas optimizaciones.
Supongamos que el atacante puede usar una tabla hash (y muchos terabytes de RAM) para verificar si un hash coincide con alguno de los 1 billón en O(1)
. Con 1 billón de secretos, esto reduce la complejidad para romper un solo secreto mediante el registro 2 (10 12 ) ≈ 40 bits, lo que reduce MD5
a alrededor de 76 bits. Todavía no es terrible, pero te preocupas si te enfrentas a un estado-nación o si quieres mantener estos secretos durante muchos años.
Pero estás haciendo lo correcto y usando SHA256
. El mejor ataque de preimagen que pude encontrar en SHA256
fue por pasos reducidos, y aún tenía una complejidad de más de 250 bits, por lo que estás viendo más de 210 bits de complejidad allí. En este caso, un atacante se encontrará con algunos problemas con la física .