asegurando la integridad de una secuencia de archivos jpeg

0

¿Cómo me aseguro de que una secuencia de archivos sea muy difícil de alterar, ya sea alterando el contenido o eliminando archivos completos? Estoy pensando en algún tipo de suma de comprobación variable que también se basa en la suma total de las sumas de comprobación ya calculadas ese día.

Pero eso permitiría un nuevo cálculo de todas las sumas de comprobación que hayan eliminado o alterado un archivo. Entonces, lo que busco es un método para hacer eso difícil de hacer. El problema es que el código es Python, por lo que el método utilizado será observable.

¿Quizás varias copias del registro de suma de comprobación en máquinas remotas?

    
pregunta SkyPi 23.02.2018 - 15:34
fuente

2 respuestas

1

La respuesta a su pregunta depende del contexto de su problema y del ataque que le preocupa.

Lo que es igual para cada solución es que puedes usar una cadena de hashes para vincular un nuevo archivo jpeg a una cadena de archivos anteriores.

Si tiene 3 archivos (a, byc) y una función hash H, básicamente calcula

head = H(a).

Cuando aparece el siguiente archivo b , lo haces

head = H(b | head)

y luego para c

head = H(c | head)

Luego puedes verificar que nadie modificó los archivos jpg recalculando toda la cadena de hashes y comparándolos con la cadena que ya tienes.

El problema con esto es que un atacante puede manipular o eliminar archivos a, b o c, y recalcular la cadena de hashes desde el punto de la primera manipulación en adelante.

La solución a esto depende de tus circunstancias.

Confía en el host que crea la cadena de hash

Si el host está a salvo de la manipulación por parte de un atacante, puede hacer lo que Schroeder sugiere y usar la criptografía de clave pública para firmar cada hash nuevo con su clave privada. Esto no se vuelve computacionalmente más intensivo cuanto más crece la cadena. Solo se calcula un hash sobre un archivo jpg y el último hash. Tendrá que incluir la firma en el cálculo de hash de la cadena.

Tenga en cuenta que un atacante que puede manipular tanto los archivos jpg como la cadena de hash en otra máquina que quiera verificar la cadena todavía puede tirar los últimos n archivos y sus hashes firmados, por lo que si sus archivos jpg no se crean regularmente , será muy difícil detectar un atacante que simplemente elimine los últimos n archivos, incluso si agrega marcas de tiempo.

No confías en el host que crea la cadena de hash

Si no cree que el host esté a salvo del ataque, tiene dos opciones:

Utilice un servicio externo de confianza para crear y firmar el siguiente hash dado un nuevo hash de archivo jpg. Este host hará un seguimiento del último hash en la cadena y se lo proporcionará a cualquiera que quiera verificar la cadena, de modo que se pueda frustrar el ataque de acortamiento descrito en la última sección.

o

Agregue una prueba de trabajo para que el host deba dedicar una gran cantidad de tiempo a calcular el siguiente hash válido. Bitcoin hace esto al requerir que el hash de cada nuevo bloque comience con un cierto número de 0 (es un poco más complicado, pero se obtiene la imagen), por lo que para encontrar un bloque válido, debes jugar con algunos campos ajustables. en el encabezado de bloque hasta que termine con un hash válido. También puedes adaptar esto a tu problema.

La idea aquí es que si un atacante quisiera cambiar la cadena de hashes, tendría que duplicar la cantidad de trabajo que se utilizó para crearlo. Esto se hace más difícil cuanto más atrás en la cadena se intenta una manipulación. Como parece que se está ejecutando en un Pi cero, la duplicación del trabajo en un procesador mucho más rápido parece fácil, por lo que la prueba de trabajo probablemente no funcione para usted.

Incluso si era factible, aún se rompe cuando se enfrenta con el ataque de acortamiento. Realmente no puedes solucionar este problema sin almacenar la longitud de la cadena (o el último hash, o lo que sea) en una ubicación confiable que el atacante no pueda modificar.

Usando una cadena de bloques

También puedes usar una cadena de bloques preexistente, como la cadena de bloques de bitcoin o etéreo. Puede hacer que sus hashes de archivos entren en la cadena de bloques de bitcoin, por ejemplo, creando una nueva transacción para cada nuevo archivo jpg y almacenando el hash del archivo como metadatos de la transacción.

Esto resolvería todos los problemas, pero dependiendo de la rapidez con la que necesitó las transacciones para incorporarse a la cadena de bloques, le costaría dinero.

    
respondido por el Pascal 23.02.2018 - 20:25
fuente
-1

Como una respuesta completamente especulativa, sugeriría firmar digitalmente cada paso de la secuencia.

Jpeg1 -> sign -> Jpeg1+Jpeg2 -> sign -> Jpeg1+Jpeg2+Jpeg3 -> sign ...

La integridad se mantiene mientras se mantenga el proceso de firma y la integridad de la clave.

    
respondido por el schroeder 23.02.2018 - 16:20
fuente

Lea otras preguntas en las etiquetas