RSA 密钥对 "diversification"?

RSA keypair "diversification"?

对称密钥(AES、3DES、...)可以通过指定的多元化输入进行多元化。通常是这样做的:

DivKey = Enc[PlainText = Key, IV = DivInput, K = Key]

但是,这是基于每个 16 字节数组都是有效的 AES 密钥这一事实。

有什么方法可以对整个 RSA 密钥对做类似的事情吗?我想为我的每个 "clients" 提供一个不同的 RSA 私钥,但我想只保留一个 RSA public 密钥以便能够验证他们的签名。如果整个 RSA 密钥对有一个多样化算法,我可以给我的客户一个 "diversified" 私钥并保留原始 public 密钥来验证他们所有的签名。这对我来说很重要,因为我需要将 public 密钥存储在持久内存非常有限的设备中。

有这样的算法吗?如果是,是否有任何 Java 库实现它?

可能明明这样的多元化算法是不可能存在的,我真的不知道。

如果您认为这个问题应该转移到 cryptoexchange,请这样做。

RSA 很难生成这种东西。 public 密钥不能与私钥分开创建。私钥必须从另一个私钥生成,但主私钥 material 和生成的私钥之间没有明确的数学联系。

不需要。您可以做的只是在客户端生成一个密钥对。然后从客户端向服务器发送证书请求。服务器将 return 由 trusted 证书的私钥签名的证书。现在,如果客户端想要连接它,请发送此证书。服务器将验证它是否由受信任的证书签名。之后它有一个受信任的 public 客户端密钥。

换句话说,阅读基于X509的PKI以了解为什么不需要这样的密钥派生方法。

如果您想自己生成客户端私钥(并以某种方式将它们分发给您的客户端),您可以轻松地使用对称加密(恕我直言,如果您的验证设备不对称加密对此类用例没有任何优势足够信任以保留 MK)。

从技术上讲,应该可以生成多样化的 RSA 密钥对,方法是为用于生成密钥对的随机数生成器播种已知的(秘密,从客户端 ID 生成,足够长,难以预测。 ..) 每个客户的价值都是独一无二的。然后您可以通过使用相同的值重复密钥生成过程来重新生成任何密钥对(参见例如 here我强烈不建议这样做)。

正如 Maarten Bodewes 所说,如果您想继续使用 RSA,PKI 是解决您问题的完美解决方案。请注意,X509 并不是实现 PKI 的唯一方式。

还值得一提的是,对于最简单的 PKI 用例,您不需要任何安全验证设备——验证可以在不受信任的区域中执行(这可能不是您的用例)。

免责声明:我不是加密专家,所以请验证我的想法。