PHP / JavaScript con RSA

4

Tengo algunas columnas en la base de datos que deberían estar encriptadas. Me pregunto si la forma en que elegí hacer que este sistema funcione está bien, y espero escuchar algunas opiniones:

Elegí el algoritmo RSA (con phpseclib). Los usuarios introducirán los datos que necesito cifrados, de modo que la clave privada necesaria para cifrarlos estará en el servidor y los datos se cifrarán automáticamente una vez que se ingresen. Como solo hay una persona que debería ver estos datos, decidí mantener la clave privada en su computadora y hacer llamadas AJAX separadas que descifrarán los datos usando esa clave una vez que se muestre la página de administración. ¿Qué piensas de esta manera? La implementación no es el problema, solo te pregunto qué piensas de toda la idea

    
pregunta Bernie White 06.11.2011 - 19:05
fuente

3 respuestas

2
  Los usuarios ingresarán

, por lo que la clave privada necesaria para cifrarla estará en el servidor

Esto no tiene ningún sentido. Seguramente te refieres a que los datos se cifran utilizando la clave pública (y se descifran utilizando la clave privada). Suponiendo que este es el caso:

  

La implementación no es el problema

Si lo es. Si la persona con la clave privada accede a los datos a través de AJAX, eso implica que será descifrado por javascript, por lo que debe abordar el problema de cómo obtener la clave privada en el recinto de seguridad.

    
respondido por el symcbean 07.11.2011 - 13:40
fuente
2

El problema con el almacenamiento de la clave del lado del cliente (y accesible a través de Javascript) es que una sola falla XSS puede exponer la clave de todos modos. En general, es más fácil para un atacante encontrar y explotar fallas del lado del cliente (como XSS) que piratear el servidor y extraer la clave privada desde allí.

    
respondido por el Krzysztof Kotowicz 07.11.2011 - 14:18
fuente
2

Tendrá un problema de barbecho:

¿Qué pasa si mi computadora original está muerta y / o quiero usar otra computadora, donde obtendré una clave pública? Nadie podrá descifrar los datos.

Le sugiero que haga algo como eso:

  1. Cada usuario tiene su propia frase de contraseña

  2. Cuando el usuario ingresa los datos, se encripta con la clave simétrica que se genera a partir de una clave aleatoria + frase de contraseña

  3. la clave aleatoria se guarda junto a los datos en el DB (pero no en la frase de contraseña)

  4. Cuando el usuario desea ver los datos, debe proporcionar la contraseña y luego los datos se descifran

respondido por el AaronS 07.11.2011 - 09:50
fuente

Lea otras preguntas en las etiquetas