2014-04-21 19 views
9

Ho la necessità di memorizzare chiavi private per più utenti, in modo che la mia applicazione server possa firmare i file per loro conto.Memorizzazione di chiavi private nel database

Desidero memorizzare le chiavi private in modo sicuro, ma non sono riuscito a trovare le migliori pratiche in merito. Se stavo memorizzando una password, salverei + hash la password per creare un hash che non può essere facilmente reinserito nella password. Tuttavia, con una chiave privata ho bisogno di memorizzarlo in un modo che posso recuperare in seguito.

Stavo pensando di crittografare la chiave privata e quindi memorizzarla nel mio database. Inizialmente pensavo che ogni chiave sarebbe stata crittografata con una password diversa (basata su alcune proprietà dell'utente). Tuttavia, tali proprietà verrebbero probabilmente archiviate nel database, quindi se il mio database è trapelato, l'hacker ha tutto.

È possibile crittografare tutte le chiavi private con una sola password che è nota solo alla mia applicazione. Quindi un utente malintenzionato dovrebbe rubare il mio database e la mia richiesta di fare del male.

Esiste una tecnica/procedura ottimale che mi manca?

risposta

9

È possibile crittografare la chiave privata con una chiave simmetrica basata sulla password dell'utente. È sufficiente memorizzare un ulteriore sale ed eseguire la password "hash" per ottenere una chiave separata. Quindi utilizzalo come chiave per crittografare la chiave privata. Si noti che per creare un hash password sicuro, viene utilizzata una chiave basata su password chiave Derivation Function (PBKDF) come PBKDF2, bcrypt o scrypt.

Se l'utente non è online nel momento in cui deve essere generata una firma, è necessario proteggere le password in un modo che solo il nostro backoffice può decodificare le chiavi. È possibile utilizzare un ID utente + la propria chiave segreta per calcolare una chiave di crittografia/decrittografia. Potresti anche voler generare una coppia di chiavi RSA separata per eseguire la decrittografia della crittografia (utilizzando la crittografia ibrida).

Memorizzare chiavi private per conto degli utenti è una cosa molto pericolosa da fare. Esistono molti modi per perdere i dati o per rendere visibile la chiave privata (ad esempio attacchi ai canali laterali). Per farlo professionalmente dovresti davvero usare un HSM da qualche parte nel processo. Se questo è per qualsiasi dato serio, si prega di consultare un professionista e un avvocato.

Problemi correlati