首页 文章

存储可解密密码的安全方法

提问于
浏览
8

我正在使用PHP创建应用程序,并且要求必须能够解密密码,以避免将用户数据库切换到不同系统时将来出现问题 . 考虑到无法修改此未来系统的密码方法,我需要纯文本密码才能生成密码 .

计划是使用存储在服务器上的公钥加密用户的密码 . 通过加密输入和比较结果来完成认证 . 没有解密完成 . 能够解密的私钥存储在异地以供以后使用 .

您建议使用哪种加密/解密算法?当您认为攻击者无法使用私钥时,加密密码是否仍然像散列(MD5 / SHA1)一样安全?

5 回答

  • 2

    我会改用Jammer的方法 -

    • 生成公钥/私钥对 . 在您的网络服务器上对公钥进行硬编码 . 将私钥存储在Web服务器/数据库/任何开发人员无法访问的物理银行存储柜中 .

    • 用户注册时,使用公钥加密密码盐 . 此步骤与使用哈希算法相同 . 将加密的密码salt存储在数据库中 .

    • 如果要验证密码,请再次对其进行加密,并将其与存储在数据库中的值进行比较 .

    如果攻击者获取数据库,则他无法解密密码,因为他没有私钥 . 他无法获得私钥,因为它位于他无法触及的银行金库中 . 由于盐,两个相同的密码仍将以不同方式存储在数据库中 .

    我不建议使用上述方法,因为在将来的某个时间点,有人可能会滥用私钥并访问所有密码 .

    但是,如果您保证私钥将永远保密,那么我没有看到技术缺陷 .

    当然,我可能是错的 .

  • 0

    不要解密密码 . 如果以后需要更改密码系统,请添加名为storage_type(或其他)的字段 .

    然后,当您需要更改密码时,您将检查它是否是旧密码 . 如果是,则下次登录时,您可以更改密码编码 . 否则,使用新系统登录 .

  • 8

    能够解密密码是一个坏主意(并且可能没有任何方法可以比未加密存储它们更好) . 听起来你的主要问题是如果你改变你的存储方法就能使用密码 . 只需执行Linux所做的操作,存储如何使用密码对密码进行哈希处理 . 所以例如$ 1 $ salt $ hash是MD5 . 这样,如果您决定更改密码的存储方式,您仍然可以检查旧密码(如果有人正确登录,您可以使用新哈希更新其密码) .

  • 1

    我看到的唯一问题是,大多数公钥 - 私钥加密代码将使用公钥加密对称密钥,并依赖私钥解密,然后使用对称密钥加密消息 .

    您希望使用公钥直接加密密码盐 .

    因此,针对您的系统的攻击归结为:

    • 针对一般公钥/私钥加密的攻击

    • 攻击您的私钥存储 .

  • 4

    对于大多数应用程序来说,存储SHA-1密码哈希就足够了 .

    是的,在大多数散列算法中存在已知的冲突,但这并不意味着实际的攻击向量 . 特别是当你腌制哈希时 .

    对于salt:将其存储在无法从外部访问但可由PHP安装读取的配置文件中 .

相关问题