Pregunta

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

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

Mi intención es generar un hash salado del contenido del archivo y agregarlo 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 eso todavía se siente como un eslabón débil.

¿Hay mejores enfoques para resolver este tipo de problema?

¿Fue útil?

Solución

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

(La comparación con la industria de la música no es totalmente relevante, ya que quieren evitar que las personas copien también el archivo, lo cual es un problema mucho más difícil).

Otros consejos

Si su aplicación se ejecuta en las máquinas del usuario, siempre podrían parchear el binario para que ni siquiera haga la verificación, haciendo que todo su trabajo duro sea inútil :-)

Incluso una solución del lado del servidor puede evitarse olfateando el tráfico. Entonces, necesitas unirlos y usar SSL. Y luego simplemente parchearon el binario como arriba, y ahí está. Entonces empleas varias medidas para ofuscar tu binario, y tus usuarios sacan un desensamblador como IDA PRO.

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

Use una firma digital. Una firma es un hash cifrado con cifrado 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 verifica el hash. Para "corregir" el hash después de una modificación de archivo, el usuario debe calcular el nuevo hash, cifrarlo con la clave privada y reemplazar el antiguo al final del archivo. Problema: no tiene la clave privada. La clave privada no está en su aplicación. La clave privada no se envía a ninguna parte con su aplicación. Su aplicación solo tiene la pública. Si lo cifra con el público, no se descifrará con el público, por lo que esto es inútil. La clave privada está en su computadora y nadie tiene acceso a ella.

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

Creo que tu solución es lo suficientemente buena. Para dificultar la modificación del archivo, puede cifrarlo, pero luego no pueden leerlo, por lo que solo funcionará si esa es una limitación correcta.

Para su preocupación sobre la distribución del hash ... La buena práctica es hacer el hash y encriptarlo con un par de claves pública-privada. Y solo tiene que distribuir la clave pública. De esa manera, pueden leerlo pero no pueden modificarlo o crear uno nuevo.

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

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

Además, los usuarios son menos aptos para editar archivos binarios que los archivos de texto sin formato. Además, los usuarios son menos propensos a sentirse molestos si les entregan un archivo binario que si les entregan un archivo de texto con una suma de verificación, suponiendo que tengan alguna razón legítima para desear editarlo y pueden, al mirar el archivo, decir que hubiera sido fácil hacerlo si no hubiera agregado una suma de verificación o lo que sea.

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 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 cuanto a cuánto tiempo y esfuerzo sus usuarios querrían (o pueden) invertir en romper la protección.

Esto es para lo que sirven los hash md5 y los CRC, y es por eso que verifica los archivos descargados de Internet con su archivo md5, para asegurarse de que no fue un highjacked en ruta.

De todos modos, creo que Roddy usa C ++, así que puedo recomendar Boost :: CRC es muy rápido y poco costoso, tampoco es necesario encriptar el archivo de esa manera

¿Quiénes son sus usuarios y qué tan difícil van a intentar cambiar el archivo? Si sus usuarios pueden encontrar la sal que está agregando a su hash, entonces probablemente puedan encontrar una clave pública en su código, cambiarla a una clave pública que generaron ellos mismos y calcular la firma en el archivo modificado con su clave privada. Iría por la ofuscación de la sal.

La alternativa es algún tipo de sistema en línea que agrega enormes niveles de complicación y, por lo general, es resquebrajable.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top