密钥交换/协商机制的几种类型

依靠非对称加密算法

原理:拿到公钥的一方先生成随机的会话密钥,然后利用公钥加密它;再把加密结果发给对方,对方用私钥解密;于是双方都得到了会话密钥。

举例:RSA

依靠专门的密钥交换算法

原理:见下图

举例:DH 算法及其变种(ECDH算法)

DH算法

DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,这个神奇的交换原理完全由数学理论支持

1. Alice选择1个素数p,比如509,底数g 比如5,随机数a比如123

然后计算 然后计算A=g^a mod p=bcmod(bcpow(5,123),509)=215

Alice现在有[p=509,g=5,a=123,A=215], 把p,g,A发送给Bob

2. Bob收到p=509,g=5后,选择一个随机数b=456

计算 B=g^b mod p=bcmod(bcpow(5,456),509)=181

同时计算s=A^b mod p=bcmod(bcpow(215,456),509)=121

Bob现在有[p=509,g=5,b=456,B=181,s=121,A=125]

Bob把B=181发送给Alice

3.

Alice现在有[p,g,a,A,B]

Alice计算s=B^a mod p=bcmod(bcpow(181,123),509)=121

所以最终双方协商出的密钥s是121。注意到这个密钥s并没有在网络上传输。而通过网络传输的p,g,A和B是无法推算出s的,因为实际算法选择的素数是非常大的。

所以,更确切地说,DH算法是一个密钥协商算法,双方最终协商出一个共同的密钥,而这个密钥不会通过网络传输。

如果我们把a看成甲的私钥,A看成甲的公钥,b看成乙的私钥,B看成乙的公钥,DH算法的本质就是双方各自生成自己的私钥和公钥,私钥仅对自己可见,然后交换公钥,并根据自己的私钥和对方的公钥,生成最终的密钥secretKey,DH算法通过数学定律保证了双方各自计算出的secretKey是相同的

但是DH算法并未解决中间人攻击,即甲乙双方并不能确保与自己通信的是否真的是对方。消除中间人攻击需要其他方法

DH算法是一种密钥交换协议,通信双方通过不安全的信道协商密钥,然后进行对称加密传输。

DH算法没有解决中间人攻击。

但是 DH 算法本身也有缺点——它不支持认证。

也就是说:它虽然可以对抗“偷窥”,却无法对抗“篡改”,自然也就无法对抗“中间人攻击/MITM”(缺乏身份认证,【必定会】遭到“中间人攻击/MITM”)

ECDHE

1.客户端随机生成随机值Ra

计算Pa(x, y) = Ra * Q(x, y),

Q(x, y)为全世界公认的某个椭圆曲线算法的基点

将Pa(x, y)发送至服务器

2.服务器随机生成随机值Rb

计算Pb(x,y) = Rb * Q(x, y)

将Pb(x,y)发送至客户端

3.客户端计算Sa(x,y) = Ra * Pb(x,y)

服务器计算Sb(x,y) = Rb *Pa(x,y)

4.算法保证了Sa = Sb = S,提取其中的S的x向量作为密钥(预主密钥)

