Estoy planeando almacenar trozos de datos encriptados dentro de un archivo, junto con cada trozo sería el hash (sha256) del trozo sin cifrar almacenado en el archivo también. ¿Es seguro almacenar el hash?
En términos generales, no, no es tan seguro.
Una propiedad de seguridad específica que pierdes es la de indistinguishably. Lo que indistintamente te da es la capacidad de evitar que un atacante determine cuándo dos textos cifrados son el mismo mensaje o mensajes diferentes. Para proporcionar esto, los métodos modernos de encriptación generalmente brindan una manera de encriptar el mismo mensaje dos veces, o cualquier número de veces arbitrario, y terminar cada vez con textos cifrados no relacionados.
Si también hash el texto sin formato, lo perderás, ya que el valor de hash siempre será idéntico para los mensajes idénticos.
Dependiendo de la aplicación específica, existen otros problemas de seguridad que podría tener, incluso el potencial de recuperación completa del texto plano, incluso de los valores de hash, pero la pérdida de la indistección es un cierto efecto.
Si los hashes son de datos no cifrados, entonces un atacante puede verificar si el contenido del archivo coincide con un texto plano específico. ("¿Es este archivo una copia encriptada de pirated_song.mp3?")
Además, si los hashes están allí para que el contenido del archivo pueda verificarse en busca de daños, entonces el verificador de integridad debe descifrar el archivo para verificarlo. Si los hashes son del texto cifrado, entonces verifique la integridad del archivo sin necesidad de conocer su clave. Esta podría ser una habilidad útil para permitir dependiendo de los aspectos específicos de la situación.
Si tiene miedo de que los hash se inviertan a sus datos de texto sin formato originales, esto simplemente no es posible debido a la naturaleza unidireccional de las funciones de hash, a menos que un atacante pueda forzar de forma brutal el contenido de un fragmento y terminar. con el mismo hash.
El único uso posible del hash que veo es si el atacante ya tenía el fragmento sin cifrar y quería determinar qué fragmentos cifrados contenían esos datos, pero no hay mucho propósito en ese momento.
Lea otras preguntas en las etiquetas hash encryption storage sha256