Es posible derivar de forma segura contraseñas específicas del sitio de una contraseña maestra. Requiere, a saber, una función unidireccional determinista : "determinista" para que la contraseña del sitio pueda volver a calcularse, "unidireccional" para que no sea posible volver a calcular la contraseña maestra de un sitio - Contraseña específica. Como aproximación de primer orden, una función hash criptográfica hace el truco.
El sistema puede mejorarse haciendo que la derivación de la contraseña (de maestro a específica del sitio) sea configurable lenta , para evitar un ataque de diccionario eficiente (un sitio malvado podría "probar" posibles contraseñas maestras, para mira si consigue el que usaste). Un "hash lento" es un hash con muchas iteraciones. También puede agregar un salt : un dato que no es secreto, pero que se elige aleatoriamente para que dos usuarios distintos de su software de contraseña de maestro a sitio no terminen con el mismo sitio contraseña si pasan a utilizar la contraseña maestra. Las sales se pueden almacenar en un archivo (no son secretas), pero esto evitará que reconstruya todas las contraseñas específicas de su sitio basándose solo en el conocimiento de la contraseña maestra (es decir, en el problema de recordar . están agregando el problema de copia de seguridad de datos ).
Esto es muy similar a la cuestión de almacenar hashes de contraseña del lado del servidor (para los que las soluciones habituales son bcrypt y PBKDF2 ). El problema se hace más fácil porque la contraseña maestra es "maestra". Ya que debe recordar solo una contraseña una , también puede convertirla en una contraseña grande, grande, aleatoria y de alta entropía. Genera una secuencia de 17 letras minúsculas al azar, aprende y estarás bien (porque 26 17 es aproximadamente 2 80 e invoca 2 80 veces una función hash está más allá de lo que es posible con la tecnología actual). Una contraseña con letras en minúsculas es fácil de escribir, especialmente en los teléfonos inteligentes.
Otros han dado indicaciones al software existente que hace precisamente eso.
Su idea de usar una clave RSA y contraseñas aleatorias cifradas también funciona. Sin embargo, significa almacenamiento . Si está de viaje y alguien le roba su computadora portátil (un evento desafortunado, pero desgraciadamente no es totalmente inverosímil), no solo está privado de su máquina, sino que también perdió sus contraseñas, hasta que compra una máquina nueva y recuperar su copia de seguridad del archivo cifrado lleno de contraseñas. Esto puede ser un inconveniente. Derivar las contraseñas de forma determinista a partir de la contraseña maestra significa que no las perderá mientras recuerde la contraseña maestra.
Además, cualquier nueva contraseña (para un sitio nuevo) requiere que el archivo y sus copias de seguridad tengan problemas, de nuevo, algo que puede ser difícil durante el viaje.
El uso de un almacenamiento intermedio permite la renovación de la contraseña, pero ¿por qué haría eso de todos modos? La renovación de la contraseña es útil cuando administra una gran organización con cientos de contraseñas y asume que algunas contraseñas serán débiles y otras se romperán. Es una forma de contener el daño y tiene sentido solo si hay una proporción no cero de contraseñas rotas en todo momento. Renovación de contraseña es una cosa del ejército de campo. No se reduce de tamaño : cuando desciende a una única contraseña maestra (su caso), esa contraseña no está completamente dañada o está completamente quebrada. En el primer caso, no es necesario renovar la contraseña maestra; en el último, tiene problemas más urgentes con los que lidiar, incluido el cambio de todas sus contraseñas específicas del sitio.
Para decirlo brevemente: si su contraseña maestra necesita renovación, entonces se rompió; lo que significa que todas las contraseñas de tu sitio son tostadas. Por lo tanto, la renovación de la contraseña maestra sin cambiar las contraseñas del sitio es inútil.