【问题标题】:Encryption vs Hashing Passwords加密与散列密码
【发布时间】:2018-01-20 19:16:06
【问题描述】:

假设我想开发一个身份验证/用户系统,并且我希望能够在需要时恢复原始用户密码,从安全角度来看,加密密码与散列有什么缺点?

当然,应用程序将只使用公钥,并且只需将加密的字符串与公钥进行比较即可执行身份验证。

私钥有两种使用方式:

  1. 我将私钥保存在离线设备上,以进行特殊的手动密码恢复操作。
  2. 私钥在应用程序中,但使用密码加密。

考虑到没有人(除了我)可以访问私钥,这些实现选择而不是散列密码的安全弱点是什么?

关于第二个选项,黑客可能会入侵应用程序服务器并等待我插入密码来解密私钥,但我认为在这种情况下,黑客已经可以做比等待私钥解密更多的坏动作(因为等待用户在登录和其他人时发送他们的密码......)

谢谢

编辑:我主要理解的是,使用加密是否与使用散列一样安全(当然假设破解者无法获取私钥)。

【问题讨论】:

  • “如果需要,我希望能够恢复原始用户密码” 不,你不需要。
  • 请注意,哈希是一种单向算法,您不能对密码进行哈希处理,然后从哈希中恢复密码
  • @Ryan 你知道我想开发什么类型的应用程序吗?请假设我可能需要恢复它们。
  • @JerryB.no.1intern 是的,我知道。正是为此,我问的是加密而不是哈希的安全弱点:)
  • @Eghes 最明显的安全漏洞是从用户的角度来看。为什么用户会委托您使用他自己的私人密码?

标签: security encryption hash password-protection


【解决方案1】:

如果您想恢复密码,则无法选择散列。哈希是直接单向算法。所以你有两个关于加密密码的选择。

1- 我将私钥保存在离线设备上,以进行特殊的手动密码恢复操作。

如果您确定您的离线设备不会受到威胁,您可以这样做。

2- 私钥在应用程序中,但使用密码加密。

这可能会适得其反,因为万一有人访问您的代码,他们可以推断您正在加密密码并以这种方式存储密码。这可能会促使攻击者访问您的私钥。

鉴于这两个选项,我想说第一个更安全,因为您只需要担心设备的物理安全性。

【讨论】:

  • 谢谢。我主要理解的是,如果使用加密和使用散列一样安全(当然假设破解者无法获取私钥)。
【解决方案2】:

如果您的问题是 正确 哈希算法是否存在缺陷,并且 正确 加密方案是否正确,那么是的 - 它们对于预期用途都是正确的。

这意味着例如对于散列,没有冲突,也没有可逆性。对于加密,这意味着无法在合理的时间内解密。请注意,这只是两个要求,每个要求更多。

现在,预期用途很重要。如果您需要重复使用密码,那么您将需要以某种方式存储它们。有几种可能性,包括加密。正如您所指出的,风险在于检索密钥(有人可以破解您的操作系统,或者在使用密钥时破解您的应用程序......)。

我强烈建议在进入存储密码和密钥的体系结构之前寻找其他可能性(例如身份验证代理 - 将身份验证卸载给其他人)。

【讨论】:

    猜你喜欢
    • 2011-06-23
    • 2016-08-21
    • 2011-02-18
    • 2021-06-14
    • 2018-05-16
    • 1970-01-01
    • 2010-09-24
    • 2015-02-17
    相关资源
    最近更新 更多