Sto lavorando su un sistema di autenticazione per un servizio basato su Bitcoin basato sul web. Come parte del servizio, gli utenti eseguono alcune operazioni meno sensibili (principalmente leggendo e inviando vari tipi di informazioni) e alcune operazioni altamente sensibili (controllando i fondi Bitcoin firmando transazioni).
Sto cercando di creare un sistema di autenticazione che:
- È basato su ECDSA e firme digitali
- Consente un facile accesso alle operazioni meno sensibili, memorizzando in modo permanente la chiave nella memoria locale
- Richiede informazioni aggiuntive per operazioni altamente sensibili, che è più difficile per un utente malintenzionato ottenere
Ecco cosa sto pensando di fare attualmente:
Processo di creazione dell'account
- L'utente si registra con due password - password A1 e password A2
- La password A1 viene generata come 12 parole casuali (132 bit)
- La password A2 viene generata come 4 parole casuali (44 bit)
- L'utente è tenuto a annotare (ma non ricordare) la password A1 e ricordare la password A2 (e possibilmente annotare fino a quando non la ricorda, a quel punto dovrebbe distruggere la copia scritta)
- La password A1 viene utilizzata per creare la chiave privata A1 utilizzando
A1_key = Scrypt(A1_password, salt=GLOBAL_SALT||email, N=20, r=8, p=1)
- La chiave A1 e la password A2 vengono utilizzate per creare la chiave privata A2 utilizzando
A2_key = Scrypt(A2_password, salt=H(A1_key), N=10, r=8, p=1)
- Le chiavi pubbliche per A1 e A2 vengono salvate sul server.
Accedi
- L'utente effettua l'accesso utilizzando la sua password A1, che viene utilizzata per ricreare la sua chiave pubblica.
- Il browser memorizza la chiave A1 nella memoria locale, quindi all'utente non è richiesto di reinserirla, a meno che non acceda da una nuova macchina o cancelli la sua memoria locale
- Il tasto A1 consente di autorizzare le azioni meno sensibili
Azioni sensibili
- Esegui azioni sensibili, all'utente viene richiesto di inserire la password A2
- La password A2 viene utilizzata per derivare il tasto A2 e firmare digitalmente l'operazione
- Il tasto A2 viene rimosso dalla memoria immediatamente dopo essere stato utilizzato e non viene mai ricordato dal browser
Con quel sistema in atto, sono necessarie entrambe le password A1 e A2 per le operazioni altamente sensibili. Un utente malintenzionato che ottiene l'accesso al computer dell'utente avrà solo accesso alla chiave A1: l'accesso a A2 richiede un attacco attivo mentre viene fornita la password A2.
Le mie domande
- Come ti senti riguardo alle proprietà di sicurezza di tale sistema? Vede eventuali aspetti negativi o vulnerabilità che mi mancano?
- Pensi che la seccatura di richiedere agli utenti di gestire due password valga la pena?
- Vedi qualche modo per migliorare il mio schema suggerito?