我想让2个当事方使用其公钥和私钥就同一秘密密钥达成一致。我不希望他们有任何互动。所以我在想method(A.privKey, B.pubKey)
给相同的数字method(B.privKey, A.pubKey)
我想知道Diffie-Hellman密钥协商算法在您使用Java时是否适用于Java KeyPairGenerator.getInstance("RSA")
如果是这样,我该怎么做?还是我需要使用KeyPairGenerator.getInstance("DH")
?
我在网上搜索过,似乎找不到答案。
Diffie-Hellman和RSA背后的数学方法足够不同,因此RSA密钥不能用于DH。
DH是一个密钥交换,给定两个密钥对,它将产生一个共享密钥。它不会直接加密数据。(但是通过将DH与对称加密相结合来构建加密很容易)。
双方都同意一个小组,在由g
和定义的最简单情况下,p
哪p
一个是安全的素数。
私钥只是一个数字a
,对应的公钥A
是g^a mod p
。由于指数是可交换的,因此需要计算一个共享密钥,因此
A^b = (g^a)^b = g^(ab) = (g^b)^a = B^a
为此,两个密钥对都需要使用相同的组。实现此目的的最简单方法是选择一个特定的组并将其硬编码到协议/应用程序中。
RSAm
用公共密钥加密消息,从而产生密文c
。因此,它仅使用一个密钥对,即接收者的密钥对。
私钥是固定指数e
(通常为65537),并带有一对质数p
和q
。
对应的公钥是e
和素数的乘积n = p * q
。
加密是通过计算发生的c = m^e mod n
,只有在您知道的情况下才能受到认可p
,q
但仅在您知道的情况下才受到认可n
。
您可以使用RSA生成共享密钥,方法是生成一个随机密钥作为发送者,并使用接收者的公共密钥对其进行加密。这适用于在没有交互的情况下加密发送给收件人的邮件。但是,由于发送者可以控制共享密钥,因此它不对发送者进行身份验证。因此,如果您不能使用RSA来实现非交互式可拒绝身份验证。但是您可以使用RSA签名消息(但不要使用相同的密钥对进行签名和加密),从而为您提供不可否认的身份验证。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句