使用椭圆JS库从公共密钥生成共享密钥

时间:2019-10-22 08:01:03

标签: javascript cryptography cryptojs elliptic-curve

我正在尝试使用Elliptic JS库生成一个可以在两个人之间使用的共享密钥(根据他们的示例)。

问题在于该示例每次都会生成一个新的密钥对-我想让一个人使用自己的私钥,而另一个人使用公钥。

这是我到目前为止的内容:

2.x.x

任何想法都将大有帮助!

1 个答案:

答案 0 :(得分:1)

所以也许最好解释一下。

使用椭圆曲线加密,私钥只是一个数字(很大)。

公钥实际上是曲线上的(实际上是x,y)。

您必须先生成一个私钥,然后才能获得相应的公钥坐标。您可能知道,ECC中的活板门功能是基于 not 能够从公共密钥点推断出私有密钥。

公钥是通过将私钥与曲线上称为生成器点的特殊点进行标量相乘而获得的。

所以...也就是说,从已知的公钥开始的唯一方法是(在先前的某个时候)生成并存储私钥,并使用标准来计算相应的公钥方法(FYI实际上是一个过程,其中一个标量将私钥号乘以曲线上的已知生成器(特殊的公知x,y点),然后存储公钥以备将来使用

最后一件事,您在这里所做的(您可能已经知道)是ECDH(椭圆曲线Diffie Hellman),它使用Diffie Hellman协议生成共享机密。

在该协议中,通常每次都使用临时(临时)密钥对。这样,每个会话都有一个新的会话密钥,这意味着前向保密性不会基于单个私钥。

另外请记住,派生的ECDH机密尚未准备好用作对称密钥。应该通过HKDF(密钥派生函数)作为适合于密码使用的随机秘密!=统一秘密。

请在下面提出任何问题,很好地解释为什么在@Maarten的ECDH here中使用临时密钥很重要。

如果不清楚,请告诉我。