Archiviazione della chiave privata basata su cloud per gli utenti

1

Dire che voglio creare una archiviazione della chiave privata basata sul cloud per gli utenti, che possono utilizzare per firmare documenti .

Sul lato server userei un HSM per rendere più sicuro lo storage delle chiavi.

Un'opzione è che la firma avviene sul lato server. Ma in questo modo il server conosce la chiave privata dell'utente, il che non è quello che vorrei.

Un'altra opzione è quella di avere la chiave privata dell'utente racchiusa in una chiave simmetrica (ad esempio AES ) conosciuta solo dall'utente e memorizzarla su HSM .

Questa chiave AES sarebbe derivata dalla password dell'utente. Esistono meccanismi come PBKDF2 per creare una chiave dalla password.

Quindi, quando l'utente richiede di firmare un documento, il server invierà la chiave privata dell'utente crittografata con la chiave AES nota solo a quell'utente.

Il lato client (che potrebbe essere una app per android , o webapp basata su javascript ) viene utilizzato per creare una firma.

Inoltre, dovrebbe esserci un meccanismo di modifica della password che dovrebbe funzionare in questo modo:

    Il client
  • richiede la sua chiave privata dal server (crittografata dal suo AES chiave)
  • Il client
  • decrittografa la chiave di accesso alla chiave privata AES derivata dalla sua la password
  • Il client
  • genera una nuova chiave usando la sua nuova password
  • Il client
  • crittografa la sua chiave privata con la sua chiave AES e la invia a server
  • Il server
  • aggiorna la chiave privata dell'utente spostato con quella nuova

Non so molto dei moduli HSM , ma come ho capito hanno una funzionalità simile a quella di una smart card (la chiave non potrebbe mai lasciare HSM e tutta la crittografia dovrebbe accadere su di esso).

Ho letto da qualche parte che alcuni HSM consentono l'estrazione delle chiavi quando PKCS # 11 "CKA_EXTRACTABLE" è impostato al momento della generazione di una chiave. Ma, non sarebbe, per la maggior parte, sconfiggere l'unico scopo di HSM .

Inoltre, sarei in grado di implementare il meccanismo per la modifica della password che ho descritto usando un HSM ?

Un'altra opzione potrebbe essere che la firma avvenga su HSM e che le chiavi private siano racchiuse dalla chiave AES , generata dalla password dell'utente. HSM quindi scarta la chiave privata e firma il file, ma la chiave privata non è accessibile al provider cloud.

Sarebbe, in questo caso, possibile implementare il meccanismo di modifica della password che ho descritto?

Inoltre, i meccanismi di derivazione delle chiavi basati su password utilizzano salt per rendere più difficili gli attacchi con tabelle arcobaleno .

Come si userebbe il sale in questo caso? Verrebbe memorizzato sul server e quindi trasferito al client quando si utilizza il servizio?

Il requisito è che l'utente possa utilizzare il servizio su qualsiasi dispositivo (mobile, desktop) solo conoscendo il suo nome utente / password.

Includerei probabilmente 2FA aggiungendo la verifica SMS durante l'autenticazione al server.

    
posta user3362334 05.04.2017 - 11:11
fonte

1 risposta

1

Il tuo schema è praticabile, ma sconfigge completamente il punto di un HSM. Puoi farlo anche con un semplice archivio di database.

Il punto di un HSM (che in realtà non è molto più di una smartcard enorme e molto veloce) è che puoi immagazzinare in modo sicuro materiale (privato) chiave senza che nessuno, incluso l'amministratore, sia in grado di estrarlo.

    
risposta data 05.04.2017 - 12:05
fonte