Consideré escribir un programa para hacer lo anterior en sitios web que solo pretendo usar para uso a corto plazo.
Sí, hay una muy buena razón, se llama KeePass . Es una aplicación de gestión de contraseñas gratuita y de código abierto. Puede generar automáticamente una contraseña sólida, emparejarla con cierto sitio web y almacenarla en una base de datos cifrada de forma segura para la cual tiene la clave en forma de una contraseña maestra.
Aparte de con fines de aprendizaje, no juegue a un profesional de criptografía y escriba sus propios programas relacionados con la seguridad.
Hay varias buenas razones para no hacerlo:
Una sola instancia de SHA-1 es demasiado rápida; al derivar elementos de contraseñas, debe aplicar hashing de contraseñas . La sal es algo bueno, pero es solo una parte de la ecuación.
Los algoritmos criptográficos no deben improvisarse; Hay muchas maneras de arruinarlo. Reutilice un algoritmo de hashing de contraseña que se haya publicado y analizado y que haya resistido los ataques durante algunos años.
Si desea cambiar su contraseña maestra, pierde todas las contraseñas de su sitio. Si desea cambiar una contraseña de sitio, debe cambiar su contraseña maestra. Esto es inadecuado. Para eso, necesitas una capa de indirección; por ejemplo, la contraseña maestra se usa para cifrar una base de datos local de contraseñas almacenadas por sitio (y estas contraseñas por sitio pueden ser completamente aleatorias, o elegidas por el sitio, o lo que sea). Esto es más criptográfico, así que de nuevo no hagas esto en casa.
Si el webmaster de cualquier sitio que visita conoce el algoritmo anterior, es posible que ellos organicen un ataque de fuerza bruta en su contraseña maestra desde la contraseña generada. Por lo tanto, para que este sea un esquema viable, la contraseña maestra probablemente tendría que ser una larga cadena de aleatoriedad (lo que probablemente anularía el propósito del esquema), o el dispositivo que genera las contraseñas tendría que tener una clave aleatoria larga que estaba desbloqueada por la contraseña maestra.
No está claro cómo encaja la "sal" en esto. Si es aleatorio, ¿cómo sabes qué sal usar en un sitio en particular? Si no lo es (es decir, es un secreto fijo), ¿en qué se diferencia de la contraseña maestra en la naturaleza?
Si tiene sal aleatoria y la está almacenando en el dispositivo de generación, también podría generar la contraseña completa al azar y almacenarla protegida en el dispositivo (como Keepass et al). En la práctica, esto tiene la ventaja de tener un registro de todos los nombres de sitios para los que tiene claves. Sin eso, se vuelve difícil recordar cuál es el nombre canónico de un sitio. Por ejemplo, va a referirse a este sitio como "IT Security Exchange Exchange", "Security StackExchange", "Security", "security.stackexchange.com", "www.security.stackexchange.com" o "user29349.openidprovider .com "...?
Lea otras preguntas en las etiquetas passwords password-management hash