Como otros han explicado el problema de la entropía de la contraseña en detalle, abordaré su otra preocupación:
Pero también recuerdo un programa de Windows que solía descifrar las contraseñas de Windows al encontrar palabras en el diccionario dentro de la contraseña más grande.
Es cierto que, suponiendo que un atacante tenga acceso a una computadora que ha usado, algunos programas pueden escanear el almacenamiento persistente en busca de candidatos con una buena contraseña. Esto es posible no solo en el caso de contraseñas escritas, sino que también existe la posibilidad de que una contraseña una vez presente en la memoria de la computadora (justo después de escribirla, por ejemplo) termina en la memoria virtual, archivos de intercambio, volcados de memoria, etc.
El único programa de este tipo que conozco, Forensic Toolkit de AccessData , busca en el disco duro "cada cadena de caracteres imprimible", como se describe en esta publicación de Bruce Schneier . En principio, no hace que las contraseñas que contienen palabras del diccionario sean más débiles (ya que todas las contraseñas consistirán en "caracteres imprimibles"), sin embargo, la forma en que el programa clasifica esta cadena de caracteres antes de alimentarse a un password adivinador puede tener un impacto en la probabilidad de que se encuentre. Citando el post:
Al atacar programas con retardos deliberadamente lentos, es importante hacer que cada suposición cuente. Un simple ataque minúsculo minúsculo de seis caracteres, "aaaaaa" hasta "zzzzzz", tiene más de 308 millones de combinaciones. Y generalmente es improductivo, porque el programa pasa la mayor parte de su tiempo probando contraseñas improbables como "pqzrwj".
En otras palabras, tener un gran conjunto de cadenas no necesariamente te ayudará, incluso si una de ellas es la contraseña que estás buscando, ya que no tienes manera de reconocer como una contraseña antes de probarla (contra un hash o un servicio en línea). Pero si ordena este conjunto de acuerdo con algunas heurísticas que dictan "qué tan probable es que esta cadena sea una contraseña", entonces incluir palabras en el diccionario podría acercarse a la parte superior de la lista de prioridades, aumentando la probabilidad de que se encuentre de manera oportuna .
Es por eso que abogo por el uso de las primeras letras de cada palabra en una frase, en lugar de usar las palabras mismas. Claro, necesitarías una frase más larga para lograr un nivel similar de entropía, pero terminarás produciendo una contraseña que "parece" basura, en lugar de una que parece prometedora. Pero YMMV.