Tener contraseñas únicas ingresadas en cada sitio ES más seguro que darle a cada sitio la misma contraseña, exactamente por la razón de compromiso independiente que sugirió.
Si un atacante tiene el hash y sabe que se generó con PwdHash y conoce el dominio para el que se generó, ¿qué tan posible sería para ellos determinar la contraseña original a partir de eso?
Bueno, hagamos un poco de investigación y algunas matemáticas! PwdHash parece estar utilizando efectivamente GoofyStuff (Base64 (HMAC-MD5 ())), por lo que estamos a la velocidad habitual del juego de adivinanzas MD5 (MD5 ()). Por oclHashcat , "PC5 (8x AMD R9 290Xstock core clock)" puede romper ~ 81 mil millones de MD5 por segundo, así que ~ 40 billones de intentos como PwdHash por segundo, lo que nos da los intentos más prácticos de 1E17 (algo más de 2 ^ 56) cada 30 días.
Baso lo anterior en este fragmento de un vistazo rápido a la fuente de la página PwdHash:
var hash = b64_hmac_md5(password, realm);
Esto está en el rango de una búsqueda exhaustiva de espacios de teclas de 62 ^ 9 a 62 ^ 10 en esos 30 días, donde 62 es el espacio de teclas de mayúsculas, minúsculas y números (o mayúsculas, minúsculas y símbolos sobre los números, lo que quieras, y 9 o 10 es la longitud.
Por lo tanto, se encontrará una contraseña numérica mayúscula, minúscula y totalmente aleatoria, codificada con HMAC-MD5 en menos de aproximadamente 30 días (a menos que usted y el atacante estén usando conjuntos de caracteres diferentes (es decir, Cryllic vs. English)). Necesitará algo con un espacio de teclas total mayor que este para su contraseña maestra, ¡y eso es si es una contraseña verdaderamente aleatoria!
Ni siquiera desea pensar qué puede generar un ataque de diccionario basado en reglas a esta velocidad, si su contraseña no es, de hecho, completamente aleatoria. Mi conjunto de listas de palabras más completo tiene más de 40 GB de contraseñas únicas; si asumimos una longitud de palabra promedio de 9 más un separador de LF, eso es 4E9 palabras, lo que significa que si un atacante con esa PC pasó 30 días en su contraseña, podrían probar aproximadamente 2.5E7, es decir, 25 millones de variaciones diferentes ( reglas) para cada contraseña.
Tenga en cuenta que esta lista de palabras es demasiado lenta e incómoda para molestarse con ... a menos que el objetivo pueda ser atacado a velocidades increíbles, como puede hacerlo un solo HMAC-MD5.
Si usas PwdHash con una contraseña maestra, tienes uno realmente bueno: 15 caracteres o mejor, criptográficamente aleatorio, con un gran conjunto de caracteres (superior, inferior, número, símbolos sobre los números, símbolos no sobre los números) .
Otras consideraciones
Debería pensar en cómo cambiará su contraseña maestra después de que se filtre; tal vez se haya levantado tarde y esté tratando de darse prisa y escriba la contraseña maestra en un sitio web directamente en lugar de hacerlo en PwdHash, solo por costumbre, falta de cafeína, prisa y descuido. ¡Ahora necesitas cambiarlo!
Personalmente, me gusta el almacenamiento de contraseñas fuera de línea como KeePass , pero preferiría usar incluso OpenSSL básico que PwdHash, tan patético como insuficiente. , Pondré HMAC-SHA-512 contra HMAC-MD5 cualquier día de la semana.
echo example.com2014 | openssl dgst -sha512 -hmac MyPassword -binary | openssl enc -base64
Como siempre, es mejor usar algo verdaderamente aleatorio y almacenarlo o, si insiste en una rutina de generación determinista, algo realmente, muy lento, especialmente porque esto es solo para usted, por lo tanto PBKDF2 / BCrypt / Scrypt con suficientes iteraciones / factor de trabajo que toma incluso un segundo o dos o cinco en su máquina estaría bien, y ralentizaría a un atacante a un rastreo.
Enchufe desvergonzado: estoy trabajando en la recopilación de una variedad de ejemplos de código PBKDF2 (y, posiblemente, más tarde, BCrypt y Scrypt) en mi Anti-weakpasswords git page , algunos de los cuales se compilan para que pueda ejecutarlos en la línea de comandos de Windows o Linux, y usarlos exactamente de la forma en que usa PwdHash ahora, pero con un mayor número de iteraciones de lo que casi cualquier sitio web podría usar, Si estás dispuesto a esperar un par de segundos. A partir de hoy, solo hay una versión de Python que Mitsuhiko escribió y Warner corrigió para un alto número de iteraciones, que aún no se han actualizado con mejores hashes, pero eso mejorará.