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.