Dal momento che altri hanno spiegato in dettaglio il problema della entropia della password, parlerò della tua altra preoccupazione:
But I also remember a windows program that used to crack windows passwords by finding dictionary words within the larger password.
È vero che - supponendo che un utente malintenzionato abbia accesso a un computer che hai usato - alcuni programmi possono eseguire la scansione dell'archiviazione persistente alla ricerca di candidati validi per le password. Questo è possibile non solo in caso di password scritte, ma c'è anche la possibilità che una password una volta presente nella memoria del computer (solo dopo essere stato digitato, ad esempio) finisce nella memoria virtuale, scambia file, core dump, ecc.
L'unico programma di questo tipo che conosco, Toolkit Forensic di AccessData , esegue la scansione del disco rigido per "ogni stringa di caratteri stampabili", come descritto in questo post di Bruce Schneier . In linea di principio, non rende le password contenenti parole del dizionario più deboli (dato che le tutte password sono costituite da "caratteri stampabili"), tuttavia il modo in cui il programma ordina questa serie di stringhe prima di alimentare a un indovino della password potrebbe avere un impatto sulla probabilità di essere trovato. Citando il post:
When attacking programs with deliberately slow ramp-ups, it's important to make every guess count. A simple six-character lowercase exhaustive character attack, "aaaaaa" through "zzzzzz," has more than 308 million combinations. And it's generally unproductive, because the program spends most of its time testing improbable passwords like "pqzrwj."
In altre parole, avere un enorme set di stringhe non ti aiuterà necessariamente anche se una di esse è la password che stai cercando, dal momento che non hai modo di riconoscerla come password prima di testarla (contro un hash o un servizio online). Ma se si ordina questo set in base ad alcune euristiche che dettano "quanto sia probabile che questa stringa sia una password", allora includendo parole del dizionario potrebbe spostarlo più vicino alla cima dell'elenco di priorità, aumentando la probabilità che venga trovato in modo tempestivo .
Ecco perché sostengo l'uso delle prime lettere di ogni parola in una frase, invece di usare le parole stesse. Certo, avresti bisogno di una frase più lunga per raggiungere un livello simile di entropia, ma finirai per produrre una password che "sembra" spazzatura, invece di una che sembra promettente. Ma YMMV.