更加安全的密钥生成方法Diffie-Hellman
更加安全的密钥生成方法Diffie-Hellman
之前我们谈到了密钥配送的问题,这个世界是如此的危险, 一不小心通信线路就会被监听,那么我们怎么在这种不安全的线路中传递密钥呢?
这里我们介绍一下Diffie-Hellman密钥交换算法。这个算法是由Whitfield Diffie和Martin Hellman在1976年共同发明的一种算法。
通过这个算法,双方只需要交换某些共同的信息就可以生成出共享的密钥。是不是很神奇?
我们看下具体的步骤:
上面的图就是Diffie-Hellman密钥交换算法,假如x要向y发送消息,如果采用上面的算法,那么需要如下几个步骤:
- 生成两个共享的质数 G 和P,并将这两个数在x和y中共享。
P是一个非常大的质数,而G是P的生成元(生成元的乘方结果和1~P-1中的数字是一一对应的)。
这两个数G和P不需要保密。被窃取也没关系。
- x生成一个随机数A,这个随机数只能x知道。A是一个1~P-2中的一个整数。
- y生成一个随机数B,这个随机数只能y知道。B是一个1~P-2中的一个整数。
- x将GA mod P的结果发给y,这个结果不用保密
- y将GB mod P的结果发给x,这个结果不用保密
- x使用步骤5的结果和随机数A计算最终的共享密钥(GB mod P)A mod P = GA*B mod P
- y使用步骤4的结果和随机数B计算最终的共享密钥(GA mod P)B mod P = GA*B mod P
我们可以看到6和7算出来的最终的密钥是一样的。
接下来,我们探讨下Diffie-Hellman算法的安全性:
在该算法中,暴露在外部的变量是P,G,GA mod P和GB mod P 这4个变量。
根据这四个变量来生成最终的GA*B mod P是非常困难的。
这个问题涉及到了离散对数问题,要解决是非常困难的。所以,我们可以相信Diffie-Hellman算法是非常安全的。
更多内容请访问 http://www.flydean.com/diffie-hellman/
更加安全的密钥生成方法Diffie-Hellman的更多相关文章
- 深入浅出Diffie–Hellman
一.作者 这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie).马丁·赫尔曼(Martin Edward Hellman)于1976年发表. 二.说明 它是一种安全协 ...
- 浅析Diffie–Hellman
一.作者 这个密钥交换方法,由惠特菲尔德·迪菲(Bailey Whitfield Diffie).马丁·赫尔曼(Martin Edward Hellman)于1976年发表. 二.说明 它是一种安全协 ...
- 非对称加密技术里面,最近出现了一种奇葩的密钥生成技术,iFace人脸密钥技术
要说到非对称加密技术啊,得先说说对称加密技术 什么是对称加密技术 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥加密. 也就是密钥也可以用作解密密钥,这种方法在密码学中叫做对称 ...
- SSL证书生成方法【转】
转自 SSL证书生成方法 - fyang的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/fyang2007/article/details/6180361 一般情况 ...
- Node.js 内置模块crypto加密模块(4) Diffie Hellman
Diffie-Hellman( DH ):密钥交换协议/算法 ( Diffie-Hellman Key Exchange/Agreement Algorithm ) 百科摘录: Diffie-Hell ...
- 详细分享TortoiseGit配置密钥的方法
详细分享TortoiseGit配置密钥的方法 TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥.使用命令ssh-keygen -C "邮箱地址&q ...
- 第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密
第十五个知识点:RSA-OAEP和ECIES的密钥生成,加密和解密 1.RSA-OAEP RSA-OAEP是RSA加密方案和OAEP填充方案的同时使用.现实世界中它们同时使用.(这里介绍的只是&quo ...
- RSA密钥生成与使用
RSA密钥生成与使用 openssl生成工具链接:http://pan.baidu.com/s/1c0v3UxE 密码:uv48 1. 打开openssl密钥生成软件打开 openssl 文件夹下的 ...
- SQL Server开发接口生成方法
为提高开发效率,生成固定格式的接口是必须的,以下以提供新增/修改/删除/读取接口为例: 以常见的表结构为例,特殊表结构可自己尝试去调整方法 主要通过系视图 sys.columns生成方法:为包含列的对 ...
随机推荐
- C语言把整数转换为字符串
目录 1.把整数/长整数格式化输出到字符串 2.注意事项 3.版权声明 各位可能在网上看到用以下函数可以将整数转换为字符串: itoa(); //将整型值转换为字符串 ultoa(); // 将无符号 ...
- thinkphp后端开发ajax接口开发测试
数据自动填充,Firefox的网络查看JSON数据,查错. 同时,用getLastSql函数查询,并且开启日志文件记录网页执行的全过程,还可以用thinkPHP内置的trace的跟踪. 谁有更好地方法 ...
- python工业互联网监控项目实战2—OPC
OPC(OLE for Process Control)定义:指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范.它给工业控制领域提供了一种标准 ...
- 文件的读写 - open
#写文件,r路径\n 空格\t 缩进# fan=open(r'C:/Users/demiyangping_v/Desktop/fan.txt','w', encoding='utf-8')# fan. ...
- 21.1 Math(数学运算)方法使用 、工具类
package day21_static.meathDemo; //Math: 包含一些基本的数学运算方法 //从api中搜Math,它都用的static修饰. public class MethDe ...
- String 对象-->length 属性
1.定义和用法 length 属性返回字符串的长度(字符数). 语法: string.length 注意:根据各国字符长度计算长度 举例: var str = 'abner pan' console. ...
- shell 数组遍历加引号和不加引号的区别?
前言 shell 是一个比较神奇的国度,里面有太多的坑需要填,今天需要填的坑就是,数组遍历在使用时加了引号和不加引号的区别. 案例 解析: 不加引号,数组中元素间的“空格”就会编程换行符 加引号, ...
- windows powershell校验下载的文件MD5和SHA1值
Windows自带MD5 SHA1 SHA256命令行工具 certutil -hashfile <文件名> <hash类型> 打开windows powershell,进入到 ...
- 11-JS变量
一. JavaScript 是什么 JavaScript是一种运行在客户端(浏览器)的脚本语言 客户端:客户端是相对于服务器而言的,在这里先简单理解为浏览器 浏览器就是一个客户端软件,浏览器从服务器上 ...
- Daily Scrum 1/14/2016
Zhaoyang & Yandong: Still optimizing the speech input interface Dong & Fuchen: Image asynchr ...