As always we are trying to improve password storage; before just adding new ways of storing our password we need to define what threats we will mitigate by adding in a new way to store our password.
Currently we store passwords with HMAC (using SHA-1), individual salts generated with a PRNG
(RSA X 9.31) function, the HMAC key also generated with the PRNG function.
So, currently each user password is generated as follows
securePassword = CSPRNG Salt + (HMAC-SHA1-256Function(HMAC-KEY, CSPRNG Salt+Plaintext))
So, adding a slow hash, KDF or Bcrypt etc as follows
securePassword =
CSPRNG Salt + PBKDF2 ((HMAC-SHA1-256Function(HMAC-KEY, CSPRNG Salt+Plaintext)))
What does this give us in addition to our existing solution?
All I can say it gives us is:
- Makes brute force more difficult i.e. slows down the brute force by significant factor.
- provides a way to increase the iteration counter for when computation becomes faster.
Does adding this slow hash add any other additional
security measures or prevent any other security threats?
Currently our HMAC key is held in the same database as the password,
I know not ideal, though this is outside my control.
HMAC already helps prevent against brute force so adding in the
slow hash really only provides point two above. Any other thoughts?