Passwords are secret keys which human beings can memorize. Most of the cryptographic issues on passwords are about how to deal with their low average entropy, which includes measuring it and resisting dictionary attacks (i.e. exhaustive search on plausible passwords) in various situations such as password-based encryption or storage of password verification data.

Dictionary attacks can be offline or online: an online attack implies interacting with a system which knows the password (e.g. the user himself, or a server which authenticates user passwords) for each "guess", while offline attacks are performed by the attacker on his own systems. Online attacks can be thwarted by various measures, such as autolocking after three wrong passwords. Offline attacks are more dangerous. Password authenticated key exchange protocols such as SRP offer inherent protection against offline dictionary attacks.

When offline dictionary attacks are possible, passwords can be somewhat strengthened by processing them through a one-way function with many iterations (thousands or more): this makes password handling more expensive, both for normal users and for attackers; but since attackers "try" many passwords, the extra cost hits them much more. Also, to prevent attack optimization through precomputed tables (in particular rainbow tables), password processing should include a piece of unique data, which is meant to be public but distinct for each password instance. PBKDF2 and bcrypt are two password processing standards which include salts and iterations.

history | show excerpt | excerpt history