SHA y "Bits de seguridad"

9

He investigado varias formas de cifrado / hash y con frecuencia he encontrado el término "bits de seguridad". Por ejemplo, al menos una fuente reclamó SHA-256 = AES128 = ECC256 = 128 bits de seguridad.

Mi pregunta es, si esto es cierto, ¿puedo tomar un resumen de SHA-256 de 256 bits y comprimirlo hasta 128 bits sin pérdida de seguridad? (Por ejemplo, simplemente tomando el XOR de los 128 bits superiores y los 128 bits inferiores del resumen)

En mi caso particular, es importante que el compendio sea pequeño. Gracias de antemano por cualquier respuesta.

    
pregunta tomKPZ 27.07.2014 - 05:53
fuente

3 respuestas

16

Las funciones de hash criptográficos deben tener varias propiedades:

  • Resistencia a preimágenes : dado x , no debería ser posible encontrar m de manera que h (m) = x .
  • Resistencia a segundas preimágenes : dado m , no debería ser posible encontrar m ' de manera que h (m) = h (m ') .
  • Resistencia a colisiones : no debería ser posible encontrar m y m ' de manera que m ≠ m' y h (m) = h (m ') .

Estas propiedades no son equivalentes entre sí, y no necesariamente las necesita todas. Depende del protocolo en el que esté utilizando la función hash. Por ejemplo, las funciones hash se utilizan en el paso inicial de firmas digitales , para las cuales las colisiones no son un problema - a menos que el atacante esté en posición de elegir un mensaje exacto para ser firmado. Los detalles pueden ser sutiles.

Si la función hash tiene una salida de bits n , entonces existen ataques genéricos que encuentran preimágenes, segundas preimágenes y colisiones con costo, respectivamente, 2 n , 2 n y 2 n / 2 . Un ataque "genérico" significa que funciona para todas las funciones hash, independientemente de lo perfectas que sean. Esto establece el nivel máximo de seguridad alcanzable.

Si "comprime" la salida del SHA-256 a 128 bits (sea cual sea el procedimiento de compresión que quiera usar, incluso un simple truncamiento), en realidad está definiendo una nueva función hash con una salida de 128 bits. Como tal, la resistencia a las imágenes previas y las segundas imágenes previas de esa función será en el mejor de los casos 128 , y la resistencia a las colisiones será, en el mejor de los casos, 2 64 . Por lo tanto, su SHA-256 truncado ofrecerá "seguridad de 128 bits" solo en contextos de uso donde las colisiones no son un problema. Pero como puede ser bastante difícil determinar que las colisiones no son un problema, no se recomienda "comprimir" la salida de la función hash.

En general , preferimos estar seguros que lamentarnos; por lo tanto, cuando queremos "seguridad de 128 bits" usamos una función hash de 256 bits. De esa manera, no tenemos que preocuparnos por si las colisiones pueden ser aprovechadas en un ataque real o no. Las colisiones SHA-256 no son posibles con la tecnología existente.

    
respondido por el Tom Leek 28.07.2014 - 19:16
fuente
7

La evaluación de cualquier hash criptográfico fuerte de 256 bits que tenga un nivel de seguridad de 128 o 256 bits depende completamente de cómo se use. En una aplicación en la que un atacante puede tener éxito simplemente al encontrar cualquier colisión de hash, el nivel de seguridad no puede exceder los 128 bits, ya que un simple ataque de cumpleaños tendrá éxito (probablemente) después de 2 ^ 128 intentos aleatorios. Si acorta el hash a un hash de 128 bits, entonces reduce su nivel de seguridad en este contexto a 64 bits.

Sin embargo, las aplicaciones son concebibles cuando un ataque exitoso tendría que encontrar una colisión en uno (o muy pocos) hashes determinados, como para falsificar un mensaje firmado digitalmente no falsificando la firma en sí, sino encontrando un mensaje diferente que produce el mismo hash (que es lo que los esquemas de firma tienden a firmar). En el caso extremo de que solo exista una firma real, se podría decir que SHA256 permitiría un nivel de seguridad de 256 bits cuando se usa solo como en este ejemplo.

    
respondido por el pyramids 27.07.2014 - 21:52
fuente
6

No. En el contexto de un hash, "bits de seguridad" es una medida de cuántas salidas posibles tiene una función de hash y, por lo tanto, qué tan difícil es encontrar una entrada con una salida determinada. Está en una escala logarítmica, por lo que cada bit adicional duplica la seguridad.

No puede comparar la seguridad de SHA-256, AES-128 y ECC-256. Son cosas totalmente diferentes: SHA-256 es una función hash criptográfica , AES-128 es una cifrado de bloque asimétrico , y ECC-256 es un clave de clave pública .

Su modificación propuesta a SHA-256 reducirá en gran medida la seguridad, esencialmente convirtiéndola en una función hash de 128 bits. Sin embargo, hacerlo es más seguro que cualquiera de las funciones hash estándar de 128 bits, ya que todas ellas tienen ataques de colisión conocidos, y algunas de ellas tienen ataques de preimagen o de segunda imagen. 128 bits puede ser suficiente seguridad para sus propósitos.

    
respondido por el Mark 27.07.2014 - 07:22
fuente

Lea otras preguntas en las etiquetas