online from hash checksum sha

online - sha256 hash from file



Al generar un hash SHA256/512, ¿hay una cantidad mínima de datos "segura" para el hash? (5)

He escuchado que al crear un hash, es posible que si se usan archivos pequeños o cantidades de datos, es más probable que el hash resultante sufra una colisión. Si eso es cierto, ¿hay una cantidad mínima "segura" de datos que deben usarse para garantizar que esto no suceda?

Supongo que la pregunta también podría formularse como:

¿Cuál es la cantidad más pequeña de datos que se pueden hashear de forma segura?


Depende mucho de su aplicación: si simplemente tuviera que marcar las cadenas "SÍ" y "NO" para enviarlas a través de una red para indicar si debería otorgarme un préstamo de $ 100,000, sería un gran fracaso. El dominio de las respuestas puede No sea tan grande, por lo que alguien podría verificar fácilmente los hashes observados en el cable contra una base de datos de salidas de hash de ''entrada pequeña''.

Si incluyera la fecha, la hora, mi nombre, mi número de identificación fiscal, la cantidad solicitada, la cantidad de datos que se copian probablemente no será mucho, pero las posibilidades de que esos datos se encuentren en tablas hash precalculadas son bastante escasas.

Pero no conozco ninguna investigación que te indique más allá de mis instintos. Lo siento.


El hash tiene 256 bits de longitud, hay una colisión para cualquier cosa que supere los 256 bits.

No puedes comprimir algo en una cosa más pequeña sin tener colisiones, es un desafío matemático.

Sí, debido al algoritmo y los 2 a la potencia de 256 hay muchos hashes diferentes, pero no están libres de colisiones, eso es imposible.


No hay un tamaño mínimo de entrada. El algoritmo SHA-256 es efectivamente un mapeo aleatorio y la probabilidad de colisión no depende de la longitud de entrada. Incluso una entrada de 1 bit es ''segura''.

Tenga en cuenta que la entrada se rellena a un múltiplo de 512 bits (64 bytes) para SHA-256 (múltiplo de 1024 para SHA-512). Tomando una entrada de 12 bytes (como Thomas usó en su ejemplo), cuando se usa SHA-256, hay 2 ^ 96 secuencias posibles de longitud de 64 bytes.

Como ejemplo, una entrada de 12 bytes Hello There! (0x48656c6c6f20546865726521) se rellenará con un bit, seguido de 351 bits cero seguidos de la representación de 64 bits de la longitud de la entrada en bits que es 0x0000000000000060 para formar un mensaje de relleno de 512 bits. Este mensaje de 512 bits se utiliza como entrada para calcular el hash.

Se pueden encontrar más detalles en RFC: 4634 "Algoritmos de hash seguro de EE. UU. (SHA y HMAC-SHA)", http://www.ietf.org/rfc/rfc4634.txt


No, la longitud del mensaje no afecta la probabilidad de una colisión.

Si ese fuera el caso, el algoritmo está roto.

Puede probar por sí mismo ejecutando SHA contra todas las entradas de un byte, luego contra todas las entradas de dos bytes y así sucesivamente, y ver si se produce una colisión. Probablemente no, porque nadie ha encontrado una colisión para SHA-256 o SHA-512 (o al menos lo mantuvieron en secreto de Wikipedia )


Una función hash acepta entradas de longitud arbitraria (o al menos muy alta) y produce una salida de longitud fija. Hay más entradas posibles que salidas posibles, por lo que deben existir colisiones. El punto central de una función hash segura es que es "resistente a las colisiones", lo que significa que si bien las colisiones deben existir matemáticamente, es muy difícil realmente calcular una. Por lo tanto, no hay colisión conocida para SHA-256 y SHA-512, y los mejores métodos conocidos para calcular uno (al hacerlo a propósito ) son tan costosos que no se aplicarán pronto (todo el presupuesto federal de los EE. UU. Para un siglo compraría sólo una parte ridículamente pequeña de la tarea).

Por lo tanto, si no se puede hacer de manera realista a propósito , puede esperar no golpear una colisión por (mala) suerte.

Además, si se limita a entradas muy cortas, existe la posibilidad de que no haya ninguna colisión. Por ejemplo, si considera entradas de 12 bytes: hay 2 96 secuencias posibles de 12 bytes. Eso es enorme (más de lo que se puede enumerar con la tecnología actual). Sin embargo, SHA-256 asignará cada entrada a un valor de 256 bits, es decir, valores en un espacio mucho más amplio (de tamaño 2 256 ). No podemos demostrarlo formalmente, pero es probable que todos esos valores de hash 96 sean distintos entre sí. Tenga en cuenta que esto no tiene consecuencias prácticas: no hay una diferencia medible entre no encontrar una colisión porque no hay ninguna, y no encontrar una colisión porque es extremadamente improbable golpear una.

Solo para ilustrar qué tan bajos son los riesgos de colisión con SHA-256: considere sus riesgos de ser atacado por un gorila que escapó de un zoológico local o propietario privado. ¿Improbable? Sí, pero aún puede ocurrir: parece que un gorila escapó del zoológico de Dallas en 2004 e hirió a cuatro personas; Otro gorila escapó del mismo zoológico en 2010 . Suponiendo que solo hay un gorila enloquecido cada 6 años en toda la Tierra (no solo en el área de Dallas) y usted es el tipo desafortunado que se encuentra en su camino, fuera de una población humana de 6,5 billones, y luego hay riesgos graves. El daño corporal por gorila se puede estimar en aproximadamente 1 en 2 43.7 por día. Ahora, tome 10 miles de PC y haga que trabajen para encontrar una colisión para SHA-256. Las posibilidades de golpear una colisión son cercanas a 1 en 2 75 por día, más de mil millones menos probables que la cosa del mono enojado. La conclusión es que si teme las colisiones SHA-256 pero no lleva consigo una escopeta cargada en todo momento, entonces está equivocándose en sus prioridades. Además, no te metas con Texas.