¿Cómo se almacenan las claves criptográficas simétricas?

5

Si tiene una clave simétrica que se negocia a través de protocolo SRP entre un dispositivo móvil (por ejemplo, un teléfono inteligente) y un servidor , ¿cuál sería una forma segura de conservar esta clave resultante en cada lado?

En el lado del cliente, podría usar PBKDF2 o una función de derivación de clave similar para generar una clave y luego usarla para cifrar / descifrar la clave simétrica antes de usarla. ¿Sería esto considerado (aceptablemente) seguro?

¿Qué posibilidades hay en el lado del servidor? ¿Qué procedimiento se consideraría seguro para almacenar dicha clave en una base de datos?

¿Cómo, por ejemplo, Amazon almacena sus claves simétricas utilizadas para la autenticación de cadenas de consulta para S3? (Para información: en S3, puede restringir el acceso a los objetos almacenados de modo que solo las solicitudes con una firma válida (creada mediante HMAC) tengan acceso al objeto solicitado (restringido))

    
pregunta MSc 30.03.2015 - 13:55
fuente

2 respuestas

1

Las claves secretas (simétricas o asimétricas) normalmente se almacenan en un medio cifrado de algún tipo, como un almacén de claves o una base de datos cifrada. Un ejemplo específico de un almacén de claves sería el JKS (Java Key Store), y una base de datos sería SQLCipher. Este medio cifrado está protegido con una contraseña maestra, que se necesita para leer / escribir en él. SQLCipher primero cambiará la contraseña con PBKDF2 para garantizar que tenga suficiente entropía y costo computacional.

La cuestión de dónde se almacena esa contraseña maestra afectará, por supuesto, a la seguridad de su sistema. Para el lado del cliente, esperar que el usuario lo recuerde es la mejor opción. Para el lado del servidor, un Hardware Security Module (HSM) se puede usar para asegurar las claves como la de Amazon Servicio de administración de claves .

    
respondido por el HTLee 09.04.2015 - 00:54
fuente
0
  

En el lado del cliente, podría utilizar PBKDF2 o una derivación de clave similar   función para generar una clave que luego usar para cifrar / descifrar la   Clave simétrica antes de utilizarlo. ¿Sería esto considerado (aceptablemente)?   seguro?

Esto realmente depende de algunas cosas:

1. ¿Cuál es el modelo de amenaza?

¿A quién intentas impedir que te ataque? ¿Un estado nación? Un otro celoso significativo? ¿Un script para niños? ¿Tendrá esta persona acceso físico al dispositivo del cliente? Etc.

2. ¿Qué estás usando como entradas para tu KDF (PBKDF2 en tu ejemplo)?

Con suerte, la entrada al KDF es algo que no se conserva en el dispositivo (a excepción de la sal y las rondas, puede dejar las que cuelgan alrededor), sino algo de suficiente entropía que el usuario está obligado a ingresar una vez (por ejemplo, una frase de contraseña) y luego se borra de la memoria una vez que ya no se necesita más.

3. ¿Cómo está cifrando y almacenando las claves?

Si hay disponible hardware dedicado de confianza (por ejemplo, TPM o HSM [suponiendo que confía en ellos]), entonces le proporcionarán una forma de almacenar sus claves simétricas (algunas las almacenan en el hardware dedicado y otras las cifran con una clave) que se almacena en el hardware pero almacena el texto cifrado resultante en su dispositivo de almacenamiento). Si no se dispone de dicho hardware, normalmente almacenará las claves en un almacén de claves que es básicamente un archivo (o conjunto de archivos) que almacena las claves de manera cifrada. Ya hay varias implementaciones disponibles, pero si va a rodar las suyas (que NO recomiendo), entonces debe considerar cómo protegerá la confidencialidad y la integridad de sus claves cifradas. Algunas cosas a considerar son:

  • ¿Se empaquetará cada clave que se va a cifrar con un KEK diferente?
  • ¿Cómo derivarás cada KEK?
  • ¿Qué algoritmos / modos usarás?
  • ¿Qué tipo de rendimiento necesitas?

4. ¿Qué hace con las claves en la memoria cuando ya no las necesita?

Cada copia de cada clave debe borrarse de la memoria una vez que ya no sean necesarias. Hay debates sobre cómo hacer esto que van desde solo escribir un montón de ceros sobre los bytes en la memoria hasta hacer cosas más sofisticadas que involucran múltiples pases y cada uno escribe diferentes bytes en el área de la clave en la memoria. Lo que hagas debe depender de tu modelo de amenaza.

  

¿Qué posibilidades hay en el lado del servidor? Qué procedimiento haría   ¿Se considera seguro almacenar esa clave en una base de datos?

El lado del servidor tiene opciones muy similares. Lo ideal sería que el servidor usara un HSM y almacenara las claves allí (vea # 3 más arriba para más detalles) y su aplicación del lado del servidor nunca tendría acceso a los bytes de claves sin procesar (solo lo haría el HSM). En la base de datos simplemente almacenaría el alias de la clave (podría usar el HSM para proporcionar integridad en el enlace entre el registro de la base de datos y el alias).

  

¿Cómo, por ejemplo, Amazon almacena sus claves simétricas utilizadas para su   autenticación de cadena de consulta para S3?

No estoy seguro de lo que Amazon hace específicamente para la autenticación de cadenas de consulta para S3, pero sí sé que proporcionan un Servicio Cloud HSM .

    
respondido por el Hmmmmm 20.04.2015 - 22:55
fuente

Lea otras preguntas en las etiquetas