¿Cómo almacenar una clave RSA privada para una aplicación?

8

Me preguntaba cómo una aplicación que tiene una clave privada la mantendrá segura.

Si la clave privada está fuera del binario, cualquiera puede acceder a ella, pero almacenarla en el binario no lo hace más seguro (creo). Podemos intentar ofuscar la clave, ¡pero aún se puede descubrir!

Entonces, ¿cuál es la mejor práctica para ese asunto?

    
pregunta darkheir 13.02.2013 - 15:10
fuente

4 respuestas

5

Espera que esté comprometido. No hay una buena manera de hacer otra cosa que ofuscar una clave privada. La mejor opción es probablemente almacenarlo en la biblioteca criptográfica del sistema en el que se está ejecutando el software. Si tiene suerte, puede tener un TPM o HSM que pueda almacenar la clave de forma segura. ¿Qué estás tratando de lograr con la clave privada? Eso podría ayudar a dar mejores comentarios sobre la mejor manera de lograr su objetivo de manera segura.

    
respondido por el AJ Henderson 13.02.2013 - 15:22
fuente
6

No hay una forma 100% confiable de ocultar un secreto de ningún tipo, ya sea una clave privada RSA o cualquier otro tipo de objeto, dentro de una aplicación de tal manera que resista la ingeniería inversa. Todos los que lo han intentado, han fracasado. Hay buenas razones teóricas por las que no debería ser posible: a saber, en algún momento, la CPU utilizará el valor secreto y, por lo tanto, lo tendrá bajo sus dedos; Al ejecutar el código en un emulador, los atacantes también pueden obtenerlo.

(El emulador es el tipo de solución que solo se puede soltar, funciona y es suficiente para demostrar la imposibilidad de protección, pero los atacantes invariablemente utilizan un poco más de cerebro en su ingeniería inversa).

Lo mejor que puede tener son los secretos específicos del usuario, de modo que, al menos , puede administrar el servidor de cosas cerrando el acceso para los infractores (si se compromete una clave de concesión de acceso, simplemente informar al servidor que esta clave específica ya no será aceptada). Esto es lo que se hace en TV satelital : la señal se transmite, con cifrado con una clave K (que cambia cada pocos minutos), y la clave K está encriptada con la clave secreta que se encuentra en la tarjeta inteligente del receptor; Cada receptor tiene su propia tarjeta inteligente. Cuando una tarjeta parece estar clonada de forma masiva (romper una tarjeta es costoso, pero una vez que se rompe, hacer 3000 copias es barato), el distribuidor de TV simplemente se detiene para distribuir la versión de K encriptada con la clave que se encuentra en la tarjeta comprometida, lo que efectivamente bloquea el acceso para todas las copias.

    
respondido por el Thomas Pornin 13.02.2013 - 17:31
fuente
0

Si bien el sistema que está utilizando actualmente no tiene un módulo de seguridad de hardware (HSM), puede comprarlos por separado (por ejemplo, como tarjetas adicionales, tarjetas inteligentes o cajas separadas). Dependiendo de su situación (valor de la clave, exposición, etc.), esto podría valer la pena.

El uso correcto de un HSM asegurará que incluso la aplicación no pueda acceder directamente a la clave privada. Esto lleva el problema a proteger (ab) el uso de los servicios ofrecidos por el HSM (por ejemplo, descifrar archivos), donde recibe la ayuda de las opciones de autenticación que proporciona el HSM.     

respondido por el Michael 14.02.2013 - 14:26
fuente
0

Si está utilizando .Net Framework, eche un vistazo a ProtectedData (como se menciona en esta respuesta de stackoverflow )

Utiliza la API de protección de datos de Windows (DPAPI) para "proporcionar protección utilizando las credenciales del usuario o de la máquina para cifrar o descifrar datos" . (tomado de los documentos).

    
respondido por el Ioanna 29.08.2018 - 17:30
fuente

Lea otras preguntas en las etiquetas