Suppose I have a password made of n
alphabetic characters. An attacker is given the hashed password and will attempt a brute force attack on cracking it.
I can envision a naive password cracker trying all combinations starting with AAAA...A
then AAAA...B
then AAAA...C
etc until ZZZZ...Z
. For this attacker, a password that starts with an A
is going to reduce the time to crack by 25 * 26^(n-1)
(compared to starting with a Z
).
Of course, you could first try dictionary words, variations of dictionary words, and a list of the most common passwords... but if the password was random garbage then at some point it will have to iterate over the entire character space. And if you didn't iterate over the space in some well defined way (i.e. random inputs), then you would need a mammoth amount of space to remember which inputs you already attempted (and you would have to check against at each iteration, thus slowing things down).
You could parallelize the inputs so you attempt A...
, B...
, C...
, ..., Z...
at the same time, but at some point you will run out of cores.
How do modern password crackers solve this problem?