对称密钥(AES,3 AES,.)可以通过指定的多样化投入进行多样化。通常是这样做的:
DivKey = Enc[PlainText = Key, IV = DivInput, K = Key]然而,这是基于这样一个事实,即每个16字节数组都是一个有效的AES键.
有没有办法对整个RSA键盘做类似的事情?我想提供一个不同的RSA私钥给我的每个“客户”,但我想保留一个RSA公钥,以便能够验证他们的签名。如果有一个多样化的算法对整个RSA密钥,我可以给我的客户一个“多样化的”私钥,并保留原来的公钥,以验证他们的所有签名。这对我来说很重要,因为我需要将公钥存储在具有非常有限的持久内存的设备中。
有这样的算法吗?如果是,是否有实现它的Java libary?
也许很明显,这种多样化算法是不存在的,我真的不知道。
如果您认为这个问题应该移到加密交换,请这样做。
发布于 2015-06-21 22:25:53
对于RSA来说,这种事情是很难产生的。公钥不能与私钥分开创建。私钥必须由另一个私钥生成,但在主私钥材料和生成的私钥材料之间没有明确的数学联系。
并不是说它是必要的。您所能做的只是在客户端上生成一个密钥对。然后从客户端向服务器发送证书请求。服务器将返回由受信任证书的私钥签名的证书。现在,如果客户端想连接它,请发送此证书。服务器将验证它是否由受信任的证书签名。在此之后,它拥有客户端的可信公钥。
换句话说,读入基于X509的PKI,了解为什么不需要这样的密钥派生方法。
发布于 2015-07-24 11:32:18
如果您希望自己生成客户端私钥(并以某种方式将它们分发给客户端),则可以轻松地使用对称加密(如果您的验证设备被信任到足以保留MK,则IMHO非对称加密不会为这种用例提供任何优势)。
从技术上讲,应该可以通过播种一个随机数生成器来生成多样化的RSA密钥,该生成器用于生成具有已知(秘密、从客户端id生成的、足够长的、难以预测的.)的密钥.值对每个客户端都是唯一的。然后,您可以通过使用相同的值重复密钥生成过程来重新生成任何键区(参见here )。我强烈建议不要这样做,)。
正如Maarten所说,如果您想继续使用RSA,PKI是解决您的问题的完美解决方案。请注意,X509并不是实现PKI的唯一途径。
还值得一提的是,对于使用PKI的最简单的用例,您不需要任何安全验证设备--验证可以在不受信任的区域执行(这可能不是您的用例)。
声明:我不是密码专家,所以请验证我的想法。
https://stackoverflow.com/questions/30930812
复制相似问题