¿Convertir SHA-256 a SHA-1 y MD5 - Aumentar la longitud de bit / entropía? [duplicar]

4

Sé que esta es una pregunta realmente tonta y ciertamente estoy hablando una tontería, pero déjame explicarte:

  1. Tenemos un hash SHA-256 largo, por ejemplo: 474bfe428885057c38088d585c5b019c74cfce74bbacd94a7b4ffbd96ace0675 (256bit)
  2. Ahora usamos el hash largo para crear un hash SHA-1 y uno MD5 y combinarlos. Ej .: c49e2143913627ea178e66571189628a41526bf3 (SHA-1; 160bit ) + 6bb225025371aaa811748da8e011773d (MD5; 128bit )

Así que ahora tenemos esto: c49e2143913627ea178e66571189628a41526bf36bb225025371aaa811748da8e011773d
(SHA-1 + MD5; 160 bits + 128 bits = 288 bits)

Y es más larga que la cadena de entrada, con 288 bits en lugar de 256 bits . ¿Entonces aumentamos la entropía?

En resumen, esto es esto:

hash = sha256(input) # 256bit
result = sha1(hash) + md5(hash) # 288bit

(Se supone que es un pseudocódigo, no sé si es válido hasta).

¿Cuál es el error en el razonamiento aquí? Estoy seguro de que no puede aumentar la entropía / longitud de la cadena de esta manera ...

Editar: También es importante: ¿posiblemente incluso disminuí la entropía o me quedé igual?

    
pregunta rugk 21.07.2016 - 12:46
fuente

4 respuestas

23
  

Y es más larga que la cadena de entrada, con 288 bits en lugar de 256 bits. Entonces, ¿realmente aumentamos la entropía?

No, no aumentaste la entropía.

En este contexto, "entropía" básicamente se refiere a la probabilidad de que cualquier conjetura particular sobre el contenido o el valor sea correcta.

Si le digo que he hecho un hash de una representación ASCII de una sola letra en inglés de los Estados Unidos usando SHA256, y que el hash es hexadecimal ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb, a continuación, en este caso, en el caso de que los clientes tengan un poco de confianza. (26) ~ 4.7) porque solo necesita hacer como máximo 26 conjeturas para llegar a la conclusión de que la letra que heheado fue a . (Para completar, lo que realmente hice fue printf 'a' | sha256sum -b en un sistema nativo UTF-8).

La entropía, por lo tanto, nunca puede ser mayor que la de la entrada. Y la entrada es, en el mejor de los casos, el hash inicial, que tiene 256 bits de entropía. (Podría tener menos, si la cadena que hashed tiene menos de 256 bits de entropía y el atacante puede adivinar eso y su valor de alguna manera). Se puede suponer que cada cálculo de hash es O (1) cuando el tamaño de entrada es fijo. / p>

Entonces, al concatenar los hashes SHA-1 y MD5 de una cadena que es un hash SHA-256, nunca puede obtener más entropía que el valor de 256 bits. Todo lo que está haciendo es alargarlo y, posiblemente, ocultar su origen.

Ahora, en algunas situaciones, usar varios hashes realmente tiene sentido. Por ejemplo, muchos administradores de paquetes de Linux usan y validan múltiples hashes diferentes para el mismo archivo. Esto no se hace para aumentar la entropía del valor hash, ; se hace para hacer que sea más difícil encontrar una colisión válida, porque en tal situación, el ataque de preimagen o colisión debe funcionar igual contra todos los hashes utilizados. Un ataque de este tipo contra un hash criptográfico moderno Ya es suficientemente difícil para la mayoría de los propósitos; montar un ataque similar contra varios hashes diferentes simultáneamente sería más difícil en órdenes de magnitud.

    
respondido por el a CVn 21.07.2016 - 13:50
fuente
3

Ciertamente no estás agregando entropía. Aún así, solo tendrá como máximo 256 bits de entropía posibles salidas de este esquema, sin importar cuántas veces y cómo vuelva a hacer esto. Tenga en cuenta que tendrá a lo sumo entropía de 256 bits, porque no nos dijo cuánta entropía hay en su entrada. SHa256 tampoco te dará una entropía de 256 bits si tienes menos de eso en tu entrada. El hash nevers aumenta la entropía.

Pero considerando todos los valores posibles de sha256, en realidad perdería la entropía debido a colisiones. Algunos de los valores de 256 bits tendrán colisiones, es decir, para la entrada de 256 bits a sha1 y md5 habrá x1 y x2 que sha1 (sha256 (x1)) == sha1 (sha256 (x2)) y md5 (sha256 (y1) ) == md5 (sha256 (y2)). Perdiste entropía por eso si ahora tienes menos salidas.

    
respondido por el CristianTM 21.07.2016 - 13:35
fuente
3

Como han explicado otros, 'bits de entropía' se refiere a la capacidad de adivinación de la Contraseña original u otro texto que se utilizó por primera vez para crear el hash SHA-256. En su caso de ejemplo, la entropía no cambia.

Lo que has hecho aquí es proporcionar una versión SHA-1 y una versión MD5 del SHA-256. Esto hace que el SHA-256 sea más fácil de adivinar que otras soluciones que podría estar usando.

Si está intentando hacer que sea más difícil adivinar la entrada original, simplemente debe repetir la función SHA-256. De hecho, la repetición de SHA-256 muchos miles de veces hará que sea mucho más difícil forzar la entrada original, sin un impacto notable en la carga del servidor o la experiencia del usuario final.

Sin embargo, para el almacenamiento de contraseñas, lo mejor es usar una función de hash de contraseña adecuada, que está diseñada para ser un hash lento con sal. Esto le permite ajustar cuántas rondas (el factor de trabajo) se ajusta al tiempo de procesamiento deseado en su hardware de producción. BCrypt se suele recomendar. PBKDF2 o el nuevo SCrypt son buenas opciones.

    
respondido por el George Bailey 21.07.2016 - 14:33
fuente
1

aumentaste la entropía ... probablemente no.

Todo lo que hiciste fue usar 2 funciones de hash más antiguas para obtener un nuevo hash. Como esto no tiene datos nuevos, la entropía no se ve afectada.

La cantidad de bits aquí no hace ninguna diferencia (ya que es simplemente 'otra forma de escribir' el hash original).

La entropía (en criptografía) tiene que ver con la cantidad de incertidumbre que un bit específico es '0' o '1'. Para aumentar esto, necesita datos 'nuevos', no simplemente repetir las cosas (en un grado menor). Puede mantener el nivel de entropía de la mayor parte del tiempo cuando vuelva a usar la función de hashing original. Desde entonces no pierdes bits.

    
respondido por el LvB 21.07.2016 - 12:51
fuente

Lea otras preguntas en las etiquetas