2008-11-19 21 views
5

Deseo poder crear un archivo, distribuirlo a un usuario final, pero evitar que realice modificaciones en el archivo.Crear archivos no modificables

Ahora, obviamente, no puedo evitar que nadie modifique el archivo, así que mi enfoque es detectar y rechazar el archivo si se modifica.

Mi intención es generar un hash salado de los contenidos del archivo y anexarlo al archivo. Al leer, el hash se verifica antes de leer el resto del archivo. La desventaja de esto es que tengo que distribuir la "sal" fija en el ejecutable que lee el archivo. Obviamente puedo ofuscarlo hasta cierto punto, pero aún se siente como un eslabón débil.

¿Hay algún método mejor para resolver este tipo de problema?

Respuesta

13

Desea anexar un digital signature a su documento. Esta es un área que ha sido ampliamente estudiada. En resumen, puede con bastante seguridad asegurarse de que el archivo no haya sido alterado, pero no puede evitar que el usuario lo manipule indebidamente.

(La comparación con la industria de la música no es totalmente relevante, ya que quieren evitar que la gente copia el archivo, así, que es un problema mucho más difícil.)

1

No si desea una solución al 100%. Solo mira la industria del cine y la música. Lo han intentado y han fallado durante muchos años :)

Creo que su solución es lo suficientemente buena. Para que sea más difícil modificar el archivo, puedes encriptarlo, pero luego no pueden leerlo, por lo que solo funcionará si esa es una limitación aceptable.

+0

Él no está tratando de evitar que las personas copien el archivo solo por cambiarlo. –

+0

Lo sé, pero es igualmente inútil. –

0

Según el tipo de archivo que desee proteger, puede usar alguna herramienta de administración de documentos. Adobe PDF tiene herramientas para eso. Además, si aloja su aplicación en un servidor de aplicaciones o un servidor web, los usuarios no pueden acceder y modificar el código. De esta manera, podría tener una base de datos de hashes en el lado del servidor, de los archivos que desea proteger.

Por supuesto, la protección es igual de buena en la cantidad de tiempo y esfuerzo que sus usuarios desearían (o podrían) invertir para romper la protección.

4

Si la aplicación se ejecuta en las máquinas de los usuarios, que siempre podían parchear el binario de modo ni siquiera hacer la verificación, lo que hace todo el trabajo duro inútiles :-)

Incluso una solución del lado del servidor se puede omitir oliendo el tráfico. Entonces, necesitas subirlos y usar SSL. Y luego solo parchearon el binario como se indica arriba, y ahí va eso. Entonces empleas varias medidas para ofuscar tu binario y tus usuarios sacan un desensamblador como IDA PRO.

La pregunta que me haría, si estuviera en su posición, sería "Si me meto en una carrera armamentista con mis usuarios, ¿ganaré?". Si la respuesta es no, entonces no perderé mi tiempo.

0

Esto es lo que los hashes MD5 y CRC son para, y es por eso que comprueba los archivos descargados de Internet en su archivo md5, para asegurarse de que no fue secuestrado en ruta.

De todas formas creo que Roddy utiliza C++ por lo que puedo recomendar Boost :: CRC sus gastos generales muy rápido y pequeño, también no es necesario para cifrar el archivo de esa manera

+0

Tienes razón, uso C++. Pero cualquiera puede generar un nuevo hash MD5 ... Mi problema es evitar que alguien edite el archivo, recreando un hash y haciendo que el archivo parezca auténtico. El enfoque de la firma digital parece ser el camino a seguir. – Roddy

1

por su preocupación acerca de la distribución del hash .. .La buena práctica es hacer el hash y encriptarlo con un par de claves privadas y públicas. Y solo tienes que distribuir la clave pública. De esta forma, pueden leerlo pero no pueden modificarlo o crear uno nuevo.

Sugiero ir con Firma digital como lo sugiere JesperE. El proceso es estándar, encontrará muchos ejemplos que lo demuestran.

3

Utilice una firma digital. Una firma es un hash cifrado con encriptación de clave pública-privada. Su aplicación solo contiene la clave pública. Esta clave se usa para descifrar el hash y luego se comprueba el hash. Para "corregir" el hash después de una modificación de archivo, el usuario debe calcular el nuevo hash, encriptarlo con la clave privada y reemplazar el anterior al final del archivo. Problema: no tiene la clave privada. La clave privada no está en tu aplicación. La clave privada no se envía a ningún lado con su aplicación. Su aplicación solo tiene la pública. Si lo encripta con el público, no se descifrará con el público, entonces esto es inútil. La clave privada está en su computadora y nadie tiene acceso a ella.

1

Incluso si los usuarios aplican parches a sus propios binarios para asegurarse de que su copia editada del archivo funciona correctamente, la copia editada aún no funcionará en máquinas sin parchear. ¿Cuál es el propósito de prevenir esta edición?

Como un lado, los usuarios son menos propensos a editar archivos binarios que los archivos de texto sin formato. Además, los usuarios son menos propensos a sentirse molestos si les entrega un archivo binario que si les entrega un archivo de texto con una suma de comprobación, suponiendo que tienen algún motivo legítimo para querer editarlo y puede, al mirar el archivo, decir que Hubiera sido fácil hacerlo si no hubiera agregado una suma de comprobación o lo que sea.

0

¿Quiénes son sus usuarios y qué tan difícil es tratar de cambiar el archivo? Si los usuarios pueden encontrar la sal que está agregando a su hash, es probable que encuentren una clave pública en su código, la cambien a una clave pública que ellos mismos generaron y calculen la firma en el archivo modificado con su clave privada. Me gustaría ofuscar la sal.

La alternativa es algún tipo de sistema en línea que agrega grandes niveles de complicación y, por lo general, se puede crackear de todos modos.

Eche un vistazo a los HMAC para un método codificado de usar una 'sal' como está pensando (donde la sal se llama clave en su lugar).

Cuestiones relacionadas