gpt4 book ai didi

python - 使用两个不同的盐对密码进行两次散列并将两个散列保存在同一台服务器上是否安全

转载 作者:行者123 更新时间:2023-12-04 02:30:26 25 4
gpt4 key购买 nike

我希望我没有创建重复的问题。我试图寻找已经存在的问题,但我没有找到任何东西。

我已经成功地建立了一个数据库,其中包含用于登录的用户名、salt 和散列密码。为了检查密码,我将生成的哈希值与数据库中的哈希值进行比较,请参见下面的代码。

password_hashed_from_user = res[0][0]
salt = res[0][1]

key_generated = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), base64.b64decode(salt.encode('utf-8')), 100000, dklen=128)
key_encoded = base64.b64encode(key_generated).decode('utf-8')

if key_encoded != password_hashed_from_user:
logging.debug("Password was wrong:\n{}\n{}".format(key_encoded, password_hashed_from_user))
return "Username and/or password incorrect", False

现在的问题是我希望用户能够完全匿名,这意味着我希望用户能够使用生成的 token 进行身份验证,无法追溯到他的帐户.

因此,我需要将 token 存储在一个单独的表中,而不是与具有凭据的表相关联。为了让用户无法作弊,而只是在每次登录时向服务器请求一个新 token (并因此充当新用户),我想根据凭据计算 token 。

所以我想,我可以只使用一个单独的盐并根据密码创建一个新的散列(使用与代码示例中相同的方法)。由于密码本身并未存储在服务器上,因此如果没有用户本身的密码,则无法生成此哈希值。

这样,生成的 token 总是相同的,只要盐没有改变。因此我可以确保特定用户始终被识别为同一用户,同时该用户可以确保我无法追溯他的操作。

背景

背景是我需要创建一个投票环境,人们必须在其中注册并证明自己以防止重复投票,但投票结果以及参与等不应追溯到特定用户.由于这是我研究中的一个项目,我不能只使用现有的框架/库。

现在我的问题:

在同一台服务器上存储相同密码的两个不同哈希值是否安全,或者重复是否可以重新创建实际密码?两种盐将与其中一种哈希一起存储。另一个散列将在一个单独的、不相关的表中。

我总是在那个级别的加密方面遇到一些困难。

最佳答案

Is it safe to store two separate hashes of the same password with different salts on the same server or would the duplication make it feasible to recreate the actual password?

是的,它是安全的。

该声明背后的基本思想是盐将足够的唯一性“注入(inject)”到密码哈希可以使用的过程中,以确保两种不同的盐产生看起来不相关的哈希。一个真实的例子是担心两个不同的用户拥有相同的密码(但不同的盐)——这也不会泄露任何关于密码的信息,这也是引入盐的主要动机之一。

更加密的论点是要么你假设你的散列像一个随机预言机 - 它为唯一输入产生不相关的随机输出 - 在这种情况下,盐的唯一性隐藏了所有输出。或者你使用一个较弱的假设,即你的密码哈希是一个随机提取器,结合了一个伪随机函数(对于基于密码哈希的密码哈希来说并非不合理),密码输入中有 key 。在这种情况下,假设密码未知且足够随机,所有唯一的盐都将映射到与随机输出无法区分的字符串,因此无法产生有关输出的任何信息。

或者你也可以使用 Bellare, Ristenpart and Tessaro's definition对于密码散列安全性,本质上说“破解密码散列与猜测密码一样困难,如果所述散列是好的”。

关于python - 使用两个不同的盐对密码进行两次散列并将两个散列保存在同一台服务器上是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64542796/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com