¿Cuál es la mejor práctica para almacenar un secreto en la nube?

8

Esta publicación en Asegurando los datos de la aplicación Java para Cloud Computing ofrece una buena introducción al uso de Java KeyStore para proteger los datos cifrados en la nube. Sin embargo, no responde a la pregunta fundamental, como se señala en uno de los comentarios: ¿cómo protegería la contraseña del almacén de claves en la nube?

Estamos diseñando una aplicación web SAAS en la nube pública de AWS, que tendrá muchos usuarios finales (escalada a millones). Todos los datos del usuario se cifrarán para cada usuario con el cifrado estándar. Las claves de cifrado protegidas por contraseña se almacenarán en un servidor de claves remoto y seguro, que requiere una clave secreta API para acceder. Básicamente, tiene el mismo problema que se señaló en la pregunta anterior, ya que la clave secreta de la API del servidor de claves se puede comparar directamente con la contraseña del almacén de claves: ¿cómo protegería la clave secreta de la API del servidor de claves en la nube?

Tenga en cuenta que nuestra aplicación web necesita acceso a esta clave secreta para que pueda obtener claves por usuario para cifrar y descifrar los datos del usuario. Estamos utilizando el cifrado simétrico AES-256, pero el problema fundamental sigue siendo incluso para una solución PKI, ya que todavía necesita proteger la clave privada. Tenga en cuenta también que podríamos usar un almacén de claves en lugar de un servidor de claves remoto, pero esto solo se reduce a la pregunta anterior y, de nuevo, el problema fundamental continúa.

Algunas restricciones adicionales:

  • El almacenamiento del secreto en el servidor de claves seguro remoto es imposible, obviamente, ya que se usa para acceder a ese servidor de claves.
  • El almacenamiento del secreto en el sistema de archivos en la nube es inseguro, ya que el punto principal es evitar que el secreto sea accesible para cualquiera que infrinja el sistema de archivos en la nube. (Si el sistema de archivos en la nube estuviera perfectamente seguro, no tendríamos que cifrar los datos allí). Además, dado que se espera que los recursos de la nube disminuyan y necesiten reiniciarse, confiar en la nube para guardar el secreto no es confiable.
  • El almacenamiento del secreto en el código es inaceptable, por muchas razones, entre ellas: control de versión, almacenamiento de texto sin formato, ingeniería inversa, rotación de claves, etc. Consulte también ¿Debe un sitio web de código cerrado mantener una clave secreta en su fuente? .
  • No es práctico almacenar el secreto en un HSM, ya que no podemos adjuntar uno a un servidor de nube virtual. Vea también Almacenamiento de 'secretos', keystores, HSMs y el resto .
  • Almacenar el secreto fuera de la nube para que la aplicación la cargue de forma remota también es problemático: estamos buscando un enfoque basado únicamente en la nube para evitar tener que mantener servidores internos; la confiabilidad de la red no está garantizada; la autenticación de la solicitud de secreto del servidor en la nube en el servidor interno tiene sus propios problemas; etc.
  • Se debe minimizar cualquier interacción manual, ya que queremos que los servidores se inicien y reinicien lo más automáticamente posible para reducir el tiempo de inactividad o los errores humanos. Mi conjetura es que la interacción manual puede ser necesaria.

Entonces, ¿cuál es la mejor práctica para almacenar un secreto en la nube? ¿Cómo debería una aplicación web cargar un secreto? Me interesaría particularmente una solución Java, pero este es un problema general en cualquier idioma.

    
pregunta Richard 13.03.2013 - 20:44
fuente

1 respuesta

5

"En la nube" significa "en una máquina virtual que se ejecuta en la infraestructura de una gran empresa con la que tenemos una relación contractual". Por definición, cuando almacena las cosas "en la nube", está confiando en el proveedor de la nube. Ese proveedor tiene todo el poder técnico para ver los detalles finos de las entrañas de su código y datos y todo lo que almacena en estas máquinas.

Es como tratar de mantener la integridad de su cuerpo, cuando ya está en la mesa de operaciones, bajo anestesia general, y el cirujano tiene su bisturí en la mano. Es un poco tarde para desconfiar del cirujano ...

Si el secreto es valioso, entonces no lo almacene en la nube. Dice lo contrario: si no puede pagar el costo adicional de un servidor de hardware dedicado, entonces los datos secretos no pueden valer tanto, o posiblemente sea demasiado avaricioso para su propio bien.

    
respondido por el Thomas Pornin 13.03.2013 - 20:52
fuente

Lea otras preguntas en las etiquetas