【问题标题】:Customize openssl generate RSA key params自定义 openssl 生成 RSA 密钥参数
【发布时间】:2016-12-02 10:12:02
【问题描述】:

我想用 openssl 生成一个密钥对,但我无法设置参数来生成我的私钥/公钥。 我想传递一个输入参数,例如一个标识符(例如 mac 地址),以获得一个唯一的私钥/公钥。对于相同的标识符,我想要相同的私钥/公钥。 我怎么能做到这一点? 在此先感谢:D

【问题讨论】:

  • 使用 OpenSSL 的 RSA_generate_ex 可能需要一些工作。您可能需要提供一个提供随机数生成器的ENGINE。您的 RNG 将提供密钥生成算法使用的位。 Richard Levitt 在Engine Building Lesson 1: A Minimum Useless EngineEngine Building Lesson 2: An Example MD5 Engine 有几个教程。
  • 创建pqned 和 CRT 参数可能是更好的选择。它们只是BIGNUM 的,您将完全控制表单。然后,将它们分配给RSA*。标准警告适用于以这种方式搞乱密钥生成...

标签: openssl rsa private-key


【解决方案1】:

RSA 密钥对必须随机生成。

确定性地生成 - 您不再生成密钥,而是从某些数据(例如,基于 MAC 地址)派生密钥。这会将生成的密钥的安全性降低到零 - 因此它们是无用的,您甚至不必开始生成它们。

RSA 的安全性所基于的中心假设是私钥只有密钥所有者知道。如果您获取 MAC 地址等公共信息,则适用以下公式:

RSA 密钥对 = your-derivation-algorithm(MAC 地址)

如果您想知道 RSA 私钥(它是密钥对的一部分),您需要 MAC 地址和派生算法。 MAC 是公开的,推导算法早晚会公开。

因此 RSA 私钥也是公开的,从安全角度来看,这使得它毫无用处,因为知道 MAC 地址的每个人都可以生成它。

请注意:安全性基于机密数据和精心设计的算法。算法是否公开不应该对安全性产生任何影响。如果它有影响,您可以丢弃不安全的算法。

【讨论】:

  • 您好,您能解释一下如何为相同的输入参数生成相同的密钥对会降低生成密钥的安全性吗?