【问题标题】:Securely store public/private keys in a database [closed]将公钥/私钥安全地存储在数据库中[关闭]
【发布时间】:2016-08-21 20:34:16
【问题描述】:

我想将公钥和私钥安全地存储在数据库中。

因此,我的问题是如何将私钥安全地存储在数据库中。 (无论如何,公钥不需要那么安全)。

我目前有两种方法。

  • 将密码(即用户的主密码)添加到私钥并将其作为字符串存储在数据库中
  • 使用对称算法加密私钥并将其作为字符串存储在数据库中

这些方法是否足够?

哪个更好或者它们是一样的?

有没有更好的方法?

更新 你们中的一些人可能对我为什么要这样做感到困惑。我的用例是一个基于团队的密码管理系统。公钥用于加密密码(团队中的每个用户一个),带有 passphase 的私钥用于解密密码。

【问题讨论】:

  • 第一个与第二个仅在对称加密的工作方式上有所不同。它们本质上是等价的,但是对于第二个,您可以自己选择对称加密算法。两者都有优点和缺点。由于您尚未提出要求,这将基于意见。
  • 我唯一的要求是安全地存储私钥(即,如果黑客掌握了它,他们就无法解密它)。根据您的说法,它们本质上是相同的,但是第二种方法给了我更多的控制权。我对吗?有没有更好的方法?还有你想知道什么样的要求?
  • 是的,但是第二种方法也有一个缺点,因为每个人,甚至密码学家,都不擅长正确实施加密。虽然没有太多出错的余地,但您可以使其潜在地不安全。正如我所说,这是基于意见的。
  • @YahyaUddin 您发布了一个指向相当低级函数的链接,该函数允许您选择自己的密码。这可能会变坏,具体取决于您如何实现它。如果您想阅读更长的内容,这是一个经典的解释If You’re Typing the Letters A-E-S Into Your Code You’re Doing It Wrong。基本上,高水平的东西几乎总是更好的选择。并且私钥上的密码是相当高级别的。
  • 对于 PHP 好的高级实现,AES 包括 defuseRNCryptor。最好不要使用mcrypt,它是废弃软件。

标签: php security rsa public-key-encryption private-key


【解决方案1】:

第一个选项可能更好,因为它比正确使用现有的对称加密更容易搞砸自己的对称加密实现。私钥上的密码通常意味着某种形式的对称加密。

PS。我不确定你为什么在这里使用私钥/公钥。如果是为了证明谁上传了密钥 - 太好了。如果是为了加密本身 - 为什么不直接使用存储密码的对称加密呢?如果所有有权读取它的人都知道私钥的密码,那么没有太大区别。您似乎唯一获得的好处是能够在不更改每个人都知道的密码的情况下循环密钥。

【讨论】:

  • 我猜为什么在不需要/不合适的情况下经常使用私钥/公钥是开发人员不了解对称加密和非对称加密,而 RSA 是一个真正知道的流行词,跨度>
  • 私钥和公钥在我的用例中非常重要,甚至被我研究过的许多团队密码管理系统使用
  • 对称加密也不够,因为我们想与其他用户共享。见security.stackexchange.com/questions/134465/…
  • 是的,如果您想要多个团队使用不同的密码,那么我同意 pub/priv 密钥会有所帮助。
猜你喜欢
  • 2011-03-12
  • 2014-06-25
  • 2014-06-05
  • 2015-11-24
  • 2014-01-11
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多