Please Note: I'm aware that the proper method for secure password storage hashing is either scrypt or bcrypt. This question isn't for implementation in actual software, it's for my own understanding.
- How to securely hash passwords?
- HMAC - Why not HMAC for password storage?
- How to apply a pepper correctly to bcrypt?
As far as I know, the recommended/approved method for storing password verifiers is to store:
$verifier = $salt + hash( $salt + $password )
hash() is a cryptographic hashing algorithm
$salt is a a random, evenly distributed, high entropy value
$password is the password entered by the user
Some people advice to add a secret key into the mix (sometimes called 'pepper'). Where the pepper is a secret, high entropy, system-specific constant.
The rationale seems to be that the it even if the attacker gets hold of the password verifiers, there is a good chance he or she does not know the pepper value. So mounting a successful attack becomes harder.
So, my question is:
Does adding a pepper value in addition to a salt when hashing passwords increase the overall security?
Or is the perceived increased security based on false assumptions?
I know the purpose of the $salt (I wrote quite a long answer on stackoverflow about it) the additional $pepper key is not improving upon what the salt does.
The question is, does the $pepper add any security other than what the salt does.