3

我看过许多关于使用盐和哈希创建可以存储在数据库中的安全版本的密码的帖子。

但是,一个问题让我感到困惑,我看不出有什么问题,所以我想我会在这里发布这个问题,看看其他人是否能指出这个想法中的任何缺陷。

我的基本想法是生成一个公钥/私钥对,然后销毁私钥。我对公钥/私钥密码学的有限理解是,如果我没有私钥,那么解密用公钥加密的消息“在数学上是不可能的”。

我会使用公钥加密密码,然后将加密版本存储在数据库中。当有人尝试登录时,我只需使用公钥加密密码并查看它是否与存储的密码匹配?

这个想法有什么可怕的缺陷吗?盐和哈希会更安全吗?

4

2 回答 2

1

这种方法的问题在于,与散列函数不同,加密函数的输出通常是不确定的:您可以使用相同的公钥对相同的有效负载进行两次加密,而加密算法每次都会产生完全不同的密文。例如,RSA 加密将随机填充合并到输入中以防御某些类别的攻击。

相比之下,加密哈希的输出是确定性的,这解释了在需要此属性的密码存储等问题中的使用。

于 2011-07-29T12:41:09.467 回答
0

您已经有效地描述了哈希部分 - 考虑两个人共享相同密码的情况 - 使用您的基本方法,存储的值将是相同的。因此,如果您发现散列算法和字典攻击它,您可以生成一个密码 -> 散列值表,并立即为每个人查找可能的密码。

毕竟,如果黑客得到了你的桌子,他们也可能得到了你的代码......

于 2011-07-29T12:16:27.253 回答