Diffie-Hellman密钥协商算法

一、概述

Diffie-Hellman密钥协商算法主要解决秘钥配送问题,本身并非用来加密用的;该算法其背后有对应数学理论做支撑,简单来讲就是构造一个复杂的计算难题,使得对该问题的求解在现实的时间内无法快速有效的求解(computationally infeasible )。

理解Diffie-Hellman密钥协商的原理并不困难,只需要一点数论方面的知识既可以理解,主要会用到简单的模算术运算、本原根、费马小定理、离散对数等基础数论的知识。在现代密码学中的基础数论知识梳理中已经对这些知识做了必要的总结。

二、从何而来

DH密钥协商算法在1976年在Whitfield Diffie和Martin Hellman两人合著的论文New Directions in Cryptography(Section Ⅲ PUBLIC KEY CRYPTOGRAPHY)中被作为一种公开秘钥分发系统(public key distribution system)被提出来。原文的叙述过程比较简单,但基本阐述了算法的原理以及其可行性。

在该论文中实际上提出了一些在当时很有创新性的思想。原论文重点讨论两个话题:

(1)在公网通道上如何进行安全的秘钥分派。

(2)认证(可以细分为消息认证和用户认证)。

为了解决第一个问题,原文提出两种方法:公钥加密系统(public key cryptosystem)和秘钥分发系统(public key distribution system)。对于公钥加密系统,原文只是勾画了一种比较抽象的公钥加密系统的概念模型,重点是加解密采用不同的秘钥,并总结了该系统应该满足的一些特性,相当于是一种思想实验,并没有给出具体的算法实现途径,但这在当时应该来说已经足够吸引人。后来RSA三人组(Ron Rivest、Adi Shamir 和 Leonard Adleman)受此启发,经过许多轮失败的尝试后,于第二年在论文A Method for Obtaining Digital Signatures and Public-Key Cryptosystems中提出了切实可行且很具体的公钥加密算法--RSA公钥加密算法。而对于秘钥分发系统,就是本文的DH秘钥协商算法。

为了解决第二个问题,原文通过单向函数(one-way function)来解决,这就是单向认证的问题。另外作者还讨论了这些密码学问题之间的关联性以及如何相互转化。比如一个安全的密码系统(可以防御明文攻击)可以用来生成一个的单向函数、公钥加密系统可以用来作为单向认证、陷门密码系统可以用来生成一个公钥加密系统。数学难题的计算复杂度被当成一种保障密码学安全问题的有效工具被利用起来,这一重要思想贯穿现代密码学的许多加密算法。

三、算法流程及原理

按照惯例,以Alice和Bob这两个密码学中的网红为角色,述阐DH算法的流程。

假设Alice需要与Bob协商一个秘钥(秘钥本质上就是一个比特序列,从计算的角度看就是一个大数)。

1)首先Alice与Bob共享一个素数$p$以及该素数$p$的本原根$g$(geneator),当然这里有$2\leqslant g\leqslant p-1$。这两个数是可以不经过加密地由一方发送到另一方,至于谁发送给并不重要,其结果只要保证双方都得知$p$和$g$即可。

2)然后Alice产生一个私有的随机数$A$,满足$1 \leqslant A\leqslant p-1$,然后计算$g^{A}\;mod\;p=Y_{a}$,将结果$Y_{a}$通过公网发送给Bob;与此同时,Bob也产生一个私有的随机数$B$,满足$1 \leqslant B\leqslant p-1$,计算$g^{B}\;mod\;p=Y_{b}$,将结果$Y_{b}$通过公网发送给Alice。

3)此时Alice知道的信息有$p,g,A,Y_{a}$,其中数字$A$是Alice私有的,只有她自己知道,别人不可能知道,其他三个信息都是别人有可能知道的;Bob知道的信息有$p,g,A,Y_{A}$,其中数字$B$是Bob私有的,只有他自己知道,别人不可能知道,其他都是别人有可能知道的。

到目前为止,Alice和Bob之间的秘钥协商结束。

Alice通过计算$K_{a}=(Y_{b})^A\;mod\;p$得到秘钥$K_{a}$,同理,Bob通过计算$K_{b}=(Y_{a})^B\;mod\;p$得到秘钥$K_{b}$,此时可以证明,必然满足$K_{a}=K_{b}$。因此双方经过协商后得到了相同的秘钥,达成秘钥协商的目的。

证明:

对于Alice有:

$K_{a}=(Y_{b})^A\;mod\;p=(g^B\;mod\;p)^{A}\;mod\;p=g^{B\times A}\;mod\;p$

对于Bob有:

$K_{b}=(Y_{a})^B\;mod\;p=(g^{A}\;mod\;p)^{B}\;mod\;p=g^{A\times B}\;mod\;p$

可见,Alice和Bob生成秘钥时其实是进行相同的运算过程,因此必然有$K_{a}=K_{b}$。"相同的运算过程"是双方能够进行秘钥协商的本质原因,类似的利用椭圆曲线进行秘钥协商也是与之相同的原理。

