Abbiamo un database di codici di ordinamento (numeri a 6 cifre) e numeri di conto (numeri a 8 cifre) che utilizziamo per riconciliare gli account mensili con la tabella dei sostenitori.
Non c'è nulla nei dati ricevuti dalla banca che identifica in modo univoco il sostenitore, oltre al codice di ordinamento e al numero di conto. ... lo so, è fastidioso.
Sebbene questi dati non siano così sensibili come i dati delle carte (e non soggetto a PCI-DSS ), è ancora abbastanza sensibile e mi piacerebbe trovare un altro modo per fare la riconciliazione per ridurre la responsabilità di avere tutti questi dati.
La combinazione di codice di ordinamento e numero di account offre fino a 10 ^ 14 possibilità.
C'è un modo (usando una funzione PHP affidabile e consolidata) per cancellare i dati e archiviare solo l'hash, che mi permetterebbe di prendere un file mensile di -say- 1000 record e abbinarli al dati hash? O non c'è davvero alcun punto e invece concentrarsi su un rafforzamento della sicurezza intorno a questo db?
Il vantaggio di sicurezza che sto cercando è che il database non abbia un elenco pronto all'uso dei dettagli bancari delle persone. I dati dell'estratto conto bancario transazionale possono essere considerati di breve durata (vengono ricevuti crittografati, decrittografati, elaborati, cancellati).
Ho letto un utile confronto dettagliato delle funzioni di hashing ma ovviamente qui non stiamo parlando di password , e in effetti dobbiamo essere in grado di craccarli ogni mese! Hmmm.
MODIFICA: conclusione
Grazie alle risposte qui sotto, ecco cosa intendo fare:
Set-up
- Crea una mappa per i codici di ordinamento e i numeri di account per gli ID casuali
- Sostituisci i dati reali con i dati mappati.
- Cripta questa mappa usando PHP MCRypt AES 256 con una chiave fornita dall'utente mai memorizzata sul server
- Archivia la mappa crittografata sul server.
Ora: puoi prendere il database, non ottieni i dati o qualsiasi altro modo per decrittografarlo con la forza bruta, grazie alla mappa casuale.
Puoi anche prendere la mappa e capire come funziona (non fare affidamento sull'oscurità), ma devi comunque essere in grado di decifrare la crittografia per ottenere l'accesso alla mappa. Questo sembra un adeguato livello di rischio.
La riconciliazione
- Decifra il contenuto PGP dal banco localmente.
- Su SSL, carica le transazioni del mese e fornisci anche la chiave di decrittografia.
- Il server decrittografa la mappa, la applica ai dati caricati, memorizza i dati mappati per l'elaborazione successiva, elimina il file caricato non elaborato.
- L'utente elimina localmente i dati bancari decrittografati.
Questo significa che la mappa chiave e decrittografata si trovano solo nella RAM. Le transazioni del mese sono temporaneamente archiviate su disco, ma questo è un livello accettabile di rischio IMO (potrebbe usare un metodo di cancellazione sicuro come il bleachbit ecc.).
L'aggiornamento della chiave è semplice come fornire chiavi esistenti e nuove, decrittografare la mappa, crittografare la mappa, archiviare la mappa.
Se c'era la preoccupazione che la mappa decodificata fosse stata compromessa, anche questa potrebbe essere ricostruita, anche se è più difficile in quanto significa aggiornare tutti i dati memorizzati.