我正在尝试为移动应用的服务实现椭圆曲线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))
});
答案 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)结合使用。几乎可以完成您想做的事情。
此致
拉文德拉