java ecdh秘钥交换_DH密钥交换和ECDH原理(转)
下面我们以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原理(转)相关推荐
- java ecdh秘钥交换_ECDH密钥交换的C程序
由于项目需要,使用openssl编写一段ECDH代码实现网络两端实体的密钥交换. 虽然对openssl不熟悉,但也开始做. 最先参照的是openssl官方wiki上的Elliptic Curve Di ...
- java ecdh秘钥交换_ECDH密钥交换使用不同长度的公钥?
我目前正致力于ECDH密钥交换的实施.我正在使用P-384曲线.其他曲线也是可能的,但我认为实现应该非常相似. 客户端(Javascript)和服务器(Java)想要找到共享密钥,因此 1)服务器创建 ...
- java ecdh秘钥交换_了解一下密钥交换算法ECDH
https://www.jianshu.com/p/b26cd2bfdc28 搬一下别人的解释: 下面我们以Alice和Bob为例叙述Diffie-Hellman密钥交换的原理. 1,Diffie-H ...
- java ecdh秘钥交换,ECDH密钥协商算法
ECDH是EC是"elliptic curves"的意思,DH是"Diffie-Hellman"的意思.它实际上是密钥协商算法,而不是加解密算法. 该算法可以用 ...
- ECDH秘钥协商算法原理(ECDH Key Exchange)
ECDH全称是椭圆曲线迪菲-赫尔曼秘钥交换(Elliptic Curve Diffie–Hellman key Exchange),主要是用来在一个不安全的通道中建立起安全的共有加密资料,一般来说交换 ...
- Diffie-Hellman(迪菲-赫尔曼)秘钥交换协议
1. 协议背景 对称密码体制: Bob利用对称密钥K对信息进行加密并将加密结果发送给Alice,Alice收到信息之后,用同样的密钥进行解密. 问题1:Alice是如何知道对称密钥K的?------即 ...
- java中secretkey,java生成秘钥key,并保存秘钥到文件中
本例子采用的是Java的对称加密其中的一种方式(3DES),其他的加密方式也类似.生成一个key秘钥,发送方使用生成的key秘钥进行加密操作,然后把生成的key秘钥保存到文件中,提供给需要解密的一方使 ...
- java用秘钥实现试用期_Android - 如何实现免费试用期,无需提前付费
我已经开发了一个Android trial library,您可以将其放入项目中,它将为您处理所有服务器端管理(包括脱机宽限期),因此您不需要自己的服务器. 要简单地使用它 将库添加到主模块的buil ...
- Java加解密(十)持久化秘钥
目录 Java持久化秘钥 1 保存PEM文件 2 保存文本文件 3 Java序列化 Java持久化秘钥 加密算法的秘钥持久化是是一个不可避免的话题,如何安全的存储更是重中之重.将秘钥保存在文件中是最简 ...
最新文章
- Oracle 11g新特性之--虚拟列(Virtual Column)
- php 算法 二进制文件,关于PHP二进制流 逐bit的低位在前算法(详解)_PHP教程
- FileZilla客户端连接腾讯云FTP服务器时出现“227 Entering Passive Mode”
- modelmap前端怎么取值_【百度】前端开发岗面试题
- Cannot use v-for on stateful component root element because it renders multiple elements.
- 基于FPGA的QAM调制
- 钢琴音源 Native Instruments Definitive Piano Collection
- Off-line Programming 离线编程 简明教程
- 高等数学---第八章多元函数微分学---多元函数的极值与最值
- Dubbo Monitor 分析
- java 二元一次方程式_JAVA求解一元一次二次方程
- Unity3D基础数学向量
- react 日期怎么格式化_react日期格式化组件
- mui赋值_mui input用法
- 下载苹果官网视频的方式
- buctoj周赛14
- 2016年6月,我们毕业了~~~
- vinted是什么平台以及特点
- RuoYi框架放行vue和某些公开接口
- ES数据架构与关系数据库Mysql对比,例如mysql库对应es索引