LastPass 对客户端 Salt 的使用

信息安全 加密 pbkdf2 最后一次
2021-08-29 00:36:34

LastPass 团队在其常见问题解答中声明如下:

您是否使用加盐哈希登录?

是的,我们首先在客户端使用您的用户名对您的 LastPass 密码进行“加盐”(在您的计算机上,LastPass 永远不会获取您的密码),然后在服务器端我们从数据库中提取第二个 256 位随机十六进制哈希盐,用它来制作一个加盐的哈希,与数据库中存储的内容进行比较。

有谁知道“我们首先在客户端使用您的用户名对您的 LastPass 密码进行 'salt'”这部分是字面意思吗?

根据这个答案,它几乎看起来是这样的:

从这些细节中,我最好的猜测是 LastPass 解密密钥是通过以下方式计算的:

DK = PBKDF2(HMAC-SHA256, password, email, <user set>, 256)

由于这似乎是伪代码,我只能猜测 PBKDF2 的第三个参数是盐。

我意识到正确的做法是通过 PBKDF2 运行电子邮件以使其更适合用作盐。这当然是猫追逐自己尾巴的地方,这可能迫使它们首先将电子邮件用作盐。

1个回答

我会将“我们首先在客户端使用您的用户名对您的 LastPass 密码进行加盐”解释为:我们在客户端执行 PBKDF2 函数,其中包括您的密码和用户名(电子邮件)作为加盐:

client_encryption_key = PBKDF2(HMAC-SHA256, password, salt_email, 5000, 256) // 5000 rounds, 256 bits
auth_key = sha256(client_encryption_key) // this is what is sent to the server for authentication
server_key = PBKDF2(HMAC-SHA256, auth_key, salt_random, 100000, 256) // this is what is stored in the auth db

请注意,客户端密钥也用于加密/解密您的数据。

还要回答 NH 关于电子邮件的评论,因为盐可能不适合:盐通常不被认为是秘密的。它们的目的是确保生成的密钥对于两个相同的密码是不同的。