对称密钥(AES,3DES,...)可以通过指定的多样化输入进行多样化。它通常以这种方式完成:
DivKey = Enc[PlainText = Key, IV = DivInput, K = Key]
但是,这是基于每个16字节数组都是有效的AES密钥的事实。
有没有办法与整个RSA密钥对做类似的事情?我想为我的每个客户提供一个不同的RSA私钥"但是我想只保留一个RSA公钥来验证他们的签名。如果整个RSA密钥对存在多样化算法,我可以给我的客户一个多元化的"私钥并保留原始公钥以验证其所有签名。这对我来说很重要,因为我需要将公钥存储在持久内存非常有限的设备中。
有这样的算法吗?如果是,是否有任何Java库实现它?
很明显,这种多元化算法不可能存在,我真的不知道。
如果您认为此问题应移至cryptoexchange,请执行此操作。
答案 0 :(得分:2)
这种事情很难为RSA产生。无法与私钥分开创建公钥。私钥必须从另一个私钥生成,但主私钥材料与生成的私钥之间没有明确的数学连接。
不是需要的。您可以做的只是在客户端上生成密钥对。然后从客户端向服务器发送证书请求。服务器将返回由受信任证书的私钥签名的证书。现在,如果客户想要连接它,请发送此证书。服务器将验证它是否由可信证书签名。之后,它拥有客户端的可信公钥。
换句话说,读入基于X509的PKI以理解为什么不需要这样的密钥派生方法。
答案 1 :(得分:0)
如果您想自己生成客户端私钥(并以某种方式将它们分发给您的客户端),您可以轻松使用对称加密(如果您的验证设备是可信的,则IMHO非对称加密不会为此类用例提供任何优势足以保持MK)。
从技术上讲,应该可以通过播种用于生成已知密钥对的随机数生成器来生成多样化的RSA密钥对(秘密,生成来自客户端ID,足够长,难以预测...... )每个客户的唯一价值。然后,您可以使用相同的值重复密钥生成过程来重新生成任何密钥对(请参阅例如here。我强烈建议您不要这样做)。
正如Maarten Bodewes所说,如果你想继续使用RSA,PKI是你问题的完美解决方案。请注意,X509并不是实现PKI的唯一方法。
值得一提的是,对于PKI最简单的用例,您不需要任何安全验证设备 - 验证可以在不受信任的区域执行(可能不是您的用例)。
Desclaimer:我不是加密专家,所以请确认我的想法。