现在的位置: 首页 > 综合 > 正文

DH算法外传

2019年10月05日 ⁄ 综合 ⁄ 共 2821字 ⁄ 字号 评论关闭

Diffie-Hellman算法(D-H算法),密钥一致协议。是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以共享的密钥。换句话说,就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。以此为基线,作为数据传输保密基础,同时双方使用同一种对称加密算法构建本地密钥(SecretKey)对数据加密。这样,在互通了本地密钥(SecretKey)算法后,甲乙双方公开自己的公钥,使用对方的公钥和刚才产生的私钥加密数据,同时可以使用对方的公钥和自己的私钥对数据解密。不单单是甲乙双方两方,可以扩展为多方共享数据通讯,这样就完成了网络交互数据的安全通讯!该算法源于中国的同余定理——中国馀数定理。

 

以下介绍中国馀数定理:

在中国数学史上,广泛流传着一个“韩信点兵”的故事:
韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝的建立了卓绝的功劳。据说韩信的数学水平也非常高超,他在点兵的时候,为了保住军事机密,不让敌人知道自己部队的实力,先令士兵从1至3报数,然后记下最后一个士兵所报之数;再令士兵从1至5报数,也记下最后一个士兵所报之数;最后令士兵从1至7 报数,又记下最后一个士兵所报之数;这样,他很快就算出了自己部队士兵的总人数,而敌人则始终无法弄清他的部队究竟有多少名士兵。
这个故事中所说的韩信点兵的计算方法,就是现在被称为“中国剩余定理”的一次同余式解法。它是中国古代数学家的一项重大创造,在世界数学史上具有重要的地位。
最早提出并记叙这个数学问题的,是南北朝时期的数学著作《孙子算经》中的“物不知数”题目。这道“物不知数”的题目是这样的:
“今有一些物不知其数量。如果三个三个地去数它,则最后还剩二个;如果五个五个地去数它,则最后还剩三个;如果七个七个地去数它,则最后也剩二个。问:这些物一共有多少?”

下面以现代的语言解说下上面这个式子现在叫做“中国剩余定理”

用简练的数学语言来表述就是:求这样一个数,使它被3除余2,被5除余3,被7除余2。《孙子算经》给出了这道题目的解法和答案,用算式表示即为:

70*2 + 21*3 +15*2 - 105*2 =23

解题步骤

1.三个质数中两个相乘取得值

则〔5,7〕=35;〔3,7〕=21;〔3,5〕=15

以及3个质数的乘积〔3,5,7〕=105

2.值的倍数除以另外一个数字必须余数为1

使35被3除余1,用35×2=70   

使21被5除余1,用21x1=21    //21刚好满足

使15被7除余1,用15x1=15    //15刚好满足

3. 与余数相乘之和
被3除余2,被5除余3,被7除余2

使35被3除余1,用35×2=70;    70×2   (被3除余) //70=2*5*7=1(mod3)

使21被5除余1,用21x1=21;    21×3   (被5除余) //21=1*3*7=1(mod5)

使15被7除余1,用15×1=15;    15×2 (被7除余) //15=1*3*5=1(mod7)

70×2+21×3+15×2=233

4. 得出结果

上一步骤所得结果(233)除以 105 (3×5×7=105) 去余数即使所需答案

233 / 105 = 2 余数是 23

70*2 + 21*3 +15*2 - 105*2 =23

—————————————————————————————————————————————
用现代的数学术语来说,这幅“开方作法本源图”实际上是一个指数为正整数的二项式定理系数表。稍懂代数的读者都知道:
N=2(mod3)=3(mode5)=2(mod7)   //式中 = 意思都是恒等,键盘不小的用怎么输入
《孙子算经》实际上是给出了这类一次同余式组
N= A(mod3)=B(mod5)=C(mod7)
一般解:
N = 70A + 21B + 15C - 105P (p为正整数)

其中70、21、15和105这四个数是关键,所以后来的数学家把这种解法编成了如下的一首诗歌以便于记诵:

“三人同行七十(70)稀,
五树梅花二一(21)枝。
七子团圆正半月(15),
除百零五(105)便得知。”

《孙子算经》的“物不知数”题虽然开创了一次同余式研究的先河,但由于题目比较简单,甚至用试猜的方法也能求得,所以尚没有上升到一套完整的计算程序和理论的高度。真正从完整的计算程序和理论上解决这个问题的,是南宋时期的数学家秦九韶。秦
九韶在他的《数书九章》(见图1一7一1)中提出了一个数学方法“大衍求一术”,系统地论述了一次同余式组解法的基本原理和一般程序。
秦九韶为什么要把他的这一套计算程序和基本原理称为“大衍求一术”呢?这是因为其计算程序的核心问题是要“求一”。所谓“求一”,通俗他说,就是求“一个数的多少倍除以另一个数,所得的余数为一”。那么为什么要“求一”呢?我们可以从“物不知数”题的几个关键数字70、21、15中找到如下的规律:

70=2*5*7=1(mod3)
21=1*3*7=1(mod5)
15=1*3*5=1(mod7)

其中70是5和7的倍数,但被3除余1;21是3和7的倍数,但被5除余1;15是3和5的倍数,但被7除余1,任何一个一次同余式组,只要根据这个规律求出那几个关键数字,那么这个一次同余式组就不难解出了。为此,秦九韶提出了乘率、定数、衍母、衍数等一系列数学概念,并详细叙述了“大衍求一术”的完整过程。(由于解法过于繁细,我们在这里就不展开叙述了,有兴趣的读者可进一步参阅有关书籍。)直到此时,由《孙子算经》“物不知数”题开创的一次同余式问题,才真正得到了一个普遍的解法,才真正上升到了
“中国剩余定理”的高度。
从《孙子算经》到秦九韶《数书九章》对一次同余式问题的研究成果,在19世纪中期开始受到西方数学界的重视。1852年,英国传教士伟烈亚力向欧洲介绍了《孙子算经》的“物不知数”题和秦九韶的“大衍求一术”;1876年,德国人马蒂生指出,中国的这一解法与西方19世纪高斯《算术探究》中关于一次同余式组的解法完全一致。从此,中国古代数学的这一创造逐渐受到世界学者的瞩目,并在西方数学史著作中正式被称为“中国剩余定理”。

 

DH 算法的简要逻辑

DH 算法的出现就是用来进行密钥传输的。 DH 算法是基于离散对数实现的。用户 A 和 B 如何利用 RSA 算法来传输密钥?

在通信前, 用户 A 和 B 双方约定 2 个大整数 n 和 g, 其中 1<g<n ,这两个整数可以公开

1)    A 随机产生一个大整数a ,然后计算Ka =ga mod n 。(a 需要保密)

2)    B 随机产生一个大整数b ,然后计算Kb =gb mod n 。(b 需要保密)

3)    A 把Ka 发送给B,B 把Kb 发送给A

4)    A 计算K=Kb a mod n

5)    B 计算K=Ka b mod n

由于Kb a mod n= (gb mod n )a mod n= (ga mod n )b mod n ,因此可以保证双方得到的K 是相同的, K 即是共享的密钥。

 

 

 

抱歉!评论已关闭.