¿Es una función hash una función de RO o habrá una posibilidad de que la función hash altere el archivo (como parte de la función o en caso de accidente) de que está haciendo hashing?
¿Es una función hash una función de RO o habrá una posibilidad de que la función hash altere el archivo (como parte de la función o en caso de accidente) de que está haciendo hashing?
Una función hash funciona con datos, es decir, datos de entrada y salida. Si los datos provienen de un archivo o red o similar y si se escriben en un archivo o en algún otro lugar, no tiene nada que ver con la función hash en sí, sino con un programa que utiliza esta función hash para un propósito particular. Este propósito puede ser imprimir solo el valor hash resultante en la salida estándar sin modificar el archivo de entrada. Pero una función hash también se puede usar en el proceso de agregar una firma a alguna sección de un archivo, en cuyo caso el archivo se modifica.
En el caso general, crear un hash de un archivo no modificará el archivo original.
Por ejemplo, en linux, el comando md5sum
se puede usar para crear un hash de un archivo.
user@host:/etc$ md5sum /etc/hosts
d060f54470d55f7c02e639ed92bff5d3 /etc/hosts
el hash se imprime de nuevo en la pantalla y no modifica el archivo original.
Hay dos partes en un archivo: el contenido del archivo (incluidos los flujos primarios y alternativos) y los metadatos sobre el archivo. Hashing un archivo no cambiará el contenido del archivo, pero puede cambiar los metadatos del archivo. Entonces, si tu intención era obtener el hash de un archivo y que nadie te supiera que lo has hecho, entonces los metadatos podrían revelarlo. Como ejemplo en Windows, cuando accede a un archivo, termina cambiando la última fecha de acceso del archivo.
Preguntó si podría alterarlo en un accidente ... sí, pero tendría que ser un gran accidente (o un codificador muy malicioso y muy estúpido).
Un programa que hace un hash de un archivo necesita leer ese archivo. Esto significa que tiene que abrirlo. Los archivos deben estar abiertos para leer o escribir o ambos. No se puede escribir en un archivo abierto para leer. Un archivo abierto para escritura no puede ser leído. Así que es extremadamente improbable que este tipo de error ocurra, y mucho menos que pase las pruebas más básicas.
OTOH un codificador malintencionado podría intentar alterar su archivo. Este es un ataque extremadamente improbable ya que será cegadoramente obvio lo que sucedió, y también cegadoramente obvio en el código. Ese código no duraría mucho.
Puede protegerse contra esto con permisos de archivo, hacer que el archivo sea de solo lectura y el programa no pueda escribir en él (algunos sistemas operativos y sistemas de archivos pueden permitir que el propietario del archivo o el superusuario escriban de todos modos). Sin embargo, si el programa es ejecutado por el propietario del archivo, el programa puede cambiar los permisos del archivo, alterarlo y volver a cambiarlo. Eso incluye todos sus metadatos. Como dije, este tipo de código malintencionado extremadamente fácil de detectar y extremadamente improbable que exista en la naturaleza.
La verdadera respuesta es usar un software criptográfico bien probado, revisado y bien probado, y no algo que haya copiado de Internet.
Lea otras preguntas en las etiquetas hash