【问题标题】:Need to encrypt the passwords to a web application without making the secret key available to the attacker需要加密 Web 应用程序的密码而不使攻击者可以使用密钥
【发布时间】:2018-01-05 12:38:22
【问题描述】:

我想加密我的网络应用程序中使用的密码。通常我们将加密密码并将其保存到属性文件中,然后我们将对其进行解码。但是这里如果源代码是开源的,那么攻击者可以在源代码中找到解码方法,从而获得密码。

另一种方法是将密码保存到密钥库文件中,然后使用密钥库密码访问它。但同样的问题又出现了,攻击者可以看到密钥库密码。

谁能告诉我解决办法?

【问题讨论】:

  • 你为什么不使用公钥/私钥来做必要的事情?您的私钥永远不会公开,因此即使您的加密算法已知,您的私钥也永远不会公开
  • 你将如何将你的私钥提供给解密算法? .无论如何,该私钥将在源代码中可用吗?这样攻击者就可以使用它来解密。
  • 一点也不!有几种方法可以做到这一点,作为 AWS 的忠实粉丝,您可以简单地从安全的 S3 存储桶中读取密钥,您可以且只有您可以访问该存储桶。您可以将密钥作为程序的输入...有多种方式
  • 这些密码的用途是什么?如果你想验证你的用户,你根本不应该加密。您需要使用散列代替一些强大的散列,例如 PBKDF2、bcrypt、scrypt 和 Argon2。由于散列函数是单向函数,因此您将无法“解密”散列。为了验证您的用户,您可以再次通过哈希函数运行密码,以便与存储在数据库中的哈希值进行比较。查看更多:How to securely hash passwords?
  • @Ruskin 感谢您的回复。我会考虑这个

标签: security encryption web-applications


【解决方案1】:

您可以将密钥设为环境变量,然后像在代码中那样引用它(python:os.environ('secretKey')),或者(我假设您将代码存储在 github 上)您可以存储密钥在文件中并将该文件添加到 .gitignore

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2014-12-16
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多