【寒江雪】DIFFIE-HELLMAN密钥分配机制
来源:互联网 发布:中央电视台网络电视 编辑:程序博客网 时间:2024/06/05 04:17
前言
Diffie-Helman为公开的密钥算法,发明于1976年.该算法不能用于加密或解密,而是用于密钥的传输与分配.
DH算法安全性体现在:在有限域上计算离散对数非常困难.
&esmsp; 离散对数:定义素数p的本原根为这样一个数,它能生成1~p-1所有数的一个数.现设g为p的本原根,则
g modp, g2mod p, … , gp-1 mod p
是两两互不相同的并且包含1到p-1的整数的某种排列。对于任意数b及素数p的本原根g,可以找到一个唯一的指数i,满足
b=gimod p,0<=i<=p-1
则称指数i为以g为底模p的离散对数
DIFFIE-HELLMAN算法描述
在这一机制中,通信双方不需要第三方的介入来完成密钥的交换.
通信双方协商两个可公开的数字g,p
p:是一个素数
g:g<p,且g是p的一个本原根
随后通信双方各自产生一个秘密的数字,X,Y
利用各自产生的数字计算可以公开的密钥A,B.其中A=gXmod p;B=gYmod p;
随后,通信双方可以通过对方的公开密钥来计算出通信用的密钥.该密钥为通信双方共享.
计算密钥的原理:
Key=BXmod p=(gYmod p)Xmod p=gYXmod p=gXYmod p=(gXmod p)Ymod p=AYmod p=Key*
易证Key=Key*
DIFFIE-HELLMAN的缺点
- 在没有数字签名的情况下,DIFFIE-HELLMAN容易受到中间人攻击
- 图示如下:
[来自百度对本原根的描述:如果g是素数p的本原根,则数g modp, g2mod p, … , gp-1 mod p 是不同的并且包含1到p-1的整数的某种排列。]
利用代码演示其中一种场景
#include<iostream>#include<cmath>using namespace std;int g, p;class People {private: int secret_num; int public_key;public: People(int A,int gg,int pp) :secret_num(A) { public_key = (int)pow(gg, A) % pp; } int getPublicKey() { return public_key; } int getKey(int other,int pp) { return (int)pow(other, secret_num) % pp; }};int main() { g = 6; p = 17; People Alice(5, g, p); People Bob(3, g, p); //现在,Alice 想要发送'A'给Bob //首先,Alice 使用Bob的公钥计算密钥 int key = Alice.getKey(Bob.getPublicKey(), p); cout << "Alice计算出来的密钥:" << key << endl; //接着,Alice 使用密钥对'A'进行加密,得到密文C char C = 'A' ^ (char)key; cout << "密文C:" << (int)C << endl; //现在,Bob 得到了密文C //Bob首先通过Alice的公钥计算出密钥 int key_bob = Bob.getKey(Alice.getPublicKey(), p); cout << "Bob计算出来的密钥:" << key << endl; //接着,Bob 使用密钥对C进行解密,得到明文P char P = C^(char)key_bob; cout << "Bob计算出来的明文P:" << P << endl; return 0;}
Copyright© by 寒江雪
Date:2016.12.09
0 0
- 【寒江雪】DIFFIE-HELLMAN密钥分配机制
- Diffie-Hellman密钥交换
- Diffie-Hellman算法(密钥)
- Diffie-Hellman密钥交换
- Diffie-Hellman密钥交换
- Diffie-Hellman密钥交换
- 关于Diffie-Hellman密钥协商机制以及中间人攻击
- Diffie-Hellman密钥交换思想
- Diffie-Hellman密钥交换思想
- Diffie-Hellman 密钥交换协议
- Diffie-Hellman密钥交换 -- 浅析
- Diffie-Hellman 密钥交换算法
- Diffie-Hellman密钥交换算法
- Diffie-Hellman密钥交换算法及其优化
- Diffie–Hellman密钥交换算法
- Diffie–Hellman 密钥交换协议简介
- Diffie-Hellman密钥交换算法原理
- Diffie-Hellman密钥交换算法及其优化
- 将TOMCAT注册成系统服务的意义
- 此篇置顶 以索引「安卓」方面的一些博文
- VM安装CentOS7 Minimal静态IP配置,并设置VM端口转发和xshell连接(一)
- 稀疏表示step by step
- HBase Shell 常用命令及例子
- 【寒江雪】DIFFIE-HELLMAN密钥分配机制
- windwos下通过命令启动Sublime Text3
- angularJs中datatable实现
- 链表反转(java实现)递归非递归
- Intellij Idea 下 生成WebServiceClient (WS客户端)
- 12.10【提高C组】题解
- 【PHP】冒泡排序以及优化
- R-CNN for Pose Estimation and Action Detection
- Python Tables 学习笔记