Gestione delle chiavi di crittografia PCI

22

(Full disclosure: sono già un partecipante attivo qui e su StackOverflow, ma per ragioni che dovrebbero, si spera, essere ovvio, ho scelto di porre questa particolare domanda in modo anonimo).

Attualmente lavoro per un piccolo negozio di software che produce software venduto commercialmente per gestire aziende di piccole e medie dimensioni in un paio di industrie abbastanza specializzate. Poiché queste industrie sono rivolte al cliente, gran parte del software è correlata alla memorizzazione e alla gestione delle informazioni dei clienti. In particolare, l'archiviazione (e la messa in sicurezza) delle informazioni sulla carta di credito del cliente. Con ciò, ovviamente, arriva la conformità PCI.

Per farla breve, mi rimangono un paio di domande sul perché certe cose sono state fatte come erano, e sfortunatamente sono senza molte risorse al momento. Questo è un piccolo negozio molto (riporto direttamente al proprietario, così come l'unico altro impiegato a tempo pieno) e il proprietario non ha una risposta a queste domande, e lo sviluppatore precedente è ... err ... non disponibile.

Problema 1: ricodifica periodica

A partire da ora, il software richiede all'utente di eseguire una nuova crittografia di tutte le informazioni sensibili nel database (in pratica numeri di carta di credito e password utente) se una di queste condizioni è vera:

  1. Nel database sono presenti informazioni non crittografate di informazioni sensibili (aggiunte tramite un'istruzione di database manuale anziché tramite l'oggetto business, ad esempio). Questo non dovrebbe accadere durante l'uso normale del software.

  2. La chiave attuale è stata utilizzata per più di un determinato periodo di tempo. Credo che siano 12 mesi, ma non ne sono certo. Il punto qui è che la chiave "scade".

Questa è la mia prima incursione nello sviluppo di soluzioni commerciali che si occupa di PCI, quindi sono sfortunatamente maleducato sulle pratiche coinvolte. C'è qualche aspetto della conformità PCI che impone (o anche solo raccomanda strongmente) l'aggiornamento periodico dei tasti?

Questo non è un grosso problema per me se non al momento non ho una buona spiegazione da dare agli utenti finali se chiedono il motivo per cui gli viene richiesto di eseguirlo.

Domanda 1: il concetto di standard di scadenza chiave e, in tal caso, è semplicemente lo standard del settore o un elemento di PCI?

Problema 2: archiviazione chiavi

Ecco il mio vero problema ... la chiave di crittografia è memorizzata nel database , semplicemente offuscata. La chiave viene riempita a sinistra ea destra con pochi byte inutili e alcuni bit vengono ruotati, ma fondamentalmente non c'è nulla che impedisca a una persona intraprendente di esaminare il nostro codice (puntinato), determinando il modello utilizzato per trasformare la chiave memorizzata nella chiave reale, quindi usando quella chiave per eseguire amok. Mi sembra una pratica orribile, ma voglio assicurarmi che questa non sia solo una di quelle pratiche "sorridenti e tolleranti" che le persone in questo settore hanno intrapreso. Ho sviluppato un approccio alternativo che impedirebbe un tale attacco, ma sto solo cercando un controllo di sanità mentale qui.

Domanda 2: questo metodo di memorizzazione delle chiavi è la memorizzazione della chiave nel database utilizzando un metodo di offuscamento esistente nel codice client: normale o pazzesco?

Credimi, so che il consiglio gratuito vale ogni centesimo che ho pagato per questo, nessuno qui è un avvocato (o almeno non offre consulenza legale), caveat emptor, ecc. ecc., ma io Sto cercando qualsiasi input che tutti voi possiate fornire. Grazie in anticipo!

    
posta Unicorn Bob 01.01.2011 - 00:11
fonte

5 risposte

9

Problema 1: menzioni la crittografia della password. In primo luogo, perché vengono utilizzate le password anziché gli hash salati delle password? Per quanto riguarda la rotazione / scadenza delle chiavi, ho visto (e programmato per) politiche del genere. Più a lungo una chiave è in uso (e più volte viene usata) maggiore è il rischio che possa essere compreso / scoperto. Alcuni sistemi, ad esempio Windows DPAPI, scadono automaticamente le chiavi, i certificati SSL hanno scadenze dopo le quali molti sistemi non li useranno per crittografare nuovi dati e così via.

Problema 2: Sì, è male. Incredibilmente male.

Conformità PCI specifiche di controllo per lo stato PAN "Crittografia strong, come Triple-DES 128 -bit o AES 256-bit, con processi e procedure di gestione delle chiavi associati "

La rotazione potrebbe essere considerata parte del processo di gestione delle chiavi e l'archiviazione sicura della chiave lontano dai dati è sicuramente parte integrante del processo di gestione delle chiavi.

La sezione 3.6.4 delle specifiche di controllo va oltre e dichiara

Periodic key changes

  • As deemed necessary and recommended by the associated application (for example, re-keying);
  • preferably automatically At least annually
    
risposta data 01.01.2011 - 19:56
fonte
7

Se non lo hai già, ti consiglio di consultare i documenti PA-DSS e PCI-DSS , dato che hanno un sacco di informazioni. per quanto riguarda i requisiti. Se il tuo software è certificato per PA-DSS, suppongo che avrai un QSA che dovrebbe avere informazioni più specifiche sulle aspettative per il superamento di tali requisiti.

Per quanto riguarda la gestione della crittografia dei dati, se è possibile, raccomanderei l'uso di funzioni integrate da qualsiasi motore di database che si sta utilizzando per ottenere la crittografia a livello di applicazione. il diritto può essere molto difficile. C'è una buona carta sulle opzioni qui .

    
risposta data 01.01.2011 - 20:12
fonte
7

Problema 1: ricodifica periodica
(Noto anche come re-keying). Sì, è normale, anche se non richiesto.
In particolare, le chiavi scadenti sono necessarie e richieste da PCI. Almeno una volta all'anno, con l'opzione di farlo prima.
Il modo in cui lo gestisci è un'altra questione ... Ad esempio, una volta scaduta la chiave per il 2010, che cosa fai con tutti i dati che sono stati crittografati con quella chiave?

Una soluzione è quella di memorizzare una cronologia di tutte le chiavi e una "versione chiave" per ogni pezzo di dati in modo che quando decodifichi, saprai quale chiave usare. (Ovviamente si cripta usando solo la nuova chiave.) Un'altra soluzione è la suddetta rekeying - solo avere un singolo in ogni punto (eccetto durante la rekeying ...) e quando scade, decifrare con la vecchia chiave e re-crittografare con la nuova uno.

Numero 2: archiviazione chiave
Molto semplicemente, è cattivo e rende la crittografia (non del tutto, ma quasi) inutile.
Le corrette tecniche di gestione delle chiavi in generale e PCI in particolare definiscono una politica e procedure di gestione delle chiavi rigorose. Alcuni di questi sono tecnici: ad es. la chiave di crittografia (EK) deve essere crittografata utilizzando la crittografia avanzata, ad es. DPAPI; alcuni di essi sono procedurali: per esempio, l'accesso alla chiave di cifratura della chiave (KEK) deve essere documentato; parte di esso è manuale: ad es. conoscenza divisa / doppio controllo di KEK.

Come ha detto @Rory, parla con il tuo PA QSA e, se non ne hai uno, prendine uno.

    
risposta data 01.01.2011 - 23:32
fonte
3

Sono più interessato alla seconda domanda. Ho faticato un po 'a capire i motivi per cui la chiave di crittografia è stata archiviata così vicino ai dati crittografati, anche se la si archivia crittografata con una chiave di crittografia chiave.

L'unica ragione per cui posso pensare è l'utilizzo dell'infrastruttura / capacità di crittografia del database per l'esecuzione di crittografia / decrittografia trasparente. Tuttavia, questo è altamente specifico del database (come indicato in un documento collegato anche da un post precedente).

Consiglierei di tenere le chiavi in una memoria diversa, protetta da password o con un dispositivo HSM.

    
risposta data 04.03.2011 - 10:53
fonte
1

Problema 1: Sono sbalordito che è solo dopo 12 mesi. I nostri server richiedono nuove chiavi / password ogni 3 mesi. Nulla di carta di credito, ma ancora. Immagino che sia una pratica ragionevole, anche se non posso dire con certezza che sia compatibile con PCI, ma se non lo è, dovrebbe essere.

Problema 2: mi sembra molto sano. Non avrei mai archiviato una chiave, nemmeno offuscata, proprio accanto ai dati. Questa è solo una sfida aperta: "Per favore, prova a hackerarmi".

    
risposta data 01.01.2011 - 16:18
fonte

Leggi altre domande sui tag