¿Qué algoritmo de hash debería utilizar para una suma de comprobación de archivo segura?

1

Para mi trabajo, tendré que proporcionar a mi cliente un archivo específico que será el resultado del trabajo que he realizado por ellos.

Para proteger la integridad del trabajo que he realizado y garantizar que nunca se haya modificado, tengo la intención de agregar una suma de comprobación a mi documentación que se proporcionará con el archivo.

Debido a que MD5 y SHA-1 no son seguros desde hace mucho tiempo, me preguntaba si todavía los estaríamos usando para este propósito o si hay un mejor algoritmo que podría hacer el mismo trabajo pero más seguro.

Estoy buscando la mejor solución confiable. Soy consciente de que una prueba al 100% nunca será posible, pero me preguntaba si MD5 todavía se consideraba "bueno" para este propósito o si existen herramientas realmente nuevas y más seguras.

    
pregunta gouaille 28.11.2018 - 17:01
fuente

2 respuestas

1

Elección del algoritmo hash

Utilice SHA-256 o SHA-512: cualquiera de los dos miembros "principales" de SHA-2 familia SHA-2 es el sucesor de SHA-1 y se considera seguro. Es el hash para elegir a menos que tenga una buena razón para elegir lo contrario. En su caso, la elección entre SHA-256 y SHA-512 es indiferente. Hay un SHA-3 pero aún no está ampliamente soportado y no es más seguro (o menos seguro) que SHA-2, es solo un diseño diferente.

No utilice MD5 o SHA-1. Obviamente, no son inadecuados en su escenario, pero podrían explotarse con un poco de trabajo adicional. Además, el hecho de que estos algoritmos ya estén parcialmente rotos hace que corran un mayor riesgo de romperse más con el tiempo.

Más precisamente, para estos dos hashes, es posible encontrar colisiones: es posible encontrar dos documentos D1 y D2, de modo que MD5 (D1) = MD5 (D2) (o SHA-1 (D1) = SHA -1 (D2)), y tales que D1 y D2 terminan con un bit pequeño que debe calcularse y, opcionalmente, un sufijo común elegido. El bit que debe calcularse se verá como basura, pero se puede ocultar en un comentario, en una imagen que se ha desplazado fuera de la página, etc. Producir tales colisiones es trivial en una PC para MD5 y es factible pero costoso para SHA. 1 (a menos que lo desee para dos archivos PDF, en cuyo caso los investigadores ya han gastado el dinero en el cálculo para encontrar uno y lo han publicado ).

En su escenario, la mayoría de las veces no le importan las colisiones, porque estará produciendo D1. No vas a hacer esto en el medio. Sin embargo, existe el riesgo de que alguien pueda engañarlo para que inyecte este bit, por ejemplo, suministrando una imagen para incluir en el documento. Sería bastante difícil lograr una colisión de esa manera, pero en principio es factible.

Dado que existe un riesgo en el uso de MD5 y un beneficio cero en comparación con el uso de SHA-256, use SHA-256.

Qué hacer con un hash

Con un hash criptográfico no roto como SHA-256, lo que sabes es que si dos archivos tienen el mismo hash, son idénticos. Por el contrario, esto significa que si dos archivos tienen hashes diferentes, entonces son diferentes. Esto significa que si conserva una copia confiable del hash (por ejemplo, la imprime y almacena, o la certifica ante notario), puede decir más adelante "sí, este archivo que me muestra es el mismo archivo" o " No, este archivo que me estás mostrando es diferente ".

Saber el hash del archivo no prueba que lo hayas escrito. No hay forma criptográfica para demostrar la autoría. Lo mejor que puedes hacer es demostrar que tenías el archivo antes que nadie que pueda probarlo. Puede hacerlo sin revelar el archivo comunicando el hash a un tercero en el que todos confíen en recordar correctamente la fecha en la que les mostró el hash; este tercero podría ser un notario público o la Máquina de Wayback si coloca el hash en una página web que indexa. (Si publicas el hash, entonces en teoría alguien podría descubrir el archivo a partir de él, pero no hay mejor manera de hacerlo que probar todos los archivos plausibles hasta que encuentren el correcto. Si estás preocupado por esto, usa una firma del archivo en lugar de un hash, y certifique ante notario la firma y la clave pública, pero mantenga la clave privada para usted.)

Ejemplo de algo por lo que un hash es bueno: su cliente desea asistencia, pero solo está preparado para admitir su producto original y no un producto modificado. Así que les pides que calculen el hash de lo que quieren que apoyes. Si el valor de hash no es lo que usted proporcionó, se niega a proporcionar soporte. Tenga en cuenta que debe confiar en el cliente para calcular el hash del producto y no calcular el hash de alguna copia del original o leerlo en el comprobante de entrega.

Ejemplo de algo para lo que un hash no es bueno: otra persona afirma que es el autor del documento. Usted dice "no, mira, sé que es hash, es 1234 ...". Eso no ayuda: cualquiera puede calcular el hash.

Ejemplo de algo por lo que un hash es bueno si se usa adecuadamente: otra persona afirma que acaba de escribir el documento. Dices "no, mira, noté el hash 6 el año pasado, así que no puedes haberlo escrito la semana pasada".

Ejemplo de algo para lo que un hash no es bueno: alguien realiza una ligera modificación del documento. Entonces tendrá un hash diferente. Todo lo que puede decir es que el documento ahora es diferente, pero eso no transmite ninguna información acerca de cuán diferentes son. El hash de un documento completamente diferente es tan diferente como el hash de una versión con una corrección tipográfica, o una versión que está codificada de manera diferente.

    
respondido por el Gilles 28.11.2018 - 22:07
fuente
1

Para garantizar que el producto de trabajo no se modifique, incluso MD5 es razonable.

La capacidad de un atacante para diseñar una colisión es peligrosa cuando pueden, por ejemplo, generar un ejecutable. Ese ejecutable puede tardar 500 Kb para hacer algo malo, y gastar otros 50,000 Kb para girar los bits no utilizados solo para obtener la colisión. Eso está bien si esos bits no se utilizan; simplemente ves un ejecutable con el hash correcto y te engañan.

Para diseñar una colisión que coincida con el hash MD5 -y- representa una documentación incorrectamente creíble, no es factible. Es más probable que termines con la documentación que dice " Toma el tapón e insértalo en $ # WG% ga 940 [2aj2'rj09 [3j59g; qa1j; socke t": cualquiera que se vea En ese momento se dará cuenta de que la documentación ha sido manipulada. Incluso una serie de monos de Shakespeare en fase no puede hacer girar una colisión MD5 que todavía parece documentación.

Mirando más de cerca, veo que no es la documentación la que está protegiendo; Incluiría el hash del "archivo específico que será el resultado del trabajo que hago para ellos". Una vez más, sin saber que ese archivo es ejecutable? ¿código fuente? - no es computacionalmente factible que puedan modificarlo de manera tal que puedan reclamar de manera creíble que es lo que usted les dio, y diseñar una colisión de hash al mismo tiempo.

Consulte también esta respuesta en Crypto.SE que resume:

  

MD5 actualmente se considera demasiado débil para funcionar como un hash criptográfico.   Sin embargo, para todos los usos de hash tradicionales (es decir, no criptográficos), MD5 es   a menudo perfectamente bien.

No estás viendo el uso criptográfico de un hash, por lo que MD5 está bien para ti. Evitará el reemplazo de los reemplazos modificados o creíbles del producto de trabajo que les proporcionó.

    
respondido por el gowenfawr 28.11.2018 - 17:25
fuente

Lea otras preguntas en las etiquetas