Estoy tratando de descubrir una estrategia de cifrado decente para una aplicación de pequeña empresa. Mi objetivo principal es exponerme a la menor cantidad de PI sin cifrar que sea posible.
No tengo idea de si estoy pensando demasiado en esto y hay una manera fácil, así que pensé en preguntar. También me gustaría saber si alguno de mis pensamientos es una completa basura.
He pensado en 2 estrategias hasta ahora:
-
Cuando un usuario inicia sesión, se le solicita que ingrese una contraseña de descifrado principal. Esta contraseña se utiliza para descifrar la clave privada y se genera una cadena aleatoria & almacenado en una cookie (o tal vez en almacenamiento local + transmitido con cada solicitud de publicación). La clave privada se vuelve a cifrar con la cadena aleatoria y cada vez que se solicitan datos cifrados, la cadena de la cookie se utiliza para descifrar la clave, luego los datos.
-
Desventaja: como administrador / pirata informático del servidor, obviamente podría interceptar la contraseña maestra y descifrar la clave, luego los datos.
-
Ventaja: bastante sencillo.
-
-
La clave pública solo se almacena en el servidor. Entre el servidor y el cliente hay un proxy inverso que analiza el contenido (similar a cómo funciona ESI). Este servidor proxy contendría la clave privada y descifraría los datos antes de servir al cliente. Las claves en este servidor no serían administradas por el mismo administrador.
- Desventaja: como administrador / hacker proxy, obviamente, podría interceptar los datos a medida que pasan. También tendría acceso a la clave privada.
- Ventaja: como administrador / pirata informático proxy, no tendría credenciales para la aplicación, por lo tanto, solo podrá rastrear los datos solicitados por los usuarios finales.
- Ventaja: en un entorno empresarial, es probable que este servidor se pueda proteger mucho más fácilmente contra fuentes externas. No se permiten conexiones entrantes en absoluto.
Lo siguiente se trata como un hecho:
- Todo el transporte está protegido por SSL.
- En todos los escenarios, tendría acceso a los datos tal como fueron ingresados. Esto podría mitigarse utilizando el cifrado de clave pública JS.
- La autenticación real de la aplicación es apta para el propósito. ES DECIR. La ingeniería social, la fuerza bruta, etc. están descontadas. Los problemas / errores basados en el navegador no se descuentan.
- Un equipo de personas autorizadas debe poder acceder a los datos cifrados.
- Se debe acceder a través de un navegador.
- Todo el disco está cifrado en reposo, lo que no es un beneficio para, por ejemplo, romper la raíz a través de SSH.
He descontado lo siguiente:
- Descifrado JS: por lo que he visto, esto simplemente significa que la clave privada está expuesta al usuario final.
- teclas simétricas & claves de pub / priv sin cifrar en el servidor, DB en otro servidor. No estoy realmente seguro del valor de estos. Como administrador o pirata informático, tendría todo lo que necesito para descifrar los datos de MySQL si incurriera en una infracción del servidor de aplicaciones.
- Servidores clave de terceros: esto parece pasarle la pelota a otra persona que pueda ver el contenido (aunque me pregunto si hay un proceso de varios pasos que podría funcionar en conjunto).