¿es seguro usar sha256 para hash 64 datos de bytes criptográficamente aleatorios con sal de 12 bytes?

1

Leí en muchas fuentes que sha256 no es seguro porque es rápido. La mayoría de los enlaces que leí sugirieron bcrypt . Sin embargo, solo quiero saber que si los datos son 64 bytes criptográficamente aleatorios, ¿el atacante podrá encontrar la cadena original de alguna manera?

Scenerio

secret string es 64 datos de bytes criptográficamente aleatorios

La descarga de usuario secret string , almacenamos la versión con hash de ella. Subirá estos datos al sitio cuando quiera obtener acceso a cierta información. (el proceso de trabajo no se puede modificar, es un sistema estable, solo necesitamos protegerlo)

El sistema tiene 1 billón secret string y todos deberían estar protegidos por algún algoritmo hash.

¿Es posible que el atacante obtenga incluso uno de los secret string si tiene acceso a todos los hashes?

    
pregunta Alex Robertson 08.02.2018 - 21:50
fuente

2 respuestas

3

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 .

    
respondido por el AndrolGenhald 08.02.2018 - 22:43
fuente
0

Las funciones de hashing de contraseñas especializadas como bcrypt están diseñadas para proteger valores secretos que son relativamente fáciles de adivinar. Y eso, para decirlo más técnicamente, significa valores secretos que la siguiente estrategia puede adivinar con buenas posibilidades prácticas de éxito:

  1. Adivine valores más probables antes que comparativamente improbables;
  2. Intente un volumen muy alto de conjeturas a velocidades muy grandes.

Las funciones de hashing de contraseñas especializadas dan por sentado que el # 1 es solo un hecho de la vida real para las contraseñas, por lo que intentan frustrar al atacante en el punto # 2 al reducirlas.

Pero si está generando cadenas de bytes uniformemente al azar desde un generador criptográfico fuerte, entonces el # 1 ya no es un problema, por lo que no necesita una función de hashing de contraseña especializada. La única defensa que necesitas es hacer que las cadenas de bytes aleatorias sean lo suficientemente largas. 64 bytes son 512 bits, mucho más de lo que necesita, y de hecho, si lo está pasando a través de SHA-256 que ya asigna su nivel de seguridad a 256 bits, no gana nada por usar más de 32 bytes. Pero en realidad, una cadena de 16 bytes (128 bits) debería ser suficiente; por ejemplo, el cifrado que usa mi navegador para conectarse a este sitio usa una clave de 128 bits, que es un nivel de seguridad absolutamente común

    
respondido por el Luis Casillas 09.02.2018 - 02:37
fuente

Lea otras preguntas en las etiquetas