下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理。

1,Diffie-Hellman交换过程中涉及到的所有参与者定义一个组,在这个组中定义一个大质数p,底数g。

2,Diffie-Hellman密钥交换是一个两部分的过程,Alice和Bob都需要一个私有的数字a,b。

下面是DH交换的过程图:

本图片来自wiki

下面我们进行一个实例

1.爱丽丝与鲍伯协定使用p=23以及g=5.

2.爱丽丝选择一个秘密整数a=6, 计算A = g^a mod p并发送给鲍伯。

A = 5^6 mod 23 = 8.

3.鲍伯选择一个秘密整数b=15, 计算B = g^b mod p并发送给爱丽丝。

B = 5^15 mod 23 = 19.

4.爱丽丝计算s = B a mod p

19^6 mod 23 = 2.

5.鲍伯计算s = A b mod p

8^15 mod 23 = 2.

ECDH密钥交换:

ECDH:

ECC算法和DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。交换双方可以在不共享任何秘密的情况下协商出一个密钥。ECC是建立在基于椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线上的一个点P,一个整数k,求解Q=kP很容易;给定一个点P、Q,知道Q=kP,求整数k确是一个难题。ECDH即建立在此数学难题之上。密钥磋商过程:

假设密钥交换双方为Alice、Bob,其有共享曲线参数(椭圆曲线E、阶N、基点G)。

1) Alice生成随机整数a,计算A=a*G。 #生成Alice公钥

2) Bob生成随机整数b,计算B=b*G。 #生产Bob公钥

3) Alice将A传递给Bob。A的传递可以公开,即攻击者可以获取A。

由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过A、G计算出a。

4) Bob将B传递给Alice。同理,B的传递可以公开。

5) Bob收到Alice传递的A,计算Q =b*A  #Bob通过自己的私钥和Alice的公钥得到对称密钥Q

6) Alice收到Bob传递的B,计算Q`=a*B  #Alice通过自己的私钥和Bob的公钥得到对称密钥Q‘

Alice、Bob双方即得Q=b*A=b*(a*G)=(b*a)*G=(a*b)*G=a*(b*G)=a*B=Q‘ (交换律和结合律),即双方得到一致的密钥Q。

目前Openssl里面的ECC算法的套件支持是ECDSA/ECDH。在国密的SSL套件中,可以使用ECDSA/ECC(密钥加密传输),ECDSA/ECDH(密钥磋商)两种套件

java ecdh秘钥交换_DH密钥交换和ECDH原理(转)相关推荐

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

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

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

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

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

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

  4. java ecdh秘钥交换,ECDH密钥协商算法

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

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

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

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

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

  7. java中secretkey,java生成秘钥key,并保存秘钥到文件中

    本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...

  8. java用秘钥实现试用期_Android - 如何实现免费试用期,无需提前付费

    我已经开发了一个Android trial library,您可以将其放入项目中,它将为您处理所有服务器端管理(包括脱机宽限期),因此您不需要自己的服务器. 要简单地使用它 将库添加到主模块的buil ...

  9. Java加解密(十)持久化秘钥

    目录 Java持久化秘钥 1 保存PEM文件 2 保存文本文件 3 Java序列化 Java持久化秘钥 加密算法的秘钥持久化是是一个不可避免的话题,如何安全的存储更是重中之重.将秘钥保存在文件中是最简 ...

最新文章

  1. Oracle 11g新特性之--虚拟列(Virtual Column)
  2. php 算法 二进制文件,关于PHP二进制流 逐bit的低位在前算法(详解)_PHP教程
  3. FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”
  4. modelmap前端怎么取值_【百度】前端开发岗面试题
  5. Cannot use v-for on stateful component root element because it renders multiple elements.
  6. 基于FPGA的QAM调制
  7. 钢琴音源 Native Instruments Definitive Piano Collection
  8. Off-line Programming 离线编程 简明教程
  9. 高等数学---第八章多元函数微分学---多元函数的极值与最值
  10. Dubbo Monitor 分析
  11. java 二元一次方程式_JAVA求解一元一次二次方程
  12. Unity3D基础数学向量
  13. react 日期怎么格式化_react日期格式化组件
  14. mui赋值_mui input用法
  15. 下载苹果官网视频的方式
  16. buctoj周赛14
  17. 2016年6月,我们毕业了~~~
  18. vinted是什么平台以及特点
  19. RuoYi框架放行vue和某些公开接口
  20. ES数据架构与关系数据库Mysql对比,例如mysql库对应es索引

热门文章

  1. input复选框checkbox默认样式纯css修改
  2. Django—路由层,视图层
  3. redis 版的 hello world
  4. 第4章 maven依赖特性
  5. JSON学习资料整理
  6. linux下获取时间的函数
  7. 去除对象中的类型集合
  8. ASP.NET刷新页面的六种方法
  9. ajax html页面传参数,jQuery AJAX:如何将大型HTML标记作为参数传递?
  10. 文档词频矩阵_论文理解:从词嵌入到文档距离