Asegurar que el archivo sea de solo escritura para un programa específico

2

En este escenario, existen varios programas que pueden abrir y leer un archivo binario, pero mi programa debe ser el árbitro final para crear y escribir en estos archivos.

En este programa que estoy escribiendo, me gustaría detectar si el archivo ha sido manipulado fuera del control de mi programa. Es importante que los otros programas puedan seguir leyendo el archivo, pero mi programa puede negarse a abrirlo porque se editó fuera de mi programa.

Mi solución es distribuir los archivos con una lista de sumas de comprobación. Si la suma de comprobación correspondiente de la lista de suma de comprobación no coincide con el archivo adjunto, o la lista no existe, se rechazará ese archivo.

Mi solución sería calcular el hash usando el siguiente método:

sha256(HIDDEN_SALT + FILE_CONTENTS)

El HIDDEN_SALT es la propiedad clave que garantiza que las fuentes externas no puedan falsificar el hash.

En esta situación, como la sal se aplica a varios archivos (1000+), ¿sería fácil de descifrar trabajando hacia atrás desde la (s) suma (s) de verificación a la que se aplicó? (Considere que tienen tanto la suma de comprobación como el archivo). ¿Habría una mejor solución para este problema?

    
pregunta A Mac 17.08.2016 - 13:14
fuente

2 respuestas

2

En realidad, hay dos problemas que resolver:

  • que el archivo no ha sido manipulado desde su creación por una parte confiable
  • que una parte de confianza realmente creó el archivo en primer lugar

Este es exactamente el escenario que enfrentan los distribuidores de software de código abierto (RedHat, Ubuntu, MySQL, etc.) para garantizar la integridad de los paquetes binarios que lanzan.

Su software, que se ejecuta en la computadora de un consumidor, debe garantizar que un atacante no haya manipulado el paquete que el usuario ha pedido instalar y que se originó con una fuente confiable.

Hashing ayudará con lo primero, pero la criptografía de clave pública es necesaria para lo segundo. El distribuidor, usted y / o sus delegados, publican su clave pública, y luego firman criptográficamente el software distribuido utilizando su clave privada.

La forma en que esto se hace generalmente es mediante la creación de un hash criptográfico del contenido del archivo, que puede ser solo del contenido y no tiene que incluir un salt o nada, y luego firmar el hash y distribuir la firma. El hash y el archivo, junto con la clave pública.

Entonces cualquiera puede usar la clave pública y la firma para verificar que el hash se originó con el titular de la clave privada, y luego que el hash coincida con el archivo.

Consulte la documentación de "firma de paquetes" de RedHat o Ubuntu mediante claves PGP para obtener más información.

    
respondido por el Jonah Benton 21.08.2016 - 20:32
fuente
0

El sistema operativo puede ayudarlo, y usted debería aprovecharlo. Llamemos a tu programa "Programa A"

Crea un nuevo UID para ProgramA. Use los permisos del sistema operativo para permitir que ese programa solo se ejecute por ese UID. Establezca permisos para que solo ProgramA-UID pueda escribir. Establezca permisos para que otros puedan leer.

(Lo mismo se aplica si estás en Windows, pero con un SID y las etiquetas de permisos son un poco diferentes).

    
respondido por el Adam Shostack 22.08.2016 - 23:22
fuente

Lea otras preguntas en las etiquetas