¿Cómo puedo comparar archivos encriptados GPG para cargar solo los que han cambiado? [duplicar]

2

Esta pregunta sigue a this , con respecto al cifrado de archivos individualmente para subirlos a un servicio en la nube.

--- Escenario:

  1. Tengo mi carpeta llena de archivos sin cifrar

  2. A través de un script, hago una copia de todos ellos

  3. A través de un script, los cifro uno por uno con los comandos GPG encriptados recursivos usando mi propia clave pública la opción --symmetric y una frase de contraseña dedicada

  4. A través de la aplicación de sincronización, las subo

  5. A través de un script, elimino la instantánea (no estoy seguro de esto, pero ¿cómo podría luego comparar los archivos encriptados y no cifrados para descubrir cuáles necesitan reemplazo?)

  6. Cuando vuelvo a ejecutar el procedimiento, algunos de mis archivos originales ahora han cambiado. Idealmente, solo estos deberán ser cargados. Repito los puntos 2. y 3. para que pueda ocurrir una comparación con los archivos cifrados en la nube (a través de la aplicación de sincronización).

--- Question Problema principal:

Teniendo en cuenta que dos copias de los mismos archivos cifrados con GPG nunca tendrán el mismo aspecto (consulte las respuestas a esta pregunta ), ¿cómo puedo lograr una comparación entre los archivos cifrados?

¿O debería ser mi procedimiento completamente diferente?

    
pregunta nico 10.02.2017 - 08:11
fuente

1 respuesta

2

No puedes comparar el contenido del archivo encriptado si estás usando gpg.

Tienes dos formas de avanzar que puedo ver:

  1. Cree un hash (por ejemplo, sha256) de cada archivo anterior que lo cifrará y almacenará en algún lugar. Compara los hashes en lugar de los archivos. Esto podría convertirse en un cuello de botella en el rendimiento si sus archivos son muy grandes. Puedes revisar árboles enteros construyendo hashes de hashes como git lo hace. Tengo un script de copia de seguridad de python que hace esto para detectar cambios en una base de archivos grande; Puedes tener el guión si te interesa. Sin embargo, tendrías que agregarle un paso de cifrado.
  2. Observe la hora de modificación del contenido del archivo (esto es almacenado por cada sistema de archivos junto con el contenido del archivo) para averiguar si un archivo es más nuevo que otro. Esto es increíblemente rápido, pero debe tener cuidado para que el sistema funcione.

Sin embargo, no importa por dónde vayas, el siguiente problema (de tu primer comentario) te perseguirá:

  

Pero todavía estoy confundido en cuanto a cuándo debería ocurrir la comparación de las marcas de tiempo, y entre qué grupos de archivos . [el énfasis es mío]

Este es un problema bastante difícil que se oculta en todos los escenarios de sincronización: si tiene dos conjuntos de archivos (por ejemplo, dos árboles de archivos), necesita una forma de averiguar qué archivos del árbol A deben compararse con los archivos del árbol B . Esto no es un problema cuando solo modificas el contenido del archivo, pero ¿qué ocurre cuando agregas unos cuantos archivos, cambias el nombre de otros y eliminas otros? Básicamente, necesita un algoritmo para determinar la distancia de edición y un editor de árbol (para determinar y aplicar un conjunto pequeño o el más pequeño de operaciones que convertirán el árbol A en el árbol B). Creo que este es un problema O (n ^ 2) y es una pregunta de algoritmos , no una pregunta de seguridad (por ejemplo, debe hacerla en uno de los sitios hermanos de stackexchange) .

Además, si desea que su solución funcione para los árboles de archivos, no solo una carpeta, dudo que pueda resolver esto con un pequeño script por lotes; como dije, hice algo comparable con fines de copia de seguridad y mi script ha crecido hasta alcanzar un tamaño considerable (por ejemplo, miles de líneas).

    
respondido por el Pascal 10.02.2017 - 08:38
fuente

Lea otras preguntas en las etiquetas