[Descargo de responsabilidad: trabajo para AgileBits , creadores de 1Password , administrador de contraseñas y billetera segura]
Lo que Jonathan Baker-Bates escribió es acertado. Quiero tomar un momento para abordar el tipo de sistema descrito por Richard H. Schwartz.
De vez en cuando se nos pregunta cómo el uso de 1Password para generar contraseñas se compara con algo que no necesita ser almacenado en un dispositivo o respaldado. Existen versiones simples de algoritmos de hashing de contraseñas que no son imposibles de mantener en su cabeza.
Como un ejemplo extremadamente simple, puedes usar una contraseña base de “dogsR4me!” Y luego intercalar las letras del dominio con la contraseña base. Su contraseña para Amazon sería “daomgaszRo4nme!”, Y su contraseña para PayPal sería “dpoagyspRa4lme!”. Parece bastante sencillo, pero, ¿un sistema como este (incluso uno más complejo) resiste el escrutinio?
- Mi único amigo recuerda literalmente todo lo que lee y oye. Tengo una retención de memoria terrible. ¿Cómo puedo ser más como él?
- Cómo olvidar el bullying y las cosas horribles que me pasaron.
- ¿Cómo aumentaré mi poder de memorización?
- ¿Cómo la regla del 50 por ciento hace que la tercera parte de la memoria no esté disponible y no el 50% de la memoria no esté disponible?
- Cómo recordar el significado de las palabras que leí en el diccionario.
Cómo construir sistemas sin bases de datos (aunque no deberías)
La forma correcta de construir el tipo incorrecto de sistema es generar una contraseña para un sitio en particular con
truncar (b64encode (HMAC-SHA256 (contraseña maestra, información del sitio || nombre de usuario)))
La parte “HMAC-SHA256” es lo que hace la seguridad de la cosa. Generará una cadena de bits de apariencia aleatoria a partir de una “contraseña maestra” (que es secreta y que solo usted conoce), así como información sobre el sitio y su nombre de usuario (que no son secretos).
Esa cadena de 256 bits no es adecuada para una contraseña (que es una cadena de texto), por lo que debe convertirse en una cadena de caracteres ASCII. Por lo tanto, utilizamos algo como la codificación Base64, que le proporcionará una cadena de 45 caracteres.
La mayoría de los sistemas no aceptan contraseñas de 45 caracteres de longitud, por lo que necesitarías truncarlas a algo aún más corto en esos casos.
Esta técnica resuelve un par de problemas que las personas suelen pasar por alto cuando intentan diseñar tales sistemas. Pero no los resuelve todos …
Fallo catastrófico en una sola grieta
Si un atacante obtiene una de sus contraseñas (por ejemplo, un sitio no cifra las contraseñas), entonces ese atacante puede ejecutar un intruso de contraseñas en su sistema. Conocen la información del sitio, el nombre de usuario y el esquema de hash. Entonces, solo necesitan ejecutar pruebas automatizadas adivinando su contraseña base para ver si pueden encontrar algo que genere la misma contraseña para el sitio que capturó. Recuerda que pueden ejecutar millones de conjeturas por segundo. Una vez que han descifrado eso, tienen su contraseña básica y pueden reconstruir su contraseña para cada sitio y servicio que use.
Por lo tanto, la captura de una sola contraseña le permite a un atacante ejecutar un ataque fuera de línea en su contraseña base desde donde puede generar cada contraseña que tenga.
Algunas de sus contraseñas no serán permitidas
Algunos sitios tienen varios requisitos de contraseña: algunos no permiten cartas repetidas; otros requieren al menos 12 caracteres; algunos no aceptan más de 10; algunos no aceptan el símbolo “/”, y así sucesivamente. Debido a que este esquema de creación de contraseñas es determinista y no tiene bases de datos, será imposible garantizar que las contraseñas que genera funcionen en todos los sistemas.
Crackability
Una contraseña individual generada de esta manera nunca será crackeada. Pero puede ser expuesto a través de mecanismos que no se agrietan. Luego, la contraseña generada capturada se puede usar para “descifrar” la contraseña maestra, momento en el que se pierde todo.
Hacer que el craqueo sea más difícil al iterar el HMAC es bueno. Usar PBKDF2 en lugar de HMAC es un camino a seguir (bcrypt y scrypt también son alternativas a PBKDF2). Pero dado que cualquier contraseña generada capturada de tal esquema se convierte en una ruta para exponer todo, todavía no podemos recomendar este tipo de esquema.
Con 1Password, el atacante tiene que capturar primero la base de datos antes de poder intentar una grieta fuera de línea. Pero con un esquema sin base de datos, una única contraseña capturada es suficiente para poder iniciar un ataque sin conexión.
Seguridad y conveniencia
El uso de un sistema que usted mismo cree para crear contraseñas es mejor que reutilizarlo. Pero es mejor aún usar la generación de contraseñas verdaderamente aleatorias en todas partes. 1Password está diseñado para que lo más seguro sea lo más fácil de hacer. No solo es mucho más fácil que 1Password genere sus contraseñas para usted, sino que son más seguras. Y cuando necesita iniciar sesión en un sitio, no tiene que escribir sus contraseñas. 1Password los llena por usted con la integración directa del navegador.
Si tiene alguna pregunta o inquietud, por favor hágamelo saber. Incluso (y especialmente) si no terminas usando 1Password. Siempre estamos interesados en saber qué es lo que impide que las personas den el paso.
ACTUALIZACIÓN: Richard H. Schwartz me señaló que tal vez no haya respondido la pregunta. En mi defensa, la pregunta parece poco clara en el mejor de los casos. Había entendido que el autor de la pregunta estaba tratando de encontrar una contraseña única que se usaría en todas partes. Sin embargo, a menos que el autor tenga alguna aclaración adicional, sería prudente agregar algunos consejos sobre la creación de una contraseña maestra. Suponiendo que un administrador de contraseñas es el camino a seguir, tal contraseña tendrá que ser memorable. ¡Gracias por hablar de esto, Richard!
Recordando contraseñas
La cognición humana juega un papel importante en lo que podemos pedir a las personas con sus contraseñas. El número de contraseñas seguras distintas que una persona puede recordar es mucho menor que el número de contraseñas distintas que necesita.
Como mencioné anteriormente, la reutilización de la contraseña es un gran problema de seguridad. En 2013, varias cuentas de Dropbox se vieron comprometidas porque las personas usaron la misma contraseña que usaron para los sitios que sufrieron violaciones. Lo mismo sucedió con Best Buy. No hubo una violación real de Best Buy, pero las contraseñas de los clientes se descubrieron a través de violaciones de otros sitios. Como siempre queremos recordar a las personas, “los amigos no permiten que los amigos reutilicen las contraseñas”.
Disculpas por sonar como un registro roto, pero recomendamos encarecidamente que la gente use un buen sistema de administración de contraseñas , y esa es la razón por la que se creó 1Password. Como dice el investigador de contraseñas, Troy Hunt, “la única contraseña segura es una que no puede recordar”.
Las contraseñas que necesitamos recordar
Pero esto todavía nos deja con una pequeña cantidad de contraseñas que necesitamos recordar. Y porque tanto depende de esto, necesitamos que sean muy fuertes. Lo que la gente no suele reconocer es que no solo necesitamos estas pocas contraseñas seguras para que los humanos normales las puedan recordar, sino que necesitamos que se creen. Si los humanos son malos para recordar cosas al azar, son mucho peores para generar aleatoriedad.
En nuestra publicación del blog “Hacia mejores contraseñas maestras”, vemos que si seleccionamos palabras de forma aleatoria (por ejemplo, tirando los dados) podemos obtener una serie de palabras que podemos recordar y escribir, pero que siguen siendo enormemente difíciles de adivinar. como se explica en nuestro blog de seguimiento.
El crédito original para esto debe ir a Arnold Reinhold. Y después de que Revivió “Hacia mejores contraseñas maestras”, se hizo famoso por Randall Munroe, quien resumió la parte matemática del argumento en un solo cómic: Seguridad de la contraseña.
Consulte “Hacia mejores contraseñas maestras” para saber por qué es crucial que use algún proceso aleatorio que no esté en su cabeza para crearlos. Hemos visto personas que intentan inventar ejemplos de este tipo de contraseñas, y generalmente es fácil saber si se utilizó un proceso aleatorio o no. (Por ejemplo, las personas que intentan encontrar una secuencia aleatoria de palabras casi siempre elegirán nombres concretos).
Espero que eso ayude. Mantente a salvo ahí fuera!