Proteger frases de contraseña dentro de una aplicación

1

En primer lugar, no estoy muy familiarizado con las mejores prácticas de cifrado.

Mi caso de uso es simple: estoy creando una aplicación que leerá documentos encriptados y los descifraré dinámicamente para realizar alguna operación en los datos que contienen.

Estaba leyendo que debería usar AES de 128 o 256 bits, por lo que instalé OpenSLL en mi caja de Linux para ver cómo se realiza el cifrado / descifrado. Encripté y desencripté un documento de muestra y noté que AES requiere una frase de contraseña.

¿Cómo puedo almacenar esta frase de contraseña en mi aplicación de manera segura para que alguien no pueda realizar ingeniería inversa del binario, descubrir mi frase de contraseña y descifrar los documentos fuera de la aplicación?

    
pregunta nickb 04.08.2012 - 02:20
fuente

2 respuestas

4

Lo que estás hablando, esencialmente, es DRM. Si le proporciona al usuario los datos que está tratando de proteger en cualquier forma no encriptada, ellos tienen los datos y pueden hacer copias. Está en su máquina, se la has dado.

  • Si usa AES, o cualquier forma de sistema de cifrado simétrico, un atacante puede aplicar ingeniería inversa a su aplicación y descubrir la clave.
  • Si la clave solo se proporciona en tiempo de ejecución, pueden cargar su programa en un depurador y establecer un punto de interrupción para capturar la clave.
  • Cuando descifras el documento, cualquiera puede establecer un punto de interrupción en tu rutina de descifrado y capturar el búfer de texto sin formato de la memoria.

Los trucos de empaque, ofuscación y anti-depuración son triviales para eludir a cualquier persona que esté razonablemente capacitada en ingeniería inversa. Esto es evidente por sí mismo; piense en cada título de juego / software importante que haya salido en los últimos 20 años. Cada mecanismo de protección contra copia ha caído en la ingeniería inversa. Lo mismo ocurre con el malware y los medios DRM.

Todo esto se reduce a una cosa: todo lo que pongas en la computadora de tu cliente es suyo para modificar y analizar.

Tengo la sensación de que tu situación necesita ser repensada. En lugar de encontrar una solución potencial y tratar de encontrar formas de hacer que eso funcione, piense en soluciones alternativas. ¿Se puede realizar el procesamiento de documentos en un servidor central, fuera del alcance del usuario?

    
respondido por el Polynomial 04.08.2012 - 10:37
fuente
0

Generalmente, no puedes detener a un hacker determinado o experimentado. Mi sugerencia es no preocuparse demasiado porque, a menos que tenga muchos usuarios (o dinero), es poco probable que alguien haga un esfuerzo serio para piratear su aplicación; Concéntrese en entregar una fantástica pieza de software.

Sin embargo, puedes:

Evita almacenar contraseñas como literales de cadena - Esto debería ser obvio.

Oscurece tus frases de contraseña - Use una colección de palabras simples en inglés o caracteres aleatorios para amortiguar su contraseña para posiblemente confundir al pirata informático o hacer que las contraseñas sean menos obvias.

Nombres de símbolos oscuros - Existe la posibilidad de que un hacker pueda extraer nombres de símbolos obvios de su binario. Por ejemplo, class keyChain . Puedes engañar al tiempo que mantienes la legibilidad usando #define keyChain readModule .

Flujo de aplicación oscuro - Supongamos que el pirata informático trabaja hacia atrás desde el descifrado del archivo para encontrar la frase de contraseña, podría usar los punteros de función para ocultar el flujo de aplicaciones aparecido.

Genera tu contraseña en tiempo de ejecución - Usted escribe su propia función que genera y escupe su contraseña durante el tiempo de ejecución.

Encriptar / Descifrar frase de contraseña con su propia función - Si utiliza otra biblioteca de terceros, un atacante puede buscar llamadas comunes. Obviamente, sea inteligente con esto y no use alguna forma de caesar cipher , y recuerde usar solo esto para ocultar su frase de contraseña, es decir, aún use AES de OpenSSL para su cifrado y descifrado de datos reales. Sin embargo, esto lo llevará de nuevo al inicio del almacenamiento seguro de una contraseña. La ganancia está en el intento de evitar que el pirata informático busque las funciones comunes de descifrado / cifrado.

En cualquier caso, ninguno de estos detendrá completamente a un hacker. Pueden ralentizar o impedir a un principiante, o pueden no hacer absolutamente nada.

Trabaja en hacer que tu software sea tan atractivo que pasarlo directamente al descifrado no es atractivo. Convenza a los usuarios de que vale la pena utilizar su software.

    
respondido por el Kurt 04.08.2012 - 05:19
fuente

Lea otras preguntas en las etiquetas