加密与散列密码

问题描述:

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

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

私钥可以通过两种方式来使用:

  1. 我一直在为特殊手动密码恢复操作我的离线设备的私钥。
  2. 私钥在应用程序中,但使用密码加密。

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

关于第二个选项,潜在的黑客可能破解应用程序服务器并等待我插入密码来解密私钥,但我认为在这种情况下,黑客已经可以做更多不好的操作,而不是等待私钥解密(如等待只是用户登录时和其他人...发送密码)

感谢

编辑:我将主要了解,如果是使用加密是使用散列是安全的(当然,假设破解者无法获得私钥)。

+1

*“我希望能够恢复原来的用户密码,如果我需要”*不,你不需要。 – Ryan

+0

只要知道哈希是一种单向算法,您不能散列密码并在稍后从哈希中恢复密码 –

+0

@Ryan您是否知道我在开发什么类型的应用程序?请假设我可能需要恢复它们。 – Eghes

如果你想恢复密码,哈希是超出选项。哈希是单向算法。所以你有2个关于加密密码的选项。

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

如果您确定您的脱机设备不会受到威胁,那么您可以这么做。

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

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

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

+0

谢谢。我会主要理解的是,如果使用加密和使用哈希一样安全(当然假设黑客无法获得私钥)。 – Eghes

如果你的问题是适当的哈希算法是否有瑕疵,并适当加密方案是正确的,那么是 - 两者都是使用目的正确。

这意味着例如对于散列而言,不存在冲突并且没有可逆性。对于加密,这意味着在合理的时间内不能解密。请注意,这些只是两个要求,每个都有更多。

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

在跳入架构来存储密码和密钥之前,我会热烈推荐寻找其他可能性(如身份验证经纪 - 将身份验证卸载到其他人)。