Come decifrare il DEK crittografato usando KEK che sono separati nei server?

4

Decrittografia del DEK usando KEK in standard PCI, che sono separati dai server:

Diciamo per esempio che abbiamo server1 e server2

Server1:

  • È negli Stati Uniti orientali, chiamato server delle applicazioni.
  • Ha ospitato il mio sito web e il mio database.
  • Nel mio codice sto usando la crittografia AES a 256 bit.
  • Archivia i dati dei titolari di carta crittografati nel DB.
  • Questo server contiene DEK crittografato (chiave di crittografia dei dati).

Server2:

  • È in WestUS, chiamato Key Server.
  • Contiene solo la chiave di crittografia chiave (KEK) per decrittografare il DEK.
  • Tutte le porte sono bocked accettano solo la richiesta dal server1.

Ho due processi nella mia mente per l'implementazione. Ma è appena diventato confuso quale potrebbe essere un modo migliore:

Process 1:

Il codice sottostante è in esecuzione in server1 :

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);
}

The below function access the server 2 for decrypting encrypted DEK:

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

Nel processo precedente , l'applicazione tocca il server delle chiavi . Non mi piaceva che la mia applicazione toccasse il server delle chiavi. Ho bisogno che il mio server delle chiavi sia molto sicuro e protegga anche da persone malevole.

Process 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. Tramite sql server posso decifrare il DEK crittografato collegandoti a il Server 2 dal Server 1?
  2. Quale tra i due processi funziona correttamente o rientra in PCI-DSS norme?
  3. Esiste un modo migliore rispetto ai due processi precedenti?
posta chandru 26.02.2014 - 09:13
fonte

1 risposta

2

Se il tuo DEK viene utilizzato sul server delle applicazioni, allora non è realmente crittografato da KEK, poiché il server dell'app ha accesso ad esso. Puoi semplicemente lanciare il server delle chiavi, dato che chiunque abbia accesso al server delle app, una volta, può ottenere il DEK e il gioco è fatto.

È meglio utilizzare la crittografia asimmetrica (KEK) e generare una chiave di sessione (DEK) per ciascun elemento. In questo modo, il server dell'app può crittografare con la chiave pubblica di KEK e un nuovo DEK per ciascun elemento. Il server delle chiavi avrà la chiave privata e la chiave privata non deve mai lasciare il server delle chiavi.

Per la crittografia, il server delle app non deve assolutamente toccare il server delle chiavi. Puoi avere molti sistemi front-end che crittografano senza problemi.

Ovviamente per decifrare, è necessario accedere al server delle chiavi. L'app invia il blob crittografato in precedenza e il server delle chiavi lo crittografa. Suggerisco di configurare un'altra coppia di chiavi per ogni server dell'app e di utilizzare quella coppia di chiavi per firmare i tentativi di decrittografia. Il server delle chiavi può registrare ogni tentativo di decrittografia, pertanto è possibile mettere in allarme se si ottengono troppe richieste di decrittografia. È utile per trovare amministratori malintenzionati.

Inoltre, utilizza una libreria come KeyCzar, in modo che tutti i dettagli siano implementati correttamente. KeyCzar ha questo scenario esatto (sessioni) implementato per te. KeyCzar ha anche strumenti per aiutare con la gestione delle chiavi, che è un'altra cosa che devi affrontare. KeyCzar ha implementazioni .NET, C ++, Java e Python.

Infine, per favore parla con il tuo auditor PCI di questo. Alcuni revisori richiedono l'uso di un HSM per questo scenario: questo è in pratica ciò che si sta configurando con il server delle chiavi. Alcuni fornitori di cloud (AWS) noleggiano HSM, quindi potrebbe essere un'opzione facile.

    
risposta data 02.03.2014 - 03:55
fonte

Leggi altre domande sui tag