转自:http://www.tuicool.com/articles/em6zEb

DH密钥交换和ECDH原理

时间 2013-06-24 18:50:55  CSDN博客
原文  http://blog.csdn.net/sudochen/article/details/9164427
主题 安全技术

下面我们以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。

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

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

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

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

5) Bob收到Alice传递的A,计算Q =b*A

6) Alice收到Bob传递的B,计算Q`=a*B

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(密钥磋商)两种套件

参考:[1] http://technet.microsoft.com/zh-cn/query/cc488016

[2] http://blog.sina.com.cn/s/blog_55a9111c01011zxz.html

[3] http://howmissu.blog.sohu.com/100471149.html

转: DH密钥交换和ECDH原理相关推荐

  1. DH密钥交换和ECDH原理

    DH密钥交换和ECDH原理 上述的就是DH密钥交互的图表: 可以这么理解,A与B想要生成只有彼此知道的密钥,而使得自己本地产生的私钥,不被对方知道,包括第三方的Eve. 此时的Alice 和Bob 彼 ...

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

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

  3. 了解一下密钥交换算法ECDH

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

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

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

  5. DH密钥交换在实践中的安全问题

    本文提出了logjam,CVE-2015-4000,告诫我们不要兼容因为安全问题而被抛弃的旧特性. 主要内容来自论文和网络,本文为内容摘要和背景知识(当然,也算是翻译). forward secrec ...

  6. 密码学归约证明——DH密钥交换协议在窃听者存在的情况下的安全性

    1. 密钥交换实验KEA,Πeav(n)KE^{eav}_{A,\Pi}(n)KEA,Πeav​(n) 持有1n1^n1n的通信方执行Π\PiΠ协议.之后得到通信双方发送的所有的消息的副本以及双方输出 ...

  7. DH密钥交换算法的python实现——Diffie–Hellman key exchange

    文章目录 前言 DH交换算法简介 DH算法 Python算法的实现 后记 前言 DH交换算法简介 Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安 ...

  8. 密码学 专题 DH密钥交换算法

    注意事项: SSL中密钥交换算法有6种:无效(没有密钥交换).RSA.匿名Diffie-Hellman.暂时Diffie-Hellman.固定Diffie-Hellman.Fortezza 生成对话密 ...

  9. Java笔记-DH密钥交换获取密钥及AES加解密

    DH密钥交换是这样的: 程序运行截图如下: D:\java8\content\bin\java.exe -javaagent:D:\idea\content\lib\idea_rt.jar=61009 ...

  10. Java笔记-DH密钥交换

    DH密钥交换主要是两个公式的编写,即: ·公钥计算公式: ·密钥计算公式: 生成随机数作为私钥 截图如下: 源码如下: DH.java package cn.it1995.tool;import ja ...

最新文章

  1. ThreadLocal的使用场景
  2. H - Cow Contest POJ - 3660(Floyd 传递闭包)
  3. 万字深度好文!视觉-语言(VL)智能:任务、表征学习和大型模型
  4. 使用花生壳自己架设网站:路由器后
  5. 图解TC++3.0开发教程
  6. python能和wincc一起用_python通过ado连接wincc数据库
  7. linux系统打开m3u8文件,M3U8 文件扩展名: 它是什么以及如何打开它?
  8. 我的第一款 Drone 插件
  9. oracle 索引 序列,【Oracle】表、视图、序列、索引
  10. 为什么整个互联网行业都缺前端工程师?
  11. Required String parameter 'images' is not present
  12. 腾讯面试Android高级岗。居然被一个多线程基础面倒了?
  13. 操作技巧——保障无线上网的技巧
  14. APP的UI自动化测试框架及平台化探索
  15. ubuntu-12.04.4-server安装
  16. java输入学生名字输出_用java实现:输入学生个数,并输入每个学生的名字还有分数,结果输出分数最高和分数第二高的学生......
  17. PortableApps使用入门
  18. Node.js详细安装教程(2021)
  19. 新能源汽车前景广袤但痛点多多,大圆柱电池能否提供最优解?
  20. 熊乃学 计算机,吴谋博士研究成果在权威期刊在线发表

热门文章

  1. 团队开发——冲刺2.g
  2. $(function() {});和$(document).ready(function() {});区别
  3. mac Sourcetree 账号密码输入错误后, 重新输入的方法
  4. FZU 2129 子序列个数(DP)题解
  5. 20190429 - 如何访问 macOS 的 httpd、mysql 等服务
  6. React --获取服务器数据的两种方式(Axios和FetchJsonp)
  7. Python学习笔记(5)practice:shopping_cart
  8. 跨域两种解决方案CORS以及JSONP
  9. 题解报告:hdu 1575 Tr A
  10. Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)