2009-07-28 14 views
10

Ho un interessante problema di crittografia. Non so se può essere risolto ma ecco qui:Crittografia DB bidirezionale sicura anche dall'amministratore

Un database deve contenere informazioni utente sensibili. In quanto tale, le informazioni dell'utente devono essere crittografate (crittografia bidirezionale). L'utente ha un login/password e questi possono essere utilizzati nella crittografia a due vie. Ora, la crittografia deve essere progettata in modo tale che anche l'amministratore che visualizza le tabelle del database non dovrebbe essere in grado di dare un senso alle informazioni dell'utente.

Tuttavia, il design deve prendersi cura dei casi in cui l'utente può dimenticare la sua password. Se la password viene utilizzata per la crittografia, dimenticando la password significa che l'informazione è persa - non voluta. Se la password utente è memorizzata nel database utilizzando un algoritmo a due vie (invece di un hash unidirezionale) con una chiave codificata nello script, l'amministratore può scoprire la chiave codificata guardando lo script (l'amministratore ha ovviamente accesso alla sceneggiatura).

Qualcuno conosce una via d'uscita?

PS: questo è un vero problema. La mia azienda è un fanatico della sicurezza assoluta (ISO 27001 e tutti) e mi è stato affidato il compito di progettare un sistema con le funzionalità sopra menzionate. A proposito, sto usando uno script PHP e MySQL.

EDIT: Forse non era chiaro in precedenza, l'utente ha bisogno di vedere/modificare queste informazioni utente su base giornaliera.

+0

Domanda: Quanto deve essere forte la crittografia dei dati? Sarebbe sufficiente l'offuscamento dei dati (il che significa che i dati non sarebbero archiviati come testo in chiaro ma con un piccolo sforzo che le persone potrebbero decrittografarli) o se si desidera uno schema di crittografia * reale * forte? – Nicolas

+0

Real strong encryption: nessuna possibilità di scoprire i dati! –

+1

Bene, se non vuoi che i dati siano decifrabili ma allo stesso tempo necessiti della capacità di mostrare dati decrittografati all'utente ... – Nicolas

risposta

15

Quello che vuoi è un agente di recupero. Criptare tutti i dati due volte: una volta con la chiave utente, una volta con la chiave dell'agente di recupero (pubblico); almeno quest'ultimo deve essere asimmetrico. Mantieni la chiave dell'agente di recupero in una sicurezza pirata, con un protocollo di accesso formale (ad esempio il principio dei quattro occhi). Di solito, l'amministratore non può accedere ai dati crittografati, ma se l'utente perde la chiave e il recupero è autorizzato, viene ottenuta la chiave di ripristino.

Esistono anche modi per crittografare la chiave dell'agente di recupero in modo che gli utenti di m-out-of-n debbano accettare di utilizzarlo.

Modifica: Una strategia di implementazione consiste nel criptare tutto due volte. In alternativa, per ogni set di dati che deve essere recuperabile in modo indipendente, creare una nuova chiave simmetrica e crittografare solo quella chiave due volte; i dati originali vengono crittografati solo con la chiave di sessione.Tale approccio può estendersi a più lettori indipendenti; richiede chiavi asimmetriche per lettore (in modo che è possibile crittografare la chiave di sessione con le chiavi pubbliche di tutti i lettori - una è l'agente di recupero).

Ho copiato la terminologia da Microsoft Encrypting File System, che ha implementato tale schema.

+0

Semplice ed elegante –

+0

Potresti fornire qualche link di riferimento dove posso leggere oltre? –

+0

Inoltre, non codificando tutto due volte significa che l'utente stesso non sarebbe in grado di recuperare/modificare le informazioni dell'utente? –

1

Impossibile eseguire.

In tutti i casi, qualcuno deve essere in grado di ricreare la chiave per decodificarlo. Consideriamo le opzioni:

  1. Chiave memorizzata sul server. Fallisce: l'amministratore ha accesso.
  2. Chiave crittografata con la password dell'utente. Fallisce: l'utente potrebbe dimenticarlo.

La soluzione è di rilassare l'amministratore che dispone di restrizioni di accesso, e invece di impossibile, lo rende solo molto difficile. Ad esempio, se i dati sono stati crittografati con una chiave memorizzata crittografata con la password dell'utente, ma quella chiave è stata affidata a un altro sistema a cui non è possibile accedere nel normale corso degli eventi dall'amministratore (forse solo un altro amministratore ha accesso?) quindi è ancora possibile recuperare da un utente che dimentica la propria password (con l'intervento di chiunque abbia accesso alle chiavi depositate), ma l'amministratore non può semplicemente scaricare il database e leggere tutti i dati.

+0

Ma come funzionano i sistemi estremamente sicuri come le banche, ecc.? Lo chiedo perché credo che qualcun altro avrebbe sicuramente risolto questo problema e le banche sembrano essere un candidato forte. –

+0

Le banche ecc utilizzano i moduli di sicurezza hardware per la loro crittografia –

+3

Sono d'accordo, si tratta di uno scenario Ghostbusters. Separa i Keymaster dai Gatekeeper, le persone che hanno il controllo delle password degli account degli utenti da quelli che controllano i dati dell'utente, e sarai in grado di evitare di avere un cattivo impiegato come un singolo punto di errore. Va bene, perché l'alternativa è l'inversione protonica totale. – zombat