El sitio se alojará en un servidor de Internet compartido, para almacenar datos no comerciales y se etiquetará claramente como información no confidencial.
Deseo ofrecer una solución creíble a los riesgos de cualquier administrador del servidor, simplemente pudiendo leer los campos de texto sin formato en la base de datos directamente o por medio de una copia de seguridad y, de igual manera, el servidor debe ser pirateado y la base de datos debe tener acceso. No hay una amenaza percibida de piratas informáticos determinados ya que los datos tienen poco valor.
Mis preocupaciones están principalmente relacionadas con la administración de claves: almacenar la clave secreta encriptada en la base de datos y almacenar la clave secreta desencriptada en una variable de sesión. Todos los comentarios serán bienvenidos.
Mi plan es el siguiente:
Utilice php mcrypt_encrypt (MCRYPT_RIJNDAEL_256). Almacene la clave secreta simétrica encriptada en la base de datos usando un hash de una frase secreta que se le otorgaría a la organización (hasta 10 personas).
Después de que un usuario inicia sesión con su nombre de usuario y contraseña únicos, se les pide la frase secreta: si se ingresa correctamente, la clave secreta simétrica se descifra y almacena en una variable de sesión, los datos protegidos se descifran y se muestran.
La clave secreta se almacena en una variable de sesión, que se destruye cuando el usuario cierra la sesión o después de un tiempo de espera de sesión. El sitio también está protegido usando apache htaccess ya que no es para uso público. El php está incorporando métodos para defenderse contra xss, inyección, etc.
Además de otorgarle al usuario final la responsabilidad de administrar la frase secreta, ¿este plan tiene alguna debilidad obvia?