RSA Cipher,如何安全保存 public 和私钥?

RSA Cipher, how to secure save public and private keys?

我想使用 RSA 密码加密我的 sql 数据库文件。所以,我有两个密钥 public 和私有密钥,它们只是“裸露”在代码中,例如:

...
privKey = "salosalsolaosloals23232"
pubKey = "olsolsosloslsosls123123"
...

那么,问题来了,如何隐藏它们,让代码更安全呢? 我试过将它们保存在单独的 txt 文件中,但这不是我想要的,因为你仍然可以 read/see 它们,有什么方法可以隐藏它们吗?

您将考虑的每种策略仍然存在问题,即如果您自己有权访问该机密,则具有相同访问级别的任何人也将拥有它。你永远不可能完全保护一个系统,你只能让别人更难闯入。如果你让闯入更难而不是闯入的利润,人们就不会想经历这个麻烦,你可能可以保持安全。

要解决此类问题,您必须根据您试图保护秘密的对象来构建它。你是正确的,在你的代码中留下秘密(你的密钥的私有部分)意味着任何可以看到你的代码的人都可以看到加密密钥。但是,这对您的威胁模型来说合理吗?其他人是否可以轻松访问您的文件系统?或者其他人访问您的数据库备份会更容易吗?

如果他们可以访问您的文件系统,是否意味着他们在机器上也有 root 权限?您用于保护对托管您的应用程序的机器具有完全访问权限和控制权的人的选择非常有限!如果他们可以将调试工具附加到进程中,他们甚至可以从内存中读取您的秘密。

这是一系列不断升级的保护级别:

  1. (一点都不安全)用代码保密。只要没有人能看到您的代码(例如在 public Github 存储库中),那么他们就看不到您的秘密。
  2. (好一点)将您的秘密保存在仅在生产环境中存在的文件中。现在,如果攻击者可以访问您数据的离线备份,他们就无法在没有该附加文件的情​​况下读取内容。
  3. (很好)在部署时输入您的秘密。如果攻击者能够下载您的生产文件系统的内容,这现在可以防止。您可以输入字面秘密,或者保留一个包含您的密钥的文件,该文件使用您在部署时输入的 easier-to-remember 加密秘密进行加密。
  4. (特别偏执)使用为您生成加密密钥的服务,并使用与其集成的部署平台。这是一个相当广泛的行业,有许多竞争产品,我不想认可任何一个特定的产品。您让您的供应商为您生成加密密钥,并且您的部署供应商与其协调以在部署时注入这些秘密。这可以防止攻击者在您的笔记本电脑上安装键盘记录器,在部署时键入密码会泄露密码。