L'azienda per cui lavoro ha bisogno di un sistema per eseguire addebiti mensili con carta di credito sui conti dei clienti. I clienti saranno in grado di aggiornare i dati della carta di credito da un'interfaccia online scritta in PHP (che sarà presentata tramite HTTP su SSL). Gli addebiti mensili verranno eseguiti manualmente attraverso un'area di amministrazione protetta da password della stessa interfaccia, che sostanzialmente equivale a una chiamata batch all'API Authorize.Net.
I miei colleghi desiderano archiviare le informazioni della carta di credito (crittografate) in un database MySQL. Hanno in programma di crittografare i numeri delle carte di credito con l'estensione mcrypt di PHP , presumibilmente usando Rijndael / AES o Twofish. Il tema della gestione delle chiavi è stato sorvolato, ma sono state citate le seguenti due opzioni:
-
memorizzazione chiavi nel database, con una chiave separata per ogni voce della carta di credito; o
-
memorizzazione di una singola chiave di crittografia per tutte le voci della carta di credito in un file PHP come variabile (simile a come le applicazioni PHP come WordPress e MediaWiki memorizzano le credenziali del database).
Come posso convincerli a non seguire questa strada? Useremo Authorize.net per elaborazione dei pagamenti, quindi ho menzionato il loro servizio Customer Information Manager come alternativa all'archiviazione delle informazioni relative alla carta di credito. Tuttavia, non conosco abbastanza bene l'argomento per formulare argomenti convincenti (i miei argomenti erano "nessuno di noi è esperto di sicurezza" e "Non mi sentirei a mio agio con una società che memorizza le informazioni della mia carta di credito in questo modo").
Se non riesco a convincerli a utilizzare un servizio di terze parti come Customer Information Manager , cosa dovrei tenere a mente per mantenere le informazioni sulla carta di credito dei clienti sicuro? In particolare, come devo gestire le chiavi di crittografia? Dovrebbe esserci una chiave di crittografia separata per ogni voce del cliente? Dove posso archiviare le chiavi in modo da poter decifrare i dati della carta di credito prima di inviare le transazioni a Authorize.Net? Le due opzioni sopra menzionate non mi sembrano molto valide (ma, ancora una volta, non conosco abbastanza bene l'argomento per rendere un argomento convincente contro entrambi).
Aggiornamento : ho trovato qualcuno della società che ha familiarità con la conformità PCI DSS, quindi sto lavorando con lui per assicurarmi che tutto funzioni correttamente. Tuttavia, apprezzerei ancora le risposte alle mie domande precedenti (sia per migliorare le mie conoscenze che per aiutare gli altri in una situazione simile).
Aggiornamento 2 : successo! Un altro sviluppatore si è seduto e ha letto le linee guida PCI DSS e ha deciso che è una cattiva idea archiviare le informazioni da soli. Utilizzeremo il servizio Customer Information Manager di Authorize.Net.