Dò a ciascuno dei miei utenti un portafoglio Blocktrail unico protetto da due chiavi API (che il server conosce) e una passphrase (unica per ciascun portafoglio).
Voglio che la passphrase del wallet non sia disponibile a nessuno tranne all'utente loggato (persistente per la sessione), in modo che nessuno, nemmeno gli amministratori del server, possano guardare la password del wallet e effettuare transazioni dal portafoglio.
Sto già crittografando le password degli account utente con bcrypt.
Questo è quello che vorrei implementare in modo ideale:
- Una passphrase a cui solo un utente che ha effettuato l'accesso "ha accesso". (Non direttamente, ma attraverso la loro sessione).
- Che la passphrase sia disponibile per quando l'utente decide di fare un transazione dall'interfaccia utente del client (la passphrase è necessaria in per effettuare transazioni), ma che l'utente non è tenuto a digitare in una seconda password o digita ogni volta la password del proprio account.
- Che nessuno è in grado di sapere qual è la passphrase per nessuno specifico utente, non amministratori del server che guardano database / sessioni server, non violazione degli hacker nel server e scrivendo script che perdono la passphrase, no me stesso.
Questo è possibile? La mia ipotesi è che dovrei in qualche modo ricavare un hash, forse, della password dell'utente prima di crittografarla con bcrypt, usarla come passphrase e memorizzarla nella sessione, o probabilmente in un cookie (con ulteriore sicurezza?). Ma poi, di nuovo, gli amministratori che arrivano di nascosto, il server può guardare tutto ciò che è memorizzato in ogni sessione, recuperare la passphrase e rubare i bitcoin, giusto? Inoltre, penso che archiviare una parte client con password hash non sarebbe una buona idea.
Sono davvero nuovo per la sicurezza, quindi non ho idea di quale sarebbe l'approccio migliore per questo. O forse sono troppo paranoico e dovrei usare la password briptata o una stringa casuale (memorizzata in un database) come passphrase del portafoglio? (Considerare anche due chiavi API).
Sto solo cercando un suggerimento nella giusta direzione, dal momento che non so nemmeno se quello che voglio è persino realizzabile. Grazie.