¿Cuál es la forma correcta de aprovisionar, compartir y almacenar (en una base de datos) las claves criptográficas?

5

Dos sistemas deben compartir un secreto para la firma JWT. El secreto tiene que ser compartido y almacenado. ¿Existen herramientas y orientación para hacer esto de manera segura?

    
pregunta bbsimonbb 02.09.2016 - 11:06
fuente

2 respuestas

5

El primer paso es garantizar que su aplicación sea segura, no solo para proteger el secreto en cuestión, sino también la aplicación en general. Si su aplicación es perfectamente segura, entonces no habrá una posible vulnerabilidad, y el secreto es seguro. Desafortunadamente, no somos perfectos y es probable que haya alguna vulnerabilidad al acecho en la aplicación que aún no se ha descubierto.

Los siguientes puntos lo ayudarán a reducir el impacto, si se encuentra una vulnerabilidad en su aplicación:

  • Almacene importantes secretos fuera de la base de datos , o, puede almacenar el secreto cifrado , con su clave de descifrado fuera de la base de datos.

    Uno de los exploits más comunes es obtener acceso a los datos a través de Inyección SQL. Si el secreto, o la clave que cifra el secreto, se almacena en un archivo fuera de la base de datos, ha eliminado ese vector de ataque.

  • Utilice los Permisos del sistema de archivos más estrictos posibles en el archivo. Es mejor si la única cuenta de usuario que puede acceder a ese archivo es la aplicación en cuestión.

    Otras aplicaciones pueden ejecutarse en cuentas de usuario separadas , de modo que si esas aplicaciones están en peligro, su secreto seguirá siendo seguro.

  • La separación física o VM es aún mejor. El punto de nuevo es que no desea que la explotación de aplicaciones no relacionadas comprometa un secreto que solo utiliza la aplicación en cuestión.

    Una forma económica de lograr la separación física sería con una computadora pequeña en la red, como Raspberry Pi o HSM, con un propósito exclusivo . Ya que su secreto particular es en sí mismo una clave criptográfica, usted podría subcontratar físicamente la operación criptográfica. Ese dispositivo solo podría tener un software muy simple que se ejecute en él para que sepa que no hay forma de extraer la clave criptográfica sin quitar físicamente los medios de almacenamiento.

    En esta cita, sustituya "deficiencias" por "vulnerabilidades" y sigue siendo cierto:

    “Hay dos formas de construir un diseño de software: una es hacer que sea tan simple que obviamente no haya deficiencias, y la otra es hacer que sea tan complicado que no haya deficiencias obvias. El primer método es mucho más difícil ". - C.A.R. Hoare.

  • No estoy familiarizado con el funcionamiento de su servicio, pero si se accede a través del nombre de usuario y la contraseña , entonces podría usar las contraseñas definidas por el usuario para derivar las claves para descifrar el secreto según sea necesario. He descrito cómo funcionaría aquí: ¿Cómo podemos servir datos confidenciales cifrados sin almacenar la clave? ¿Debo usar contraseñas definidas por el usuario para las claves? Sin embargo, esa solución no funcionará para un sistema autónomo , porque la clave de sesión y la contraseña del usuario no estarán disponibles.

respondido por el George Bailey 02.09.2016 - 15:37
fuente
1

Depende en gran medida del valor de lo que protegen estas claves.

Para sistemas muy valiosos, entonces normalmente invierte en un HSM en red .

Para un sistema que tenga un valor más bajo, puede usar un sistema de administración de claves (por ejemplo, Vault ).

Para sistemas con poco valor, puede usar dos copias (cada una protegida adecuadamente) del secreto compartido.

    
respondido por el Stephane 02.09.2016 - 13:09
fuente

Lea otras preguntas en las etiquetas