¿Dónde almacenar una clave de cifrado del lado del servidor?

92

Tengo algunos datos que están cifrados simétricamente con una sola clave en mi base de datos. En lugar de codificarlo en mi código, busco una forma más segura de almacenar la clave de cifrado. ¿Dónde puedo guardarlo de forma segura?

    
pregunta Radek 01.03.2012 - 18:19
fuente

3 respuestas

106

Aquí están tus posibilidades:

  1. Use un módulo de seguridad de hardware externo. Hay una toda la industria de productos diseñado para descargar operaciones sensibles a la seguridad en dispositivos externos. Esto no resuelve el problema sino que lo reubica , pero lo reubica en un dispositivo que es mucho más seguro, por lo que es un triunfo de seguridad. Si está haciendo algo de alto riesgo, es casi seguro que esto va a tener en cuenta su solución.

  2. Vincule la clave de cifrado a su hardware. Los chips TPM son útiles para esto, al igual que los tokens de seguridad USB (no las unidades flash). En este caso, crypto solo funciona en esa pieza específica de hardware, pero no está restringido de otro modo. Es un poco como la versión para niños del HSM mencionado anteriormente. Google anunció recientemente Project Vault lleva esto un paso más allá al hacer que un HSM de alto ancho de banda sea incorporable incluso en los dispositivos de consumo más pequeños.

  3. Vincule la clave de cifrado al inicio de sesión de su administrador (por ejemplo, cifre la clave de cifrado con el inicio de sesión de su administrador). Esto solo es marginalmente útil ya que requiere que inicies sesión para cifrar / descifrar cualquier cosa. Pero en el lado positivo, nadie puede cifrar / descifrar nada a menos que esté conectado (es decir, un mayor control). Gran parte del almacenamiento seguro en Windows funciona así.

  4. Escriba la clave de cifrado cuando inicie, guárdela en la memoria. Esto protege contra los ataques sin conexión (a menos que capturen la clave de la RAM, que es más difícil de hacer). Similar a la opción anterior, pero también diferente. Sin embargo, el servidor se inicia en un estado inusitado, que requiere que suministre manualmente la clave antes de poder trabajar.

  5. Almacene la clave en un servidor diferente. Por ejemplo, ponga la clave en el servidor web y los datos cifrados en el servidor de base de datos. Esto lo protege hasta cierto punto porque alguien tendría que saber para tomar la clave y la base de datos, y también tendría que tener acceso a ambos servidores. No sorprendentemente segura, pero una opción muy popular de todos modos. La mayoría de las personas que piensan que lo están haciendo correcto lo hacen de esta manera. Si está considerando hacer esto, considere también una de las dos primeras opciones mencionadas anteriormente.

  6. Almacene la clave en otro lugar en el mismo servidor. Agrega seguridad marginal, pero no mucho. La mayoría de las operaciones más pequeñas hacen esto, no deberían, pero lo hacen. Normalmente, porque solo tienen un servidor y se ejecuta en alguna nube en algún lugar. Esto es como pegar una llave a la puerta en lugar de dejarla en la cerradura; Garantizado para detener a los más incompetentes de los atacantes.

  7. Almacena la clave en la base de datos. Ahora ni siquiera lo estás intentando. Aún así, una opción deprimentemente popular.

respondido por el tylerl 01.03.2012 - 19:40
fuente
3

Me doy cuenta de que esto fue respondido hace un tiempo, pero para dar un par de ejemplos a la buena respuesta de Tyler: Planeo usar su número 1 para vincular una contraseña a una cuenta de servicio y usar un cmdlet de Powershell para capturarlo. De esa manera, los scripts no necesitan ser tan fuertemente modificados. La contraseña de la cuenta de servicio está en Active Directory y debería comprometerse primero. Esto me funciona ya que lo uso en dos servidores. Para su # 4, para cumplir con nuestro cumplimiento, pudimos almacenar una clave en texto sin formato en otro servidor con almacenamiento externo porque ese almacenamiento estaba encriptado y su acceso estaba restringido. Como Tyler menciona, este último no parece tan seguro, pero fue lo suficientemente bueno incluso para un asesor difícil.

    
respondido por el Mike 29.01.2013 - 02:20
fuente
2

Puede crear una arquitectura de dos capas para la administración de claves.

  1. Una clave para cifrar sus datos en reposo al cifrar los espacios de tablas, o basado en columnas.
  2. Clave maestra para desbloquear 1.

para su (s) clave (s) maestra (s) use una de las soluciones de administración de claves establecidas, como:

  • Amazon AWS KMS
  • Oracle Vault
  • Microsoft MKS.
  • o de código abierto.

Solo tenga en cuenta que su administrador de claves tiene que admitir una disponibilidad igual o mayor que su infraestructura donde se usa la clave administrada.

    
respondido por el Hugo R 24.08.2017 - 15:36
fuente

Lea otras preguntas en las etiquetas