¿Cómo descifrar el DEK cifrado usando KEK que están separados en los servidores?

4

Descifrando el DEK utilizando KEK bajo los estándares PCI, que están separados por servidores:

Digamos, por ejemplo, que tenemos server1 y server2

  

Servidor1:

  • Está en el este de los EE. UU., se llama servidor de aplicaciones.
  • Alojé mi sitio web y mi base de datos.
  • En mi código estoy usando criptografía AES de 256 bits.
  • Almacene los datos del titular de la tarjeta cifrados en DB.
  • Este servidor contiene DEK cifrada (Clave de cifrado de datos).
  

Servidor2:

  • Está en WestUS, se llama servidor clave.
  • Solo contiene la clave de cifrado de clave (KEK) para descifrar el DEK.
  • Todos los puertos están bloqueados, solo acepte la solicitud del servidor1.

Tengo dos procesos en mi mente para la implementación. Pero acabo de confundirme, lo que podría ser una mejor manera:

  

Proceso 1 :

El siguiente código se está ejecutando en servidor1 :

public string Data()
{
    AES objaes =new AES();
    objaes.key= getkey(EncryptedDEK);
//decrypt the values
}

public string getkey(string EncryptedDEK)
{

  //connect to the server 2 and get the DEK
  request(EncryptedDEK);
}
  

La siguiente función accede al servidor 2 para descifrar DEK encriptado:

public string request(string encryptedDEK)
{
    //check the request
    //decrypt the encrypted DEK with KEK
   //return the Decrypted DEK
}

En el proceso anterior , la aplicación toca el servidor de claves . No me gustó que mi aplicación tocara el servidor de claves. Necesito que mi servidor de claves sea muy seguro y también que proteja contra personas malintencionadas.

  

Proceso 2:

Application requests Card number to server 1 --> Server 1 (Encrypted DEK) --> Server 1 sends Encrypted DEK to the Server2 through SQL SERVER 2012 -->Server 2 decrypts DEK and sends it back to the Server 1 --> server 1 responses to the application with the decrypted data
  1. A través del servidor SQL puedo descifrar el DEK cifrado conectándome a el servidor 2 del servidor 1?
  2. ¿Cuál de los dos procesos funciona bien o está incluido en PCI-DSS? normas?
  3. ¿Hay alguna forma mejor que los dos procesos anteriores?
pregunta chandru 26.02.2014 - 09:13
fuente

1 respuesta

2

Si se está utilizando su DEK en el servidor de la aplicación, entonces el KEK no lo cifra realmente, ya que el servidor de la aplicación tiene acceso a él. Puede simplemente lanzar la clave del servidor, ya que cualquier persona con acceso al servidor de aplicaciones, una vez, puede obtener el DEK y listo.

Es mejor usar criptografía asimétrica (KEK) y generar una clave de sesión (DEK) para cada elemento. De esa manera, el servidor de aplicaciones puede cifrar con la clave pública de KEK y un nuevo DEK para cada elemento. El servidor de claves tendrá la clave privada, y la clave privada nunca debe abandonar el servidor de claves.

Para el cifrado, el servidor de aplicaciones no necesita tocar el servidor de claves en absoluto. Puede tener muchos sistemas de front-end encriptados sin problemas.

Por supuesto, para descifrar, debe acceder al servidor de claves. La aplicación envía el blob previamente encriptado y el servidor de claves lo cifra. Sugiero configurar otro par de llaves para cada servidor de aplicaciones y usar ese par de llaves para firmar intentos de descifrado. El servidor de claves puede registrar cada intento de descifrado, por lo que puede avisarse si recibe demasiadas solicitudes de descifrado. Eso es útil para encontrar administradores maliciosos.

También, use una biblioteca como KeyCzar, para que todos los detalles se implementen correctamente. KeyCzar tiene este escenario exacto (sesiones) implementado para ti. KeyCzar también tiene herramientas para ayudar con la administración de claves, que es otra cosa con la que debes lidiar. KeyCzar tiene implementaciones de .NET, C ++, Java y Python.

Finalmente, hable con su auditor de PCI sobre esto. Algunos auditores requieren el uso de un HSM para este escenario; eso es básicamente lo que está configurando con el servidor clave. Algunos proveedores de nube (AWS) alquilan HSM, por lo que puede ser una opción fácil.

    
respondido por el MichaelGG 02.03.2014 - 03:55
fuente

Lea otras preguntas en las etiquetas