前几天和同事讨论IKE密钥交换流程时,提到了Diffie-Hellman交换。DH算法最主要的作用便是在不安全的网络上成功公共密钥(并未传输真实密钥)。但由于对于DH算法的数学原理则不清楚,因此私下对DH算法进行一个简单学习。

1. DH算法的交互流程:

  • Alice和Bob都有一个只有自己知道的私钥,在特定规则(g, a, p)下生成自己的公钥A;
  • Alice将自己的公钥A,连同g, p共同发给Bob
  • Bob在收到Alice发送来的公钥A, g, p后,先使用相同的规则((g, a, p))生成自己的公钥B;在使用Alice的公钥A计算生成共享密钥K
  • Bob将自己的公钥B发送给Alice即可。(Alice已经有g, p, 因此无需在发送)
  • Alice在接收到Bob的公钥B后,使用相同的规则计算成功共享密钥K

至此,Alice 和 Bob便同时拥有了共享密钥K。此时由于各自的私钥a,b未在互联网上传播,因此即使存在窥探者Eve,他仅通过公开的A\B\g\p在短时间内无法破解出a,b,K。因此DH算法便可以在不安全的网络上协商出密钥,基于此构建安全的加密通道。

2. 疑问:Alice和Bob最后计算的K值一样吗?

对于DH整个交互流程来说,比较简单,基本都可以理解。但是忽然说最后的K值相等,这多少有点突然和难以置信,让人有点猝不及防。

书本上都是这样解释的:

所以Alice和Bob的共享密钥K是相同的。但是,总感觉没有get到要领和精髓。因为我不知道mod(求余)的运算规则,不知道如下等式是否成立???

因此半夜凌晨1点从刚暖热乎的被窝又爬了出来,想要证明下他们给的公式是否正确( 其实当成定理记住也就OK了,不过我嘛,还是爬起来了)。证明这个公式也很简单:将求余运算转换为加减乘除运算,然后利用二项式展开公式便可以得到答案

至于为什么要将求余运算转换为加减乘除四则运算,原因是我不知道求余算法的规则,不然我也不需要多此一举了。

证明开始:

令:

则:

根据①②式可得:

将③带入上式可得:

使用二项式展开公式将 −∗ 展开,则有

从这个表达式可以看出,前a项(i∈[0,−1])每一项都是p的整数倍,因此求余运算时必定为0,因此:

这下好了,高兴的睡不着觉了。

DH算法图解+数学证明的更多相关文章

  1. SSL握手两大加密算法 : RAS算法 和 DH算法解析

    写下此博客记录心得体会,如有不足之处请指正   先是手稿笔记 :  正文:   在Https协议中,Client端和Server端需要三个参数才能生成SessionKey来加密信息. 三个参数分别是 ...

  2. openswan中DH算法说明

    Author       : Email         : vip_13031075266@163.com Date          : 2021.01.11 Copyright : 未经同意不得 ...

  3. 信息加密之非对称加密DH算法

    非对称加密算法是相对于对称加密算法来说的,对于对称加密算法请查阅之前的总结,今天为大家介绍一下DH算法,DH是一种密钥交换算法,接收方根据发送方加密时的密钥,生成接收方解密密钥.下面就一起来学习一下吧 ...

  4. <算法图解>读书笔记:第1章 算法简介

    阅读书籍:[美]Aditya Bhargava◎著 袁国忠◎译.人民邮电出版社.<算法图解> 第1章 算法简介 1.2 二分查找 一般而言,对于包含n个元素的列表,用二分查找最多需要\(l ...

  5. [转]PLA算法总结及其证明

    PLA算法总结及其证明 http://m.blog.csdn.net/article/details?id=45232891 分类: 机器学习 PLA(Perception Learning Algo ...

  6. Lengauer-Tarjan算法的相关证明

    Lengauer-Tarjan算法的相关证明 0. 约定 为简单起见,下文中的路径均指简单路径(事实上非简单路径不会对结论造成影响). \(V\)代表图的点集,\(E\)代表图的边集,\(T\)代表图 ...

  7. 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网

    任何国家都无法限制数字货币.为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用  c.分布式算法的实现 d.数据存储技 ...

  8. 算法图解...pdf

    电子书资源:算法图解 书籍简介   本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法. ...

  9. 一个关于AdaBoost算法的简单证明

    下载本文PDF格式(Academia.edu) 本文给出了机器学习中AdaBoost算法的一个简单初等证明,需要使用的数学工具为微积分-1. Adaboost is a powerful algori ...

随机推荐

  1. vsftpd安装配置

    vsftpd安装配置 vsftpd测试服务器: 192.168.1.191 1.安装: yum provides */vsftpd yum install vsftpd -y 2.匿名用户最基本配置( ...

  2. 黑盒渗透测试【转自HACK学习-FoxRoot】

    因 搜到一篇写渗透测试步骤比较详细的文章,转过来学习,方便时常看看. 内容如下: 一.信息搜集 主动/被动搜集 信息搜集分为主动信息搜集和被动信息搜集. 主动信息搜集就是通过直接访问和扫描信息的方式进 ...

  3. Python 列表解析式竟然支持异步?

    PEP原文:https://www.python.org/dev/peps/pep-0530 PEP标题:PEP 530 -- Asynchronous Comprehensions PEP作者:Yu ...

  4. 干了8年Android开发熬到年薪40万,突然接到被辞退消息,应该怎么办?

    01 36岁Android开发,为公司工作8年,昨天HR说公司不准备续约 前天晚上,有个读者给我留言,讲述了他自己比较气愤的一件事,感觉自己委屈又不值. 这位朋友不愿意透露姓名,就叫他H先生吧. H先 ...

  5. 【笔记】KNN之网格搜索与k近邻算法中更多超参数

    网格搜索与k近邻算法中更多超参数 网格搜索与k近邻算法中更多超参数 网络搜索 前笔记中使用的for循环进行的网格搜索的方式,我们可以发现不同的超参数之间是存在一种依赖关系的,像是p这个超参数,只有在 ...

  6. Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘)

    前言 在一些Android项目中往往需要预置第三方输入法或自己的输入法,这篇文章就简单讲解如何预置第三方输入法apk及设置默认输入法 结果展示 在介绍基本的调整方法前,先看看效果图, 如下 调整方法 ...

  7. 不同JDK版本的流异常处理

    1.JDK7以前的流异常try-catch处理 public static void main(String[] args) { FileInputStream fis = null; try { f ...

  8. idea自定义 tags 删除

    idea custom tags 添加后 如何去除 如何去除 custom tags 随便@一些字符串,这时候alt+enter弹出 Add xxx to custom tags, 这时候按有方向键进 ...

  9. spring cloud alibaba版本选择

    https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud Version Spring Cloud Version ...

  10. HTML <form> 标签的 method 属性

    定义和用法 method 属性规定如何发送表单数据(表单数据发送到 action 属性所规定的页面). 表单数据可以作为 URL 变量(method="get")或者 HTTP p ...