Sto sviluppando un servizio che coinvolgerà l'addebito diretto degli account dei clienti su una base di routine (settimanale, mensile, ecc.) e quindi avrò bisogno di memorizzare le loro informazioni (numero BSB / routing e numero di conto) nel mio database Sono molto preoccupato per la sicurezza, quindi il mio primo pensiero è stato quello di non archiviare queste informazioni, ma dopo aver letto molte altre domande su questo argomento, ho trovato una soluzione che penso funzionerà - ma mi piacerebbe eseguirla ti abbiamo passato per assicurarmi di non aver lasciato buchi di sicurezza.
Quando un utente si registra al servizio, creerà una coppia di chiavi pubblica / privata con la chiave privata con una passphrase fornita dall'utente (la password del proprio account). La password viene sottoposta a hash con bcrypt e le chiavi pubbliche e private sono memorizzate insieme all'hash della password nella tabella utente.
Creerò anche una singola coppia di chiavi pubblica / privata di amministrazione che verrà utilizzata quando è necessario elaborare un addebito diretto. La chiave pubblica sarà nota all'applicazione e al database, ma la chiave privata verrà mantenuta fuori dal server, in modo che i dati possano essere scaricati solo quando crittografati e quindi elaborati altrove. Un'alternativa al download quando crittografato sarebbe invece caricare la chiave privata nell'applicazione, decrittografare i dati solo per quella richiesta e quindi eliminare la chiave privata caricata - si tratta di un buco di sicurezza?
Quando un utente si registra per l'addebito diretto, il servizio accetta la chiave pubblica dell'utente e la chiave pubblica dell'amministratore e li crittografa utilizzando Caratteristica di più destinatari di GPG .
Per quanto ne so, questo copre le seguenti situazioni:
- Se l'utente desidera visualizzare i dati, dovrà fornire la propria password per decrittografare le informazioni.
- Se l'utente desidera aggiungere altri dati, non dovrà fornire la propria password poiché io uso solo la sua chiave pubblica.
- Se l'amministratore vuole visualizzare i dati, dovrà scaricare le informazioni e decrittografarle, oppure caricare la propria chiave privata (vedi sopra).
- Se l'utente cambia la sua password, dovrò semplicemente aggiornare la sua chiave privata. Se hanno dimenticato la loro password, l'unico modo per decrittografare i loro dati sarebbe attraverso la chiave privata dell'amministratore, ma dato che questo è tenuto fuori dal sito, i dati dovrebbero essere cancellati.
Ci saranno problemi se la coppia di chiavi di amministrazione dovesse mai essere compromessa (a parte l'ovvio) e dovevo generare una nuova coppia di chiavi di amministrazione e quindi ricodificare tutti i dati memorizzati?
Ci sono dei buchi di sicurezza in questo design? Non sono certo un esperto, ma ho cercato di fare del mio meglio nella ricerca di questo, e ora mi piacerebbe avere qualche input.
Ho anche cercato servizi come Customer Information Manager (CIM) di Authorize.net ma per quanto mi riguarda puoi vedere che devi utilizzare il loro servizio per raccogliere i pagamenti, quando invece abbiamo già stabilito il nostro commerciante per farlo a un tasso più conveniente, e quindi abbiamo solo bisogno di un servizio di archiviazione sicura delle informazioni.
Il servizio utilizzerà HTTPS e funzionerà su Ubuntu 12.04, con PHP e MySQL, se questo aiuta.
Ogni consiglio che puoi dare sarà molto apprezzato!
Grazie