ECDH是EC是"elliptic curves"的意思,DH是"Diffie-Hellman"的意思。它实际上是密钥协商算法,而不是加解密算法。

该算法可以用来解决如下问题:

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

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

Alice 和 Bob 生成他们自己的私钥和公钥,即Alice 有 da、Ha = da*G;Bob有db、Hb = db *G。

Alice把Ha发给Bob,Bob把Hb发给Alice。这样Alice 有da,Ha,Hb,Bob有db,Ha,Hb。

Alice计算S = daHb(即自己的私钥乘上Bob的公钥),同样的,Bob计算S = dbGa(自己的私钥乘上Alice的公钥)。两边计算的S是相同的。

S = da*Hb = da (db G) = db *(da *G) = db*Hb 等式1

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

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

例子

我们现在给出一个例子,设椭圆曲线为secp256k1(在SECG中被定义),它的

参数如下:

Alice的私钥(随机数):

0xe32868331fa8ef0138de0de85478346aec5e3912b6029ae71691c384237a3eeb

Alice的公钥(由Alice的随机数乘上基点):

(0x86b1aa5120f079594348c67647679e7ac4c365b2c01330db782b0ba611c1d677, 0x5f4376a23eed633657a90f385ba21068ed7e29859a7fab09e953cc5b3e89beba)

Bob的私钥(随机数):

0xcef147652aa90162e1fff9cf07f2605ea05529ca215a04350a98ecc24aa34342

Bob的公钥(由Bob的随机数乘上基点):

(0x4034127647bb7fdab7f1526c7d10be8b28174e2bba35b06ffd8a26fc2c20134a, 0x9e773199edc1ea792b150270ea3317689286c9fe239dd5b9c5cfd9e81b4b632)

双方得到的共享密钥:

(0x3e2ffbc3aa8a2836c1689e55cd169ba638b58a3a18803fcf7de153525b28c3cd, 0x43ca148c92af58ebdb525542488a4fe6397809200fe8c61b41a105449507083)

总结:

粗暴的理解记忆是,Alice和Bob协商着把共享密钥算了出来。

另外,您也可以了解下区块链用的ECDSA签名算法

java ecdh秘钥交换,ECDH密钥协商算法相关推荐

  1. java ecdh秘钥交换_了解一下密钥交换算法ECDH

    https://www.jianshu.com/p/b26cd2bfdc28 搬一下别人的解释: 下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理. 1,Diffie-H ...

  2. java ecdh秘钥交换_ECDH密钥交换的C程序

    由于项目需要,使用openssl编写一段ECDH代码实现网络两端实体的密钥交换. 虽然对openssl不熟悉,但也开始做. 最先参照的是openssl官方wiki上的Elliptic Curve Di ...

  3. java ecdh秘钥交换_DH密钥交换和ECDH原理(转)

    下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理. 1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g. 2,Di ...

  4. java ecdh秘钥交换_ECDH密钥交换使用不同长度的公钥?

    我目前正致力于ECDH密钥交换的实施.我正在使用P-384曲线.其他曲线也是可能的,但我认为实现应该非常相似. 客户端(Javascript)和服务器(Java)想要找到共享密钥,因此 1)服务器创建 ...

  5. ECDH秘钥协商算法原理(ECDH Key Exchange)

    ECDH全称是椭圆曲线迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange),主要是用来在一个不安全的通道中建立起安全的共有加密资料,一般来说交换 ...

  6. Diffie-Hellman(迪菲-赫尔曼)秘钥交换协议

    1. 协议背景 对称密码体制: Bob利用对称密钥K对信息进行加密并将加密结果发送给Alice,Alice收到信息之后,用同样的密钥进行解密. 问题1:Alice是如何知道对称密钥K的?------即 ...

  7. 密钥协商算法的演变 —— RSA算法 - DH算法 - DHE算法 - ECDHE算法

    文章目录 1. RSA算法 RSA握手过程 RSA秘钥协商算法最大的缺陷 2. DH算法 3. DHE算法 4. ECDHE算法 ECDHE秘钥协商算法的TSL握手: 1. RSA算法 传统的 TLS ...

  8. dh密钥协商算法c语言实现,Diffie-Hellman密钥协商算法-python实现

    Boblee人工智能硕士毕业,擅长及爱好python,基于python研究人工智能.群体智能.区块链等技术,并使用python开发前后端.爬虫等. 1.Diffie-Hellman密钥协商算法 Dif ...

  9. 公钥密码--Diffie-Hellman密钥协商算法

    公钥密码--Diffie-Hellman密钥协商算法 算法过程 正确性 安全性 博主是初学公钥密码,本意是想整理一些经典的密码系统,加深记忆也方便日后查找:整理成一个系列公钥密码,方便检索. 如果有错 ...

最新文章

  1. Strusts2笔记7--国际化
  2. 如何利用弹幕,打造出非凡的观看体验
  3. A damn at han’s Windows phone book 笔记(2:Flashlight)
  4. Full_of_Boys训练5总结
  5. 《淘宝网》质量属性简析
  6. Spring AOP的简单示例
  7. java离线语音识别_你家的油烟机,可以语音控制了吗?
  8. jenkins远程构建job_jenkins分布式构建job
  9. java oracle的2种分页方法
  10. 利用pca分析fmri的生理噪声
  11. 写了一个3D彩票软件!
  12. Booting ARM Linux
  13. MATLAB中能对三角函数降幂嘛,初中数学三角函数降幂公式
  14. Occlusion culling
  15. NEO从源码分析看数字资产
  16. QT 显示gif 和 flash 动画技巧
  17. china.js实现中国地图
  18. 【CSS】标准盒模型和怪异盒模型
  19. 有趣的智力题(答案)
  20. Vue+ElmentUI 实现表格可变表头,可变多级表头,自定义报表

热门文章

  1. Windows声音图标消失解决教程
  2. ubuntu14.04 keras安装以及Pycharm配置详解
  3. 漫画:程序员老爸想五一出国游,笑死我了……
  4. WEBSHELL 攻击
  5. 网络技术-利用静态路由实现网络互通-3(1)
  6. php artisan serve 报错,nginx-phpartisanserve运行在8000访问502报错
  7. 8086系列(20):十六进制到十进制的转换程序
  8. php switch(0) 的相关问题原因
  9. android Kotlin int类型和Long类型转换
  10. 最详细的阿里云服务器Centos 安装jdk,tomcat,mysql,redis之jdk安装与卸载