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
- A través del servidor SQL puedo descifrar el DEK cifrado conectándome a el servidor 2 del servidor 1?
- ¿Cuál de los dos procesos funciona bien o está incluido en PCI-DSS? normas?
- ¿Hay alguna forma mejor que los dos procesos anteriores?