DH算法
作者:互联网
本文仅作为个人笔记,方便复习
参考链接:
https://blog.csdn.net/nice_wen/article/details/87996526
https://www.cnblogs.com/qcblog/p/9016704.html
概述
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秘钥协商算法。
数论基础
离散对数问题
假设a、p均为素数,则有以下等式:
{ a^1 mod p, a^2 mod p, ..., a^(p-1) mod p } = {1, 2, ... , p-1 } {} 表示集合
对于任意一个数 x,若 0 < x < p,则必定存在唯一的 y 使得 x = a^y mod p,其中 0 < y < p。当p很大时,很难求出y,所以它能做为DH秘钥交换的基础。
求模公式:((a^x mod p)^y) mod p = a^xy mod p
证明如下:
假设 a^x = mp + n,其中0<n<p,则
C = ((a^x mod p)^y) mod p
= ((mp+n) mod p)^y mod p
= (n mod p)^y mod p
= n^y mod p
= (mp+n)^y mod p
= a^xy mod p
本原根
如果使得a^m≡1 mod n成立的最小正幂m满足m=φ(n),则称a是n的本原根
例如:3是17的本原根,φ(17) = 16,3^16 = 1 mod 17成立,实际上3,5,6,7,10,11,12,14都是17的本原根
算法流程及原理
假设Alice和Bob希望在不安全的网络环境中协商一个对称密钥进行通信,那么可按如下步骤进行:
1、首先Alice保存自己的私钥a(随机数),Bob也保存自己的私钥b(随机数)
2、Alice计算 A = g^a mod p,并将g,p,A发给Bob
3、Bob计算 B = g^b mod p,然后将B发给Alice
4、Alice得到对称密钥K = B^a mod p = (g^b mod p)^a mod p = g^ab mod p
5、Bob同样得到对称密钥K = A^b mod p = (g^a mod p)^b mod p = g^ab mod p
从此,Alice和Bob得到同样的密钥进行通信,那么窃听者Eve能否破解秘钥呢?首先要知道Eve能够得知哪些信息,显然Eve能够窃听到的信息只能有p,g,A,B。现在的问题是Eve能够通过以上信息计算出K吗?要计算K需要知道a或者b。
以计算a为例,Eve能根据条件g^a mod p=A,计算出A吗?实际上当p是大质数的时候,这是相当困难的,这就是离散对数问题。实际上在论文发表的当时,计算该问题的最有效的算法的时间复杂度大约是O(√p)。也正是求解该问题在计算上的困难程度保证了DH算法的安全性。如果能够找到对数时间复杂度的算法,那么该算法即容易被攻破。
存在的问题
是否DH秘钥协商算法就一定安全呢?应该说也不是,因为存在一种伪装者攻击(或者称为中间人攻击)能够对这种秘钥协商算法构成威胁。
假设秘钥协商过程中,在Alice和Bob中间有一个称为Mallory的主动攻击者,他能够截获Alice和Bob的消息并伪造假消息,考虑如下情况。
1)Alice和Bob已经共享一个素数p及其该素数p的本原根g,当然Mallory监听到报文也得知了这两个消息。
2)此时Alice计算A=g^a mod p,然而在将A发送给Bob的过程中被Mallory拦截,Mallory自己选定一个随机数S,计算S=g^s mod p,然后将S发送给了Bob。
3)同时Bob计算B=g^b mod p,然而在将B发送给Alice的过程中被Mallory拦截,Mallory自己选定一个随机数T,计算T=g^t mod p,然后将T发送给了Alice。
由于通讯消息被替换,Alice计算出的秘钥实际上是Alice和Mallory之间协商秘钥:;Bob计算出的秘钥实际上是Bob与Mallory之间协商的秘钥:。如果之后Alice和Bob用他们计算出的秘钥加密任何信息,Mallory截获之后都能够解密得到明文,而且Mallory完全可以伪装成Alice或者Bob给对方发消息。
标签:Mallory,DH,Alice,秘钥,算法,Bob,mod 来源: https://www.cnblogs.com/cyrui/p/15971307.html