更严密地考虑,$A$和$B$不应该选择$p-1$,也就是说只能在集合$\left \{ 1,2,3,...,p-2 \right \}$中选择。这是因为如果选择$p-1$,那么由费马小定理可知,情况就退化成了$g^{p-1}\equiv1\;(mod\;p)$的情况,对秘钥协商的机密性构成威胁。

所以总结起来,整个流程串起来大概就是这样:

那么窃听者Eve能否破解秘钥呢?首先要知道Eve能够得知哪些信息,显然Eve能够窃听到的信息只能有$p,g,Y_{a},Y_{b}$,现在的问题是Eve能够通过以上信息计算出$K_{a}$或者$K_{b}$吗?要计算$K_{a}$或者$K_{b}$需要知道$A$或者$B$。

以计算$A$为例,Eve能根据条件$g^{A}\;mod\;p=Y_{a}$计算出$A$吗?实际上当$p$是大质数的时候,这是相当困难的,这就是离散对数问题。实际上在论文发表的当时,计算该问题的最有效的算法的时间复杂度大约是$O(\sqrt{p})$。也正是求解该问题在计算上的困难程度保证了DH算法的安全性。如果能够找到对数时间复杂度的算法,那么该算法即容易被攻破。

四、一个实例

1)假设Alice和Bob共享的$p$和$g$分别是$p=17,g=3$,显然这里$g=3$是$p=17$的一个本原根,实际上$3,5,6,7,10,11,12,14$都是17的本原根。

2)然后Alice选定一个私有数字,假设$A=15$,计算$Y_{a}=3^{15}\;mod\;17=14348907\;mod\;17=6$,将6发送给Bob;同时Bob也选定一个私有的数字,假设$B=13$,计算$Y_{a}=3^{13}\;mod\;17=1594323\;mod\;17=12$,将12发送给Alice。

3)Alice计算秘钥$K_{a}=12^{15}\;mod\;17=2147483647\;mod\;17=8$,Bob计算秘钥$K_{b}=6^{13}\;mod\;17=2147483647\;mod\;17=8$。双方经过协商后,8最终成为双方的协商的秘钥。

实际上,当指数和模数的位数都比较大的时候,存在一种快速计算幂取模的算法叫做“反复平方算法”,实现取来也比较简单,在算法导论中第三十一章有相应的解释。

五、存在的问题

是否DH秘钥协商算法就一定安全呢?应该说也不是,因为存在一种伪装者攻击(或者称为中间人攻击)能够对这种秘钥协商算法构成威胁。

假设秘钥协商过程中,在Alice和Bob中间有一个称为Mallory的主动攻击者,他能够截获Alice和Bob的消息并伪造假消息,考虑如下情况。

1)Alice和Bob已经共享一个素数$p$及其该素数$p$的本原根$g$,当然Mallory监听到报文也得知了这两个消息。

2)此时Alice计算$Y_{a}=g^{A}\;mod\;p$,然而在将$Y_{a}$发送给Bob的过程中被Mallory拦截,Mallory自己选定一个随机数$S$,计算$Y_{sb}=g^{S}\;mod\;p$,然后将$Y_{sb}$发送给了Bob。

3)同时Bob计算$Y_{b}=g^{B}\;mod\;p$,然而在将$Y_{b}$发送给Alice的过程中被Mallory拦截,Mallory自己选定一个随机数$T$,计算$Y_{ta}=g^{T}\;mod\;p$,然后将$Y_{ta}$发送给了Alice。

由于通讯消息被替换,Alice计算出的秘钥实际上是Alice和Mallory之间协商秘钥:$K_{am}=g^{A \times T}\;mod\;p$;Bob计算出的秘钥实际上是Bob与Mallory之间协商的秘钥:$K_{bm}=g^{B \times S}\;mod\;p$。如果之后Alice和Bob用他们计算出的秘钥加密任何信息,Mallory截获之后都能够解密得到明文,而且Mallory完全可以伪装成Alice或者Bob给对方发消息。

六、References

1、New Directions in Cryptography

2、密码编码学与网络安全原理与实践

3、图解密码技术

原文地址:https://www.cnblogs.com/qcblog/p/9016704.html

时间: 2024-10-14 17:15:30

Diffie-Hellman密钥协商算法的相关文章

SSL/TLS/WTLS原理(密钥协商的形象化比喻:用服务器的公钥协商加密格式,然后再加密具体的消息)good

一 前言 首先要澄清一下名字的混淆: 1 SSL(Secure Socket Layer)是netscape公司设计的主要用于web的安全传输协议.这种协议在WEB上获得了广泛的应用. 2 IETF(www.ietf.org)将SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小.由于本文中没有涉及两者间的细小差别,本文中这两个名字等价. 3 在WAP的环境下,由于手机及手持设备的处理和存储

密钥协商机制

密钥协商机制,主要来得到通信双方的临时会话密钥. 主要的方式有: 1)依靠非对称加密算法:   RSA,ECC等. 防偷窥,防篡改. 拿到对方公钥的一方随机产生会话密钥,利用公钥加密,通信使用加密后的信息,通信另一方用私钥进行解密, 这样通信双方都拿到会话密钥. 2)专用的密钥交换算法:     DH,ECDH等. DHE,ECDHE等. 防偷窥,不防篡改. 只交换产生密钥的部分数据,各自保证可以产生相同的数据. 3)依靠共享的secret: PSK,SRP等. 双方依靠共享的信息,直接通过相同

DTLS协议中client/server的认证过程和密钥协商过程

我的总结:DTLS的握手就是协商出一个对称加密的秘钥(每个客户端的秘钥都会不一样),之后的通信就要这个秘钥进行加密通信.协商的过程要么使用非对称加密算法进行签名校验身份,要么通过客户端和服务器各自存对方信息进行对比校验身份. 1.DTLS介绍 1.1 DTLS的作用 互联网先驱们最开始在设计互联网协议时主要考虑的是可用性,安全性是没有考虑在其中的,所以传输层的TCP.UDP协议本身都不具备安全性.SSL/TLS协议是基于TCP socket,利用加密.基于数字证书的身份验证等机制在传输层和应用层

DH密钥交换(Diffie–Hellman key exchange)算法笔记

注意:只是笔记,可能有不正确的地方 ?下文中^代表乘方运算,例如2^3=2*2*2=6,参考:http://zh.wikipedia.org/wiki/%E5%86%AA %代表模运算,例如5%3=2,参考:http://zh.wikipedia.org/wiki/%E6%A8%A1%E9%99%A4? DH密钥交换算法的作用是使通信双方可以在不安全的通道中建立一个相同的密钥,用于加密通信. 基本原理示例: 1.通信方A和通信方B约定一个初始数g,g是公开的,如g=5 2.A生成一个随机数a,a

迪菲.赫尔曼(Diffie–Hellman)密钥交换算法

迪菲.赫尔曼算法是通信线路不安全情况下,交换密钥的一个算法,应用于TLS协议中 首先说一下生成密钥的流程,我们有这样一种计算叫做求摸运算 mod, 比如:27 mod 17 = 10,也就是求余数的运算. 现在有两个通信者A和B,我们使用一种计算 假如我们这里选用 3 ^ x mod 17,A和B分别生成一个随机的整数,这个整数即为x,比如A是2,B是3,那么A使用2计算: 3^2 mod 17 = 9 ① B使用3计算: 3^3 mode 17 = 10 ② 然后A将9发送给B,B将10发送给

Diffie_Hellman 密钥商议算法

Diffie-Hellman 算法描述: 目前被许多商业产品交易采用. DH 算法为公开的密钥算法,发明于1976年.该算法不能用于加密或解密,而是用于密钥的传输和分配.      DH 算法的安全性体现在:在有限域上计算离散对数非常困难,或者说:已知gx 和gy,若不知道x和y,则计算gxy是困难的.      离散对数 :定义素数p的原始根(primitive root)为这样一个数,它能生成1~p-1所有数的一个数.现设a为p的原始根,则 a mod p, a2 mod p,…,ap-1 

加密的类型及其相关算法--密钥交换

前两节讲到了信息的加密和信息的完整性,可是无法解决密码(密钥)传输保密的问题.如何在不安全的网络上来进行协商密码(密钥)呢? 1976年,W.Diffie和M.Hellman在发表的论文中提出了公钥加密算法思想,但当时并没有给出具体的实施方案,原因在于没有找到单向函数(也就是消息摘要算法),但在该论文中给出了通信双方通过信息交换协商密钥的算法,即Diffie-Hellman密钥交换算法(简称为DH算法).该算法的目的在于让消息的收发双方可以在安全的条件下交换密钥,以备后续加密/解密使用.因此,D

对称密码、非对称密码、散列算法与PKI

对称密码.非对称密码.散列算法与PKI 密码学要解决的问题:机密性.完整性.身份验证(抗抵赖性): 一.对称密码: 对称密码技术:发件人和收件人使用其共同拥有的单个密钥 ,这种密钥既用于加密,也用于解密,叫做机密密钥(也称为对称密钥或会话密钥). 能够提供信息机密性(没有密钥信息不能被解密).完整性(被改变的信息不能被解密)的服务. 对称式密码学又称:单钥密码学.秘密密钥密码学.会话密钥密码学.私钥密码学.共享秘钥密码学  常见的对称式加密技术: DES(数据加密标准):分组式加密,算法源于Lu

弱密码算法简单汇总

整理一下非安全的弱密码算法,在使用时要注意. 一.加解密算法(cipher) 3des_cbc 3DES algorithm des_cbc DES algorithm aes128_cbc AES128 algorithm aes128_ctr AES128_CTR algorithm aes192_cbc  AES192 algorithm aes192_ctr AES192_CTR algorithm aes256_cbc AES256 algorithm aes256_ctr AES25