2011-07-29 52 views
3

我见过很多关于使用salt和hash来创建可以存储在数据库中的密码的安全版本的文章。安全的网站密码存储

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

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

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

这个想法是否有一些可怕的缺陷?盐和哈希会以某种方式更安全吗?

回答

1

这种方法的问题是,不像散列函数,加密函数的输出是不确定的一般:您可以使用相同的公钥对相同的有效负载进行两次加密,并且每次加密算法都会生成完全不同的密文。例如,RSA加密将随机填充纳入输入以抵御某些类型的攻击。

相比之下,密码散列的输出是确定性的,因此需要在需要该属性的密码存储等问题中使用。

0

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

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

+0

对 - 我现在明白了,所以只要我根据记录中的数据使用salt生成密码,那么这将意味着每个密码都必须单独暴力强制,这不会阻止数据被泄露,但会使这样做非常昂贵。 –