This paper proposes the concept of honeywords for detecting if a password database has been compromised.
As far as I understand it works like this:
You save n password hashes for each user, one that actually contains the real password and n-1 that contain so called honeywords (false passwords). The correct password hash is stored at a random index between those honeyword hashes.
If now one of these honeywords is used in a login attempt instead of the real password, the server can ban the account, trigger a silent alert or redirect the attacker to a honeypot of some sort. Either way the server will know that the password database has been compromised.
To check if the password is real, the server determines the index of the given password hash and contacts another "secure" server which confirms if this is the correct index for this user (or a honeyword index).
Does this method really add any real life security benefit?
This is the attack scenario from the paper, where honeywords are supposed to help:
Stolen files of password hashes: An adversary is somehow able to steal the files of password hashes, and solve for many passwords using offline brute-force computation. He may more generally be able to steal the password hash files on many systems, or on one system at various times.
In this scenario the attacker obviously already has gained access to the system.
- Would he really need the password data then anyway?
- If he has was able to access the password store, wouldn't he be likely able to access the "secure" index store as well, which identifies the real passwords? Just distributing the authentication over two servers doesn't seem much more secure to me.
- If the compromised system can find out which is the right index, surely the attacker can as well.
Maybe I am missing something in the concept, but wouldn't it be more useful to make sure the passwords are securely hashed and the first layer of security keeps the attacker out in the first place?
Are honeywords worth considering to put them into a real life web application?