2009-08-22 38 views
1

我有客户端使用的WCF服务,下面是我当前的用户认证实现,我想要一个建议来增强它或更好的机制。使用RSACryptoServiceProvider类将加密密码插入数据库?

  • 我使用的RSACryptoServiceProvider 类(RSA实现)加密用户密码保存到数据库

  • 客户应加密密码的每个登录使用公共密钥(存储在文件中),并将其发送到测井方法与用户名

  • 在服务器端的登录方法 选择用于 提供的用户名的加密密码和解密的比较密码(由用户和db一个发送)使用私有密钥

    注:每次加密使用RSA具有相同的公共 密钥生成新的加密字节产生, 所以我不能比较加密 密码 串,我不得不解密,就比较

PS 回答说:“为了验证的目的,你应该避免使用可逆加密来存储密码”

我在问,除非他有私钥,否则没有人可以解密密码,所以wh在这个问题上,即使哈希是不可逆的,但它已被破坏!

回答

3

存储加密而不是散列的密码并不常见。你有什么特别的理由这么做吗?

如果不是,我会建议用盐来存储密码散列(SHA-2或类似的东西)。

+1

不能足够强烈地推荐这个。永远不要存储任何能够回到用户密码的东西。始终使用散列并比较散列密码,而不是原始密码。 – Andrew 2009-08-22 09:35:12

+0

我以为我可以防止密码破解程序,即使数据库被盗 – 2009-08-22 12:11:00

+0

作为一个攻击者,我更喜欢一个数据库与散列密码数据库与RSA加密密码。即使密码被淹没,攻击者仍然可以执行字典搜索。攻击者不能使用预先计算的表。当数据库使用RSA字典进行正确加密时,攻击是不可能的。 – Accipitridae 2009-08-22 18:56:54

0

我觉得有需要注意两个问题:

  • 如何密码安全地传输?
  • 应如何安全地存储密码?

现有的password based key agreementsSRP解决这两个问题。

您使用RSA加密密码的解决方案并不错,但仅是部分解决方案:由于RSA随机化了加密,因此可以防止脱机字典攻击。根据你的描述,你的建议是否阻止重播攻击还不清楚。攻击者是否可以通过发送先前截获的加密密码进行登录,或者您是否有对策(如时间戳)?

相关问题