python 椭圆曲线dh密钥交换_密钥交换之DH算法相关推荐

  1. python多目标优化_多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码...

    前言:最近太忙,这个系列已经很久没有更新了,本次就更新一个Deb大神的NSGA2的"升级版"算法NSGA3.因为multi-objective optimization已经被做烂了 ...

  2. python 深度 视差 计算_开源双目视觉BM算法-Matlab/Python/Javascript

    更新:应朋友要求,增加了一个Python版本的BM算法和Javascript版本 Python版本BM​github.com JAVASCRIPT版本BM​github.com 整理以前的代码,找到了 ...

  3. python猴子选大王_“猴子选大王” 算法 python实现

    今天来实现一个约瑟夫环算法,下面是一道新浪的面试题: m只猴子围坐成一个圈,按顺时针方向从1到m编号.然后从1号猴子开始沿顺时针方向从1开始报数,报到n的猴子出局,再从刚出局猴子的下一个位置重新开始报 ...

  4. 数据结构与算法python语言描述答案_《数据结构与算法Python语言描述》习题第二章第一题(python版)...

    1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 4 """ 5 定义一个表示时间的类Time6 a)Time(hour ...

  5. python声纹识别_声纹识别算法、资源与应用(二)

    <声纹识别·资源篇> 1. Kaldi 最流行的语音技术研究平台,没有之一.代码运行鲁棒性强.架构良好,便于算法修改.定制.如果你是高校科研人员,工程实现能力有限,那么没关系,你只要懂点S ...

  6. python实现面部特效_【AI美颜算法】300行Python实现基于人脸特征的美颜算法

    先上效果图: AI美颜 人类一直是一个看脸的物种,人人都希望可以变得更美是无可争议的,而美颜类应用的出现拯救了所有人,从此人类进入了美(照)颜(骗)时代. .... 每次写技术blog都要写一堆废话引 ...

  7. python 凝聚层次聚类_关于层次聚类算法的python实现

    from scipy.cluster import hierarchy 0.层次聚类的概念 层次聚类和k-means一样都是很常用的聚类方法.层次聚类是对群体的划分,最终将样本划分为树状的结构.他的基 ...

  8. python牛顿法计算平方根_常用的平方根算法详解与实现

    本文从属于笔者的数据结构与算法系列文章. SquareRoot 平方根计算一直是计算系统的常用算法,本文列举出几张简单易懂的平方根算法讲解与实现.其中Java版本的代码参考这里 Reference B ...

  9. python除法运算定律_除法竖式算法的原理是什么?

    我们知道,一个数恰好整除另一个数是比较难得的,更多的是出现余数不为 的情况.于是就有了所谓的带余除法.用 去除 ,商数是 ,余数是 : 举个具体的例子更好看.33÷7,商为4,余数为5: . 这个带余 ...

  10. python模拟砍价代码_拼多多砍价算法实现探究

    拼多多的砍价,邀好友进行砍价,想必大家对这个不会陌生.作为一个程序员来说比较好奇它的每个人能砍的价格是如何实现的.根据经验来看,一般是前几个能砍的价格是比较高的.而后来的好友基本上能砍的价格是微乎其微 ...

最新文章

  1. 互信息 卡方 - 文本挖掘
  2. 威佐夫博弈:百练OJ:1067:取石子游戏
  3. php和mysql两种不同方式的分割字符串和类型转换
  4. Full_of_Boys训练5总结
  5. 协议转换器是怎么分类的?主要有哪些类别?
  6. 当连接一个 IP 不存在的主机时,TCP握手过程是怎样的?
  7. ESP32开发 2.添加.c.h并修改CMakeLists,来定制自己的工程
  8. linux mysql 查询慢_linux – MySQL非常简单的SELECT查询速度极慢
  9. Hive 内部表外部表
  10. 华为android打开usb调试模式,华为 PE-CL00 开启USB调试模式
  11. Leetcode 50. Pow(x, n)碰到的一些问题
  12. blowfish java_Java与C++通过CBC、blowfish互相加解密
  13. fis3 前端项目构建,一步步来
  14. PPT动画制作飘落的树叶免费ppt模板
  15. uoj#209【UER #6】票数统计
  16. Android-自定义UI模板
  17. Google GMS认证问题
  18. 微信小程序入门教程学习笔记
  19. android扫码 超简单零代码
  20. carsim设置坡度的模块

热门文章

  1. js编写五种基础排序(冒泡排序、选择排序、插入排序、快速排序、sort)
  2. 苹果6怎样分屏_皮皮喵聚合搜索漫画APP苹果版IOS付费版更新 0.3.6,已购账号快来更新,分享一下,兑换码大赠送活动,共享喜悦!...
  3. 如何确保网站的安全性
  4. Hive数仓实战--用户行为分析-每日周月活跃设备统计
  5. 【旧资料整理】硬盘-数据错误(循环冗余检查)
  6. *TEST 3 for NOIP 哈希有毒
  7. android console服务,如何使能和关闭android设备上的console功能
  8. Unity刚体穿过条件,模仿《GRIS》楼梯效果,可从下方穿过
  9. python100天发音_GitHub - hhttss999/Python-100-Days: Python - 100天从新手到大师
  10. 【ES】Elasticsearch的特点优点 为什么比MySQL快?