Memorizzazione di chiavi private generate su server con password utente specifica in modo sicuro

1

Attualmente sto costruendo un sistema (PHP Web Application Framework) che crea una coppia di chiavi RSA per un utente che consente ad altri utenti di inviare informazioni sicure da una all'altra. La chiave pubblica non è crittografata (come previsto) e la chiave privata è crittografata con la password dell'utente. Poiché il processo di generazione iniziale di RSA è piuttosto dispendioso dal punto di vista computazionale (generazione di primi grandi), sto usando due metodi per creare i primi.

La prima è un'applet java che gira sul browser dei client, crea i numeri primi e le chiavi, fissa la chiave privata con la password e la rimanda al sistema in cui è archiviata e utilizzata in seguito.

Il secondo è di usare un'applicazione (in esecuzione sul server web come cron o su un altro server che può accedere e aggiornare l'app) che farà lo stesso come l'applet. Tuttavia, non sono ancora sicuro su come proteggere la chiave privata in modo che sia accessibile solo all'utente e non possa essere accessibile da nessun altro.

Purtroppo, questo è il punto in cui vado a sbattere contro un blocco stradale. Non sono sicuro di come proteggere i dati (generati sul server web o da un altro server), quindi (o la password degli utenti) non è direttamente o indirettamente disponibile per gli hacker, anche se hanno accesso all'intero file system e database sul server. Qualcuno ha qualche suggerimento su come qualcosa di simile potrebbe essere raggiunto?

    
posta topherg 05.01.2013 - 04:40
fonte

1 risposta

3

Non sono sicuro di cosa stai cercando di ottenere qui. Se stai cercando di proteggere i dati degli utenti, in modo che solo il destinatario del messaggio possa accedervi, allora una soluzione sarebbe:

  • Genera il certificato sul client, utilizzando l'applet e proteggi la chiave privata utilizzando una password (la password utente o un'altra password)
  • Invia la chiave pubblica al server in modo che sia disponibile quando qualcuno vuole inviare un messaggio crittografato.
  • La chiave privata non dovrebbe lasciare il computer del client. Il problema ovvio qui è che se l'utente utilizza un altro computer per accedere alla tua applicazione, dovrebbe copiare il certificato lì. È possibile risolvere questo problema utilizzando smartcard o token USB e memorizzare lì i certificati. In questo modo, avrai solo bisogno della password del token per accedere alla chiave privata.

Se si dispone anche di una sorta di funzionalità di amministrazione e si dispone di un utente che dovrebbe essere in grado di decrittografare tutto, le cose diventano un po 'più complicate. Potresti avere un certificato di amministrazione e dopo che l'applet ha generato la coppia di chiavi, crittografala utilizzando la chiave pubblica dell'amministratore e invialo al server, dove dovresti memorizzarla in un formato crittografato.

Almeno l'amministratore dovrebbe avere un token USB con il suo certificato, in modo che anche se un utente malintenzionato accede al server, non avrebbe accesso a nessuna delle chiavi private in grado di decodificare i messaggi.

    
risposta data 07.01.2013 - 08:28
fonte

Leggi altre domande sui tag