EDIT : pregunta revisada. Versión anterior demasiado mal pedida.
En mi sitio web, los usuarios escriben mensajes confidenciales que deben mantenerse en secreto. El área de usuario completa es sobre SSL, por lo que la comunicación entre el usuario y el servidor debe ser bastante segura. Ahora quiero almacenar los mensajes de forma segura, de modo que un atacante que tenga acceso a la base de datos no pueda leer los mensajes.
Con la ayuda de Security.SE, actualmente estoy implementando este esquema de cifrado Revisión de la implementación: clave independiente, administración y usuario .
Como puede ver, userkey (Reino Unido) es algo sensible y se genera en el momento de inicio de sesión con PBKDF2 (con contraseña y sal de usuario). No puedo pedirle al usuario que ingrese la contraseña cada vez que quiera leer un mensaje, así que quiero mantener el Reino Unido entre las solicitudes. ¿Cuál es la mejor manera de evitar que un atacante obtenga el Reino Unido?
Creo que puedo generar el Reino Unido en el momento de inicio de sesión (cuando el usuario ingresa el pase), lo cifra y lo almacena.
Sé que las sesiones de php no son tan seguras, apc_cache_info () podría ser muy perjudicial, las cookies pueden ser robadas. Entonces, IV en una cookie, ingrese el caché de APC, cifre en la sesión: los atacantes tienen que obtener las cookies, acceso al disco, acceso a la RAM para descifrar el Reino Unido. ¿Me equivoco?
¿Qué pasa si yo:
- generar una clave aleatoria r
- Genera un vector de inicialización aleatorio IV
- Cripta los datos (una clave PBKDF2, 100 rondas) con AES 128 CBC y con r como clave y IV como IV
- Almacene el cyphertext en los datos de sesión estándar
- Almacenar la clave en el caché de APC
- Almacena el IV en una cookie
- Fetch IV, r, y cifrado cuando lo necesito, descifrar datos y usarlos
Me gustaría saber si uk ahora está almacenado de forma más segura. ¿Podrías sugerir una mejor manera de hacerlo?
Muchas gracias