繁体   English   中英

安全的密码存储和恢复

[英]Secure password store and recovery

所以,

我有一个存储密码的mysql表,这些密码不能被散列,因为稍后需要将其恢复为纯文本。

我有一个javascript,它通过ajax / php从mysql数据库中获取这些密码,并将其发送到另一台将使用它进行身份验证的服务器,这就是为什么我在发送时需要使用纯文本的原因。

我知道有base64和其他加密算法,但这是不安全的。

我发现最好的解决方案是OpenSSL,但是我不确定自己走的路是否正确。 是吗

OpenSSL是开始寻找的好地方。 它支持大量安全加密算法,可用于加密纯文本密码。 AES-256或Twofish是开始研究的好算法。 3DES也被认为足以满足当今的标准。

为了获得良好的安全性,您将需要使用不同的密钥来加密每个用户的密码。 也就是说,每个用户都有一个唯一的加密密钥,并且您不能对所有密码使用1个密钥。 可能是他们在您的网站上使用的用户密码的哈希值,但是用户密码通常不是很安全,并且如果他们忘记了您的网站/服务的密码,那么他们也会丢失其加密密钥。

为了获得最大的安全性,您不应将加密密钥存储在任何地方。 当用户使用密码登录时,您可以根据密码在内存中生成加密密钥。 理想情况下,它不仅是密码的哈希值,而且是通过某种转换算法应用的密码。

如果不是这样,那么您应该将加密密钥存储在与存储加密用户密码的物理服务器不同的物理服务器上。 存储加密密钥的服务器应具有许多安全性和访问控制功能,并且对数据库的访问受到高度控制,因此几乎只有您的应用程序可以访问密钥。

最重要的是,您必须在您的隐私权政策中披露您可以存储其加密形式的密码以供第三者服务使用。

希望能有所帮助。 OWASP可能还有其他与您将要做的事情有关的有用信息。

感谢您提供所有答案,我将使用此处描述的php加密方法: https ://stackoverflow.com/a/6639179/1415262

并尝试一些openssl。

对于所有其他答案,我对它们有一些问题,并且花了很短的时间来解释原因。

PS .:我还不能投票,但是特别感谢@ drew010和@fabio :)

我强烈建议您不要以明文形式存储密码,并且可能会生成从一台服务器传递到另一台服务器的一次性使用密钥。

因此,服务器一具有链接到特定用户的唯一密钥,该密钥也位于服务器二上,这就是传递的密钥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM