添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

DH交换算法简介

Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该算法,之后被应用于安全领域,比如 Https 协议的 TLS(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以 DH 算法作为密钥交换算法。

Whitfield Diffie与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm)。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实现加密和解密消息。

在这里插入图片描述
假如用户A和用户B希望交换一个密钥。
取素数p和整数a,a是p的一个原根,公开a和p。

A选择随机数XA<p,并计算YA=a^XA mod p。
B选择随机数XB<p,并计算YB=a^XB mod p。

每一方都将X保密而将Y公开让另一方得到。
A计算密钥的方式是:K=(YB) ^XA modp
B计算密钥的方式是:K=(YA) ^XB modp
关于算法的具体原理和证明可以参考下面的优秀博客
迪菲-赫尔曼密钥交换
DH密钥交换算法

Python算法的实现

这里关于DH算法的原理和实例将不在赘述,这里重点介绍一下python算法的实现,啊哈哈,主要是为了写作业的时候偷懒
代码使用的例题如下:
假设Alice和Bob打算利用DH算法交换一个密钥用于之后的通信,为次,他们首先选定一个质数p=13和一个原根g=7,假设你在他们通信过程中以及截获了Alice发送给Bob的公钥A=4和Bob发送给Alice的公钥B=9,求出Alice和Bob的私钥以及他们交换的公钥。
python实现:

#encoding=utf-8
#python3
#用于计算DH算法的python3脚本
#author:Monster
p=int(input("请输入公开的质数p:"))
g=int(input("请输入p的原根g:"))
KA=int(input("请输入A传给B的公钥KA:"))
KB=int(input("请输入B传给A的公钥KB:"))
for i in range(p):
	#print("try i="+str(i))
	if(pow(g,i)-KA)%p==0:
		XA=i
		#print("find XA="+str(i))
		break
for i in range(p):
	#print("try i="+str(i))
	if(pow(g,i)-KB)%p==0:
		XB=i
		#print("find XB="+str(i))
		break
K1=pow(KB,XA)%p
K2=pow(KA,XB)%p
if(K1==K2):
	print("A的私钥为:",XA)
	print("B的私钥为:",XB)
	print("A和B交换的密钥为:",K1)		

实现效果,将需要的信息输入程序:
在这里插入图片描述

若还有其他疑问,欢迎留言评论

d1 = pyDH . DiffieHellman () d2 = pyDH . DiffieHellman () d1_pubkey = d1 . gen_public_key () d2_pubkey = d2 . gen_public_key () d1_sharedkey = d1 . gen_shared_key ( d2_pubkey ) d2_sharedkey = d2 . gen_shared_key ( d1_pubkey ) d1_sharedkey == d2_sharedkey 默认情况下,它使用组 14(2048 位)。 使用另一个组(例如,15): d1 = pyDH . DiffieHellman ( 1.Diffie-Hellman密钥交换算法 (1)有两个全局公开的参数,一个素数p和一个整数a,a是p的一个原根(对于正整数gcd(a,m)=1,如果a是模m的原根,那么a是整数模m乘法群的一个生产元); (2)假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA,并计算公开密钥YA = a^XA mod p,A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选 diffie-Hellman(DH)算法原理 Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个用户安全的交换一个秘钥一遍后面的报文加密。 Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度。 1)由消息发送的一方构建密钥,这里由甲方构建密钥。 2)由构建密钥的一方向对方公布其公钥 Boblee人工智能硕士毕业,擅长及爱好python,基于python研究人工智能、群体智能、区块链等技术,并使用python开发前后端、爬虫等。1.Diffie-Hellman密钥协商算法Diffie-Hellman密钥协商算法在1976年在Whitfield Diffie和Martin Hellman两人合著的论文New Directions in Cryptography(Section Ⅲ... 国密SM2算法Python工具包,实现SM2数字签名与验证、公钥加解密以及密钥协商等功能,也可基于本工具包提供的椭圆曲线运算相关函数自行设计算法和协议。代码完整,复制即用。 https://blog.csdn.net/chengqiuming/article/details/83002352 https://baike.baidu.com/item/Diffie-Hellman%E7%AE%97%E6%B3%95/20... 密钥交换/协商机制的几种类型依靠非对称加密算法原理:拿到公钥的一方先生成随机的会话密钥,然后利用公钥加密它;再把加密结果发给对方,对方用私钥解密;于是双方都得到了会话密钥。举例:RSA依靠专门的密钥交换算法原理:见下图举例:DH 算法及其变种(ECDH算法)DH算法DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,这个神奇的交换原理完全由数学理论支持1. Alice选择1个素数p,比如5... DiffieHellman key exchange 【维基百科】:http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange 【国际协议】:http://www.ietf.org/rfc/rfc2631.txt 【简单讲解】:http://searchsecurity.techtarget.com/definit DH_Crypto概况介绍原理介绍RSA_signConnection.pyDH_Client.pyDH_Server.pycall_DH.pyDH.py(用于Qt界面设计)结果展示 本次实验实现DH原理的双机通信。DH_Client和DH_Server的main部分与call_DH部分大同小异,主要是用于本地调试显示,可以忽略。 p,q为公有信息。 1.Alice 选择一个范围在[1, p-1]的随机数,为rand_a 2.Alice 计算cal_a = q^rand_a mod p 1、Diffie-Hellman算法简介 Diffie-Hellman算法(以下简称为:DH算法),是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 起基本流程原理如下: 假定小明和小红期望在一个不安全的网络中协商一个共同的密钥,那么进行如下步骤: 两人先说好大素数(质数)p和它的原始根g。 小明随机产生一个数a,并计算A = p^a mod g, 发送给小红。 小红随机产生一个数b,并计算...... 什么是Diffie-Hellman密钥交换算法Diffie-Hellman 密钥交换算法的安全性是基于Zp上的离散对数问题。设p是一个满足要求的大素数,并且a(0&lt;a&lt;p)是循环群Zp的生成元,a和p公开,所有用户都可以得到a和p。在两个用户A和B通信时,他们可以通过如下步骤协商通信所使用的密钥: 取素数p和整数a,a是p的一个原根,公开a和p。 A选择随机数XA&lt;p,... 可认证的DH密钥交换协议,供大家参考,具体内容如下一、实验目的通过使用密码学库实现可认证的DH密钥交换协议(简化STS协议),能够编写简单的实验代码进行正确的协议实现和验证。二、实验要求1、熟悉DH密钥交换算法基本原理;2、理解原始DH密钥交换算法存在的中间人攻击;3、理解简化STS协议抗中间人攻击的原理。4、掌握使用java编写实验代码进行正确的简化STS协议实现和验证。三、 开发环境JDK 1...