从密码导出密钥时,我应该存储密钥还是使用密钥进行加密?

时间:2013-12-07 03:01:57

标签: encryption passwords

以下引用让我质疑我认为我知道的事情。

  

“现在考虑bcrypt。它使用Blowfish加密魔术字符串,使用   从密码“派生”的密钥。以后,当用户输入   密码,密钥再次派生,如果密文生成   用该密钥加密匹配存储的密文,用户是   认证。密文存储在“密码”表中,但是   永远不会存储派生密钥。“

我假设您存储了盐渍密码的哈希值。

    Where:
    - KDF = a key derivation function such as pbkdf2 or bcrypt
    - salt = a unique 16 byte salt
    - password = the password the user entered
    - saltedPassword = the password appended to the salt
    - hashedSaltedPassword = KDF(saltedPassword)
    - USER = a database table where usernames and passwords are stored<br

USER.Password = hashedSaltedPassword
USER.PasswordSalt = salt

这是正确的还是我离开了?

1 个答案:

答案 0 :(得分:1)

您的引用基本上描述了如何使用bcrypt(这是key-derivation function)作为盐渍哈希函数的基础。该函数的输入是密码和salt,其输出是哈希值。该哈希值碰巧是通过使用bcrypt派生密钥加密常量字符串而生成的密文,但您并不关心:您只是将其用作哈希值。

是的,你存储盐渍密码的哈希值。