used they the round multiple keys are security symmetric-key key-storage

security - they keys used in cryptography are multiple round



Almacenamiento simétrico de claves (9)

Creo que malentendí tu pregunta. Lo que está pidiendo no está en el alcance de cómo maneja la aplicación su almacenamiento de claves, sino más bien cómo lo almacenará su empresa.

En ese caso, tienes dos opciones obvias:

  • Físico: escriba en la unidad USB, grabe en un CD, etc. Almacene en un lugar físicamente seguro. Pero se encuentra con el problema recursivo: ¿dónde almacena la clave de la bóveda? Normalmente, delegas 2 o más personas (o un equipo) para mantener las claves.

  • Software: Cyber-Ark Private Ark es lo que mi empresa usa para almacenar su información digital secreta. Almacenamos todas nuestras contraseñas de administrador, claves de licencia, claves privadas, etc. Funciona ejecutando un servidor "bóveda" de Windows que no está unido a un dominio, corta todos los puertos excepto el suyo y almacena todos sus datos cifrados en el disco. Los usuarios acceden a través de una interfaz web que primero autentica al usuario, luego se comunica de forma segura con el servidor de bóveda a través de una interfaz tipo explorador. Todos los cambios y versiones se registran. Pero, esto también tiene el mismo problema recursivo ... un CD de acceso de administrador maestro. Esto se almacena en nuestra bóveda física con acceso limitado.

Mi empresa va a almacenar datos confidenciales para nuestros clientes y cifrará datos utilizando una de las clases de algoritmos de cifrado .NET administrados. La mayor parte del trabajo está terminado, pero no hemos descubierto cómo / dónde almacenar la clave. He hecho algunas búsquedas y lecturas ligeras, y parece que una solución de hardware puede ser la más segura. ¿Alguien tiene alguna recomendación sobre una solución o método de almacenamiento clave?

Gracias por sus respuestas, a todos.

Spoulson, el problema es en realidad los "alcances" que mencionaste. Supongo que debería haber sido más claro.

Los datos en sí, así como la lógica que lo encripta y descifra, se abstraen en un proveedor de perfiles ASP.NET. Este proveedor de perfiles permite tanto las propiedades de perfil cifrado como las de texto sin formato. Los valores de propiedad cifrados se almacenan exactamente de la misma manera que los de texto sin formato, con la obvia excepción de que se han cifrado.

Dicho esto, la clave deberá poder ser convocada por una de tres razones:

  1. La aplicación web autorizada que se ejecuta en un servidor autorizado necesita cifrar datos.
  2. Igual que el # 1, pero para descifrar los datos.
  3. Los miembros autorizados de nuestro equipo de negocios necesitan ver los datos encriptados.

La forma en que lo estoy imaginando es que nadie conocería realmente la clave: habría un software que controlaría el cifrado y descifrado de datos. Dicho eso, la clave todavía debe venir de algún lado .

Divulgación completa: si no pudieras decirlo, nunca antes había hecho algo como esto, así que si estoy completamente fuera de base en mi percepción de cómo debería funcionar esto, de todos modos, házmelo saber.


Dependiendo de su aplicación, puede usar el método Diffie-Hellman para dos partes para acordar de forma segura una clave simétrica.

Después de un intercambio inicial seguro, se acuerda la clave y el resto de la sesión (o una nueva sesión) puede usar esta nueva clave simétrica.


Su mejor opción es proteger físicamente el hardware en el que se encuentra la clave. Además, nunca lo escriba en el disco: busque la forma de evitar que esa sección de la memoria se pagine en el disco. Cuando el cifrado / descifrado de la clave debe cargarse en la memoria, y con hardware no seguro, siempre existe este lugar de ataque.

Como dijiste, hay dispositivos de encriptación de hardware que no se escalan: todo el cifrado / descifrado pasa a través del chip.


Use una clave codificada para cifrar la clave generada antes de escribirla. Entonces puedes escribirlo en cualquier lugar.

Sí, puede encontrar la clave codificada, pero siempre que suponga que está bien almacenar una clave simétrica en cualquier lugar , no es menos segura.


Microsoft Rights Management Server (RMS) tiene un problema similar. Simplemente lo resuelve encriptando su configuración con una contraseña maestra. ... Una contraseña en una contraseña, si lo desea.


Puede encriptar la clave simétrica usando otra clave simétrica que se deriva de una contraseña usando algo como PBKDF2 .

Haga que el usuario presente una contraseña, genere una nueva clave utilizada para encriptar los datos, genere otra clave usando la contraseña, luego encripte y almacene la clave de cifrado de datos.

No es tan seguro como usar un token de hardware, pero aún puede ser lo suficientemente bueno y es bastante fácil de usar.


Solo hay dos soluciones reales para (el aspecto técnico de) este problema. Suponiendo que solo la aplicación en sí necesita acceder a la clave ...

  1. Módulo de seguridad de hardware (HSM): generalmente es bastante caro y no es fácil de implementar. Puede ser un dispositivo dedicado (por ejemplo, nCipher) o un token específico (por ejemplo, Alladin eToken). Y luego todavía tienes que definir cómo manejar ese hardware ...

  2. DPAPI (API de protección de datos de Windows). Hay clases para esto en System.Security.Cryptography (ProtectedMemory, ProtectedStorage, etc.). Esto transfiere la administración de claves al sistema operativo y lo maneja bien. Utilizado en "USER_MODE", DPAPI bloqueará el descifrado de la clave para el único usuario que lo encriptó. (Sin obtener demasiados detalles, la contraseña del usuario es parte del esquema de cifrado / descifrado, y no, cambiar la contraseña no la estropea).

AGREGADO: Lo mejor es utilizar DPAPI para proteger su clave maestra y no encriptar los datos de su aplicación directamente. Y no te olvides de establecer ACL fuertes en tu clave cifrada ...


Tenemos el mismo problema y hemos pasado por el mismo proceso.
Necesitamos iniciar un proceso en una computadora (cliente) que luego inicia sesión en una segunda computadora (servidor de base de datos).

Actualmente creemos que la mejor práctica sería:

  • El operador inicia manualmente el proceso en la PC del cliente.
  • La PC del cliente solicita al operador sus credenciales personales de inicio de sesión.
  • El operador ingresa sus credenciales.
  • La PC del cliente los utiliza para iniciar sesión en el servidor de la base de datos.
  • La PC cliente solicita sus propias credenciales de inicio de sesión desde el servidor de la base de datos.
  • El servidor de base de datos verifica que las credenciales de inicio de sesión del operador estén autorizadas para obtener las credenciales del proceso del cliente y las devuelve a la PC del cliente.
  • La PC del cliente cierra la sesión del servidor de la base de datos.
  • La PC del cliente vuelve a iniciar sesión en el servidor de base de datos utilizando sus propias credenciales.

Efectivamente, la contraseña de inicio de sesión del operador es la clave, pero no está almacenada en ningún lado.


En respuesta al # 3 de esta respuesta del OP

Una manera de que los miembros autorizados puedan ver los datos encriptados, pero sin que ellos realmente conozcan la clave, sería usar la clave escrow (rsa labs) (wikipedia)

En resumen, la clave se divide en partes separadas y se da a ''fideicomisarios''. Debido a la naturaleza de las claves privadas, cada segmento es inútil por sí mismo. Sin embargo, si es necesario descifrar los datos, los ''fideicomisarios'' pueden ensamblar sus segmentos en la clave completa.