¿Cómo cifrar archivos sin otorgarle acceso al usuario? [duplicar]

-1

No sé si debería hacer esta pregunta en security.SE o stackoverflow, así que mueva mi publicación si es necesario.

Quiero almacenar los datos de mi aplicación (C #) de manera que el usuario no pueda leerlos o modificarlos. Si cifro los archivos, necesitaré una contraseña para poder descifrarlos cuando mi programa tenga que leerlos.

¿Dónde almacenaría esta contraseña (porque el código fuente se puede leer con los desensambladores, por lo que almacenar las contraseñas en el código no es una opción)?

¿Hay otra opción para almacenar los datos que usar una contraseña? Si no, ¿cuál sería el mejor lugar para almacenar la contraseña sin que el usuario pueda acceder a ella?

    
pregunta pascalhein 27.06.2013 - 19:34
fuente

1 respuesta

4

De lo que estás hablando es del infame problema del DRM. Lamentablemente no hay manera de hacer esto. El problema fundamental es de confianza. En los sistemas modernos actuales, el usuario es dios. Tienen el control del hardware y, por lo tanto, pueden abusar del sistema de cualquier forma que deseen. Tu programa tiene que ejecutarse en su dominio. Como tal, cualquier cosa que su programa pueda hacer, el usuario puede hacer ingeniería inversa y hacerlo. Puede hacer que sea más difícil para ellos descubrir qué deben hacer, pero en última instancia, si está en su hardware, es su sistema, no el suyo.

Esto es DRM porque, en última instancia, DRM se trata de tener un secreto a salvo del usuario que el software conoce. ¿Cómo funciona el DRM en la música? Intenta ocultar la clave de cifrado de la música de modo que el software pueda reproducirla, pero el usuario no puede descifrarla. Tu caso no es diferente. La respuesta es tener un sistema en el que el usuario no sea un dios (es decir, el usuario no tiene acceso de root a la caja y se confía en que el hardware es seguro) o, de manera similar, ejecutar el software en un servidor que usted controla y limitar su acceda de tal manera que no puedan hacer lo que usted no quiere que hagan.

Si desea intentarlo, no puede estar mucho más seguro que simplemente incluir la clave en el código fuente. Puede probar uno de los diversos sistemas comerciales para ofuscar claves, pero todos pueden romperse. La discusión de técnicas detalladas para tratar de ocultarlo aquí sería a) demasiado amplia yb) inútil, ya que cualquiera podría consultar esta publicación y ver qué tipo de cosas podría estar haciendo.

    
respondido por el AJ Henderson 27.06.2013 - 20:32
fuente

Lea otras preguntas en las etiquetas