Almacenamiento seguro de claves privadas generadas en el servidor con la contraseña específica del usuario

1

Actualmente estoy creando un sistema (PHP Web Application Framework) que crea un par de claves RSA para que un usuario permita que otros usuarios envíen información segura de uno a otro. La clave pública no está encriptada (como se esperaba) y la clave privada se cifra con la contraseña del usuario. Como el proceso de generación de RSA inicial es bastante costoso computacionalmente (generación de primos grandes), estoy usando dos métodos para hacer los primos.

El primero es un applet de java que se ejecuta en el navegador del cliente, crea los números primos y las claves, asegura la clave privada con la contraseña y la envía al sistema donde se almacena y se usa más adelante.

El segundo es usar una aplicación (que se ejecuta en el servidor web como un cron o en otro servidor que puede acceder y actualizar la aplicación) que hará lo mismo que el applet. Sin embargo, todavía no estoy seguro de cómo proteger la clave privada, por lo que solo es accesible para el usuario y nadie más puede acceder a ella.

Lamentablemente, aquí es donde estoy golpeando un bloqueo de carretera. No estoy seguro de cómo proteger los datos (generados en el servidor web o por otro servidor), por lo que (o la contraseña del usuario) no está directa o indirectamente disponible para ningún pirata informático, incluso si tienen acceso a todo el sistema de archivos. y base de datos en el servidor. ¿Alguien tiene alguna sugerencia sobre cómo se podría lograr algo como esto?

    
pregunta topherg 05.01.2013 - 04:40
fuente

1 respuesta

3

No estoy seguro de lo que intentas lograr aquí. Si está tratando de proteger los datos del usuario, de modo que solo el receptor del mensaje tenga acceso a ellos, una solución sería:

  • Genere el certificado en el cliente, usando el applet y proteja la clave privada con una contraseña (la contraseña del usuario u otra contraseña)
  • Envíe la clave pública al servidor para que esté disponible cuando alguien quiera enviar un mensaje cifrado.
  • La clave privada no debe abandonar la computadora del cliente. El problema obvio aquí es que si el usuario utiliza otra computadora para acceder a su aplicación, deberá copiar el certificado allí. Puede resolver este problema utilizando tarjetas inteligentes o tokens USB y almacene los certificados allí. De esta manera, solo necesitaría la contraseña del token para acceder a la clave privada.

Si también tiene algún tipo de funcionalidad de administrador y tiene un usuario que debería poder descifrar todo, entonces las cosas se complican un poco más. Puede tener un certificado de administrador y después de que el applet genere el par de llaves, cifrelo con la clave pública del administrador y envíelo al servidor, donde debe almacenarlo de forma cifrada.

Al menos el administrador debería tener un token USB con su certificado, de modo que incluso si un atacante obtiene acceso a su servidor, no tendría acceso a ninguna de las claves privadas que podrían descifrar los mensajes.

    
respondido por el Dinu S 07.01.2013 - 08:28
fuente

Lea otras preguntas en las etiquetas