是否可以知道RSA的公钥,而您只知道私钥



我正在尝试为我的移动应用程序服务实现椭圆曲线Diffie-Hellman。作为实现的最后阶段,我需要用RSA加密ECDH的公钥。但由于我们只能用RSA的公钥加密,用私钥解密,我认为我应该把私钥交给客户,并让公钥继续服务,我对公开私钥是否可以有点困惑。是否可以从privateKey中提取publicKey?

return JsonConvert.SerializeObject(new
{
responseVal = ResponseVal,
responseText = ResponseText,
ServerECDHPublicKey = serverPublicKey,
ServerECDHPublicKey_AES = Security.EncryptAES(null, serverPublicKey, aes),
AESKey_RSA = Security.EncryptRSA(Encoding.UTF8.GetString(aes.Key))
});

评论中有一些答案。所以,只是发布一个大致的想法作为答案。

我正在尝试为我的手机实现椭圆曲线Diffie-Hellman应用程序的服务。

好的。因此,我们的理解是,关键的推导是在应用程序级别。如果像Ry提到的那样使用HTTPS(TLS(,它会为你(可以说是在幕后(做到这一点。

作为实现的最后阶段,我需要加密的公钥带RSA的ECDH。但由于我们只能使用RSA的公钥和使用privateKey解密,我想我应该将privateKey给客户并保留publicKey为服务,我很小对是否可以公开私钥感到困惑。

正如Ry所提到的,您实际上需要对短暂公钥进行"签名"。这样,你就可以将私钥保密(你在评论中发布的视频链接中也提到了这一点(,并根据设计与客户共享公钥。

Is是否可以从privateKey中提取publicKey?

实际上没有。虽然很少有公共参数,但之所以称公钥和私钥,是因为它们作为一个整体具有唯一的参数。例如,在RSA的情况下,公钥由"public"指数和模数组成,私钥由"private"指数和指数模数组成。因此,虽然可以"猜测"公共指数(或者在ssl握手期间简单地从服务器证书中提取(,但严格来说,不可能从私钥中提取。

更新:您还可以考虑将JWE(JSON Web加密(与JWS(JSON Web签名(结合使用。它几乎可以做你想做的事。

问候,

Ravindra

最新更新