当您仅知道私钥时,是否可能知道RSA的公钥

时间:2019-11-10 17:09:25

标签: c# cryptography rsa diffie-hellman

我正在尝试为移动应用的服务实现椭圆曲线Diffie Hellman。在实现的最后阶段,我需要使用RSA加密ECDH的公钥。但是由于我们只能使用RSA的publicKey进行加密,而只能使用privateKey进行解密,因此我认为应该将privateKey提供给客户端,并让publicKey继续提供服务,因此我对于是否可以公开私钥感到困惑。 是否可以从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))
        });

1 个答案:

答案 0 :(得分:0)

评论中有一些答案。因此,只需发布​​一般想法作为答案即可。

  

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

好的。因此,我们的理解是关键派生是在应用程序级别上。如果按照Ry所述使用HTTPS(TLS),那么它将为您完成(可以说是在幕后)。

  

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

再次按照Ry所述,您实际上需要“签名”短暂的公共密钥。这样,您就可以根据自己的设计保留私钥(在您发表在评论中的video link中也提到了这一点),并根据设计与客户端共享公钥。

  

是   可以从privateKey中提取publicKey吗?

实际上 。尽管公用参数很少,所以之所以称为公用密钥和专用密钥,是因为它们总体上具有唯一的参数。例如,在使用RSA的情况下,公钥由“公有”指数和模数组成,而私钥由“私有”指数和指数模数组成。因此,虽然有可能“猜测”公共指数(或在ssl握手期间简单地从服务器证书中提取它),但严格来说,不可能从私钥中提取它。

更新:您也可以考虑将JWE (JSON-Web-Encryption)与JWS (JSON-Web-Signature)结合使用。几乎可以完成您想做的事情。

此致

拉文德拉