【问题标题】:Secure storage of private key [closed]私钥的安全存储[关闭]
【发布时间】:2014-06-25 12:53:38
【问题描述】:

我们希望存储 FTP、网站、数据库等的密码。您可以将我们的软件与 keypass 进行比较,但我们想做自己的解决方案。 密码将被加密并存储在数据库中。我们不能使用校验和,因为我们需要以明文形式显示密码。

问题是我们找不到存储私钥的好方法。如果它是写在代码中的,你可以很容易地得到它。如果它隐藏在一个dll中,你无法有效地隐藏它,因为机器必须使用它。我们软件的所有用户都可以完全访问源代码、带有加密密码的数据库,并且是他们 PC 上的管理员,因此他们可以在使用代码时阅读代码。

我们考虑将私钥存储在一个单独的数据库中,该数据库可以使用另一个密码访问,但无论如何都会使用该密钥。

所以,我们无处可去。我们知道没有 100% 保存的解决方案,但必须有一个几乎安全的解决方案。

【问题讨论】:

  • 您还没有提到为什么您不能以他们获取加密密钥的方式模拟 keypass:要求用户输入密码。此外,鉴于您拒绝 dll 嵌入,您似乎对“几乎安全”(即不安全,“但谁会注意到?”)解决方案不满意。总体而言,您没有提供足够的上下文来帮助您找到安全的解决方案(如果有的话):您的应用程序应该将 谁的 密码存储在 谁的 PC 上以供 哪些合法使用?
  • 我们是几个人,有一些共享 FTP 等条目。目前,我们共享一个 Keepass-File。这意味着我们每个人都可以使用主密码访问每个条目。那是我们不再想要的了。每个人都应该能够访问他自己的条目和特定的共享条目。那些共享的是我们的问题。到目前为止,条目将使用私钥加密。但是,如果您想共享该条目,则另一个必须使用相同的私钥对其进行解密。我现在正在为此寻找解决方案。我们所有 PC 上的软件,服务器上的数据库
  • 如何为每个人使用一个公共的 Keepass 文件和私人文件?回到自制解决方案:如果您想要更精细的访问控制,您可以为每个用户分配一个非对称密钥对,如果有人与某个组共享密码,您的软件会使用该组成员的每个公钥加密密码。
  • 似乎是唯一可行的方法。我们还没有使用它,因为我们想要 AES 加密。所以我研究了用 key1 加密密码。然后将用户的私钥添加到可以解密 key1 的密钥列表中。由于我找不到这样做的方法,我们可能会使用 RSA。谢谢你的回答。

标签: encryption passwords private-key


【解决方案1】:

首先,我建议不要编写自己的解决方案,有很多方法会做错,你需要投入大量时间来了解所有要点。

您无需在任何地方存储密钥,只需使用密钥加密数据然后忘记密钥即可。解密时使用输入的密钥,如果密钥正确,则返回数据,否则返回加扰的内容。

由于用户不喜欢键入强密钥和首选密码,因此您应该使用像 BCrypt 或 PBKDF2 (Password-Based-Key-Derivation-Function-2) 这样的密钥派生函数,它可以将密码转换为密钥.

【讨论】:

  • 无论好坏,他们希望以后能够检索密码:“我们不能使用校验和,因为我们需要以明文形式显示密码。”
  • @Perseids - 也许您误解了答案,PBKDF2 仅用于从用户密码中获取密钥(用于加密),这是他们最初的目的。密码/密钥本身根本不应该被存储。
  • 我明白了。不过,无论出于何种原因,他们似乎都没有兴趣使用用户特定的密码对其进行加密(请参阅我对问题的评论)。
  • @Perseids - 也许他们只是没有考虑到这种可能性。对于一个拿着锤子的人来说,一切看起来都像钉子……
  • 使用 PBKDF2 将是完美的。每个用户都在访问使用对称密钥加密的同一个数据库。问题是每个用户都有不同的密码。所以我们必须用不同的密码创建相同的密钥。我找不到解决方案。如果有,请给我提示。
猜你喜欢
  • 1970-01-01
  • 2014-01-11
  • 2013-05-30
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2011-10-14
  • 1970-01-01
相关资源
最近更新 更多