ECDH产生共享密钥

2 篇文章 0 订阅
2 篇文章 2 订阅

最近在忙一个项目,我们公司的一个卡产品,要用到ECIES(集成加密方案,elliptic curve integrate encrypt scheme),加解密。ECIES中的最重要一步就是ECDH,需要算出共享密钥。于是研究起来,这篇文章记录我的学习过程。

ECDH是EC是“elliptic curves”的意思,DH是“Diffie-Hellman”的意思。它实际上是密钥协商算法,而不是加解密算法。该算法可以用来解决如下问题:

- 在公网通道上如何进行安全的秘钥分派。

两端(Alice 和 Bob)想要安全的交换信息并且第三方不能获取到该信息。当然这也是TLS协议中的目的之一,举个例子。(其实下面的描述其实是ECDHE,而不是ECDH)

Alice 和 Bob 生成他们自己的私钥和公钥,即Alice 有 Pri_A、Pub_A = Pri_A * G;Bob有Pri_B、Pub_B = Pri_B*G。

Alice把Pub_A 发给Bob,Bob把Pub_B 发给Alice。这样Alice 有Pri_A,Pub_A ,Pub_B,Bob有Pri_B,Pub_B ,Pub_A。

Alice计算共享S = Pri_A * Pub_B(即自己的私钥乘上Bob的公钥),同样的,Bob计算S = Pri_B * Pub_A (自己的私钥乘上Alice的公钥)。两边计算的S是相同的。

S = Pri_A * Pub_B = Pri_A * (Pri_B * G) = Pri_B * (Pri_A * G) = Pri_B * Pub_A -------等式1

中间人只知道到Pub_A和Pub_B ,无法计算出共享密钥S。即离散对数问题为:中间人要计算 S,必须通过上述 等式1 中的一个等式来计算。显然必须知道Pri_A或者Pri_B,而中间人只知道Pub_A和Pub_B,即中间人为了获得Pri_A或者Pri_B需要从Pub_A或Pub_B中分离出Pri_A或者Pri_B,显然这就是之前所说的离散对数问题。

现在Alice和Bob得到了共享密钥,后续可以使用共享密钥进行对称加密进行数据传输。通常情况下,点S中x向量被作为共享密钥。

我们现在给出一个例子,设椭圆曲线为secp256r1(在SECG中被定义),它的参数如下:

Recommended Parameters secp256r1
The verifiably random elliptic curve domain parameters over Fp secp256r1 are specified by the sextuple T = (p, a, b, G, n, h) where the finite field Fp is defined by:
在这里插入图片描述

//Alice
Pri_A_str = 0x15E8B4FFD8006F81F98DB52A295F7C7E20BFEB275EB1492F689B481505937BD3
Pub_A_x_str = 0x5B4AA00013F86A113F204D8DF230C4810A6C3B45BF6481376316B04B4366BD6E
Pub_A_y_str = 0x27063102FDF91A8B208065FB9D823D318E2532DCD115DD7A61D327EA49DB763E

//Bob
Pri_B_str = 0x3EA18457C92D570552A4F63979DD6339C3566C896F7245EBC4B8D6010FB1D811
Pub_B_x_str = 0xD89B4456C9AFFA453B5C87CA67FD86079FB320AB35DE535E3380CE8C4CB7F951
Pub_B_y_str = 0x08D323F3F3DFFD7601C964E72559B890049DC3445184B44A3E28ACB1D5869AE9

设椭圆曲线为secp256r1
Alice计算的共享密钥=Pri_A*Pub_B=2E653DB8C1B9C2C4BA8A82CFAA8417D507146855C11F40BFEA3EC6B4647928D0
Bob  计算的共享密钥=Pri_B*Pub_A=2E653DB8C1B9C2C4BA8A82CFAA8417D507146855C11F40BFEA3EC6B4647928D0

网上找不到相关计算软件,我就用C#写了个程序,可以计算共享密钥,效果如下图
在这里插入图片描述
如上图,可见Alice跟Bob协商的共享密钥是一致的。

工具下载链接:

链接: ECDH产生共享密钥软件下载….

如果有需要,可付费修改,按需求提供计算软件。联系微信tianshanjinyou
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ECDH(椭圆曲线Diffie-Hellman)是一种密钥交换算法,用于在两个通信方之间生成共享密钥ECDH算法基于椭圆曲线数学和离散对数问题,提供了一种安全、高效的密钥交换机制。 为了实现ECDH算法生成共享密钥的软件,首先需要选择合适的椭圆曲线作为算法的基础。合适的椭圆曲线应该具备足够的复杂度和安全性。其次,需要实现椭圆曲线上的点群运算、点乘等基础算法。 在软件中,首先双方需要各自生成一对公私钥。公钥是由椭圆曲线上的点计算得到的,私钥是一个随机生成的数值。然后,双方将各自的公钥交换出去。接下来,双方使用对方的公钥和自己的私钥进行计算,得到一个共享密钥。 在实现过程中,需要注意的是对密钥安全性。生成的私钥应当保护起来,防止泄露。另外,要确保通信双方公钥的正确性和完整性,可以使用数字证书等机制来验证公钥的有效性。 为了提高算法的执行效率,可以采用一些优化措施。例如,使用快速幂算法来加速点的乘法运算,使用预计算表来存储已计算过的结果,避免重复计算等。 总之,实现ECDH算法生成共享密钥的软件需要选择合适的椭圆曲线,实现基础的点运算算法,以及保证私钥的安全性。通过双方的公钥交换和计算,可以生成一个安全共享密钥,用于加密和解密通信内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值