Le estoy dando a cada uno de mis usuarios una billetera Blocktrail única que está protegida por dos claves API (que el servidor conoce) y una frase de contraseña (única para cada billetera).
Quiero que la frase de contraseña de la billetera no esté disponible para nadie, excepto para el usuario que ha iniciado sesión (sesión persistente), para que nadie, ni siquiera los administradores del servidor, puedan mirar la contraseña de la billetera y hacer transacciones desde la billetera.
Ya estoy cifrando las contraseñas de las cuentas de usuario con bcrypt.
Esto es lo que idealmente me gustaría implementar:
- Una frase de contraseña a la que solo un usuario que tiene acceso "tiene acceso". (No directamente, sino a través de su sesión).
- Que la frase de contraseña está disponible para cuando el usuario decide hacer una transacción desde dentro de la interfaz de usuario del cliente (la frase de contraseña es necesaria en para realizar transacciones), pero que el usuario no está obligado a escribir en una segunda contraseña o escriba la contraseña de su cuenta cada vez.
- Que nadie sea capaz de saber cuál es la frase de contraseña para un determinado usuario, no administradores de servidor que buscan en bases de datos / sesiones de servidor, no hackers en el servidor y escribir scripts que pierden la frase de contraseña, no yo mismo.
¿Es esto posible? Supongo que, de alguna manera, tendría que obtener un hash de la contraseña del usuario antes de cifrarla con bcrypt, usarla como frase de contraseña y almacenarla en la sesión, o probablemente en una cookie (¿con seguridad adicional?). Pero, de nuevo, los administradores que se encuentran en el servidor pueden ver lo que está almacenado en cada sesión, recuperar la frase de contraseña y robar los bitcoins, ¿verdad? Y también, creo que almacenar una contraseña con hash del lado del cliente no sería una buena idea.
Soy realmente nuevo en seguridad, por lo que no tengo idea de cuál sería el mejor enfoque para esto. ¿O quizás estoy siendo demasiado paranoico, y debería usar la contraseña cifrada o una cadena aleatoria (almacenada en una base de datos) como frase de contraseña de la billetera? (Teniendo en cuenta que también se requieren dos claves API).
Sólo estoy buscando una pista en la dirección correcta, ya que ni siquiera sé si lo que quiero es alcanzable. Gracias.