日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

DH 是 Diffie-Hellman的首字母縮寫,是Whitefield與Martin Hellman在1976年提出了一個的密鑰交換協(xié)議。我個人傾向于稱DH算法為 密鑰協(xié)商協(xié)議而RSA算法是密鑰交換算法。

本篇分為幾個部分,第一個部分介紹一下密鑰交換的場景;第二部分介紹一下DH算法的的步驟,以及由該算法引出的一些問題;第三部分開始講數(shù)學(xué)原理。數(shù)學(xué)原理可能涉及到數(shù)論、抽象代數(shù),本篇盡量在每個公式后面證明該公式的正確性。

簡單場景&簡單的密鑰協(xié)商

先從一個應(yīng)用場景說起:

Alice 和Bob想要在一個不安全的信道共享一個密鑰,該密鑰可被用來進(jìn)行后續(xù)的其他的操作,并且僅被Alice和Bob所知,第三方無法得知。

一個簡單的方法就是,現(xiàn)在全世界都是知道一個值 P=100。Alice生成隨機(jī)值5,然后乘上P,接著發(fā)送Pa = 500給Bob;通樣Bob生成隨機(jī)值6,然后乘上P,接著發(fā)送Pb = 600給Alice。

這樣,Alice 有 100,5 ,600,Bob有100,6,500。

Alice計算: 隨機(jī)值5(自己私鑰) * 600(對端的公鑰) = 3000 等式1

Bob計算 : 隨機(jī)值6(自己私鑰) * 500(對端的公鑰) = 3000 等式2

這樣 Alice就和Bob共享了一個值3000,還有誰知道3000這個值呢?我們知道Alice明文的將500發(fā)送到不安全信道,Bob明文的將600發(fā)送到不安全信道,這也就意味著第三方僅僅知道500 和 600,想要計算獲得共享密鑰,第三方要么獲取到Alice的隨機(jī)值然后拿它乘上600,要么獲取到Bob的隨機(jī)值然后拿它乘上500,這樣才能獲取到Alice和Bob的共享密鑰。

問題來了,如何獲取到Alice的隨機(jī)值呢?

第三方知道,Alice發(fā)送的500是由P乘上Alice的隨機(jī)值得到的,所以問題變成了求方程 x*100 = 500的解。一眼就能看出來,Alice的隨機(jī)值是5。

上述方法很容易被破解的原因是P太簡單了。P值再復(fù)雜點(diǎn)怎么樣?

例如P = 0x123456781234567812345678

Pa = 0xAD77D73E0BFC0E3E0BFC0E3D5E84370

Pb = 0x4EF81E05A6A0F385A6A0F38557A8D58

顯然,你不能一眼就求出方程 x*P = Pa 的解

其實(shí) Alice的隨機(jī)數(shù)為 0x98765432, Bob的隨機(jī)數(shù)為0x45681265。

但是這一切對于計算機(jī)來說還是太簡單了。例如OpenSSL、Mbedtls等眾多的開源庫都提供了大數(shù)運(yùn)算的API,計算Pa/P可能就幾毫秒甚至幾微秒的事情。

所以怎么要讓中間人難以從Pa或者Pb中分解得到Alice或Bob的隨機(jī)數(shù),而Alice和Bob又能輕松的通過P和隨機(jī)數(shù)計算得到Pa和Pb,就成了設(shè)計這個算法的關(guān)鍵。從上面的例子可以看出,簡單的乘法運(yùn)算是不行的。

一般來說上述所說的全世界都知道的值P稱之為公鑰,為Alice和Bob的隨機(jī)數(shù)稱之為私鑰。

DH算法的一個例子

這里舉例一個DH算法的例子。

例1:

設(shè)有這么一個二元組 (q, p) = (3, 7)

我們定義Alice和Bob這么一個運(yùn)算:

(1)Alice 選擇一個范圍在[1, p-1]的隨機(jī)數(shù),為da= 5

(2)Alice 計算Pa = q^da mod p = 3^5 mod 7 = 5

(3)Bob選擇一個范圍在[1, p-1]的隨機(jī)數(shù),為db = 6

(4)Bob計算Pb = q^db mod p = 3^6 mod 7 = 1

(5)Alice和Bob交換Pa和Pb

(6)Alice計算共享密鑰S = Pb ^da mod p = 1^5 mod 7 = 1

(7)Bob計算共享密鑰S = Pa ^db mod p = 5^6 m 7 = 1

至此,Alice和Bob能夠共享一個密鑰為1。中間人由于只得到了Pa=5和Pb=1,如果也想要得到S,要么獲取da然后執(zhí)行步驟6中的等式計算得到結(jié)果、要么獲取db然后執(zhí)行步驟7中的等式得到結(jié)果。而要知道da或者db,需要計算

DH算法原理

 

其實(shí)該算法的原理和上一部分中簡單乘法及其類似,只是獲取da或者db不是簡單的方程式了,而是涉及到對數(shù)運(yùn)算。對數(shù)運(yùn)算被認(rèn)為是“難”的,這個難建立在目前為止沒有找到一個快速計算對數(shù)的算法,數(shù)學(xué)上沒有證明這個算法是否存在。

看到這肯定有一個問題,隨便一個二元組(q, p)都可以參與運(yùn)算嗎?顯然不行。

我們來看看如果隨便一個(q, p)參與運(yùn)算,會出現(xiàn)什么情況。

例2:

假設(shè)(q, p) = (7,15),我們讓Alice和Bob再來協(xié)商一遍

(1)Alice 選擇一個范圍在[1, p-1]的隨機(jī)數(shù),為da= 3

(2)Alice 計算Pa = q^da mod p =7^3 mod 15 = 13

(3)Bob選擇一個范圍在[1, p-1]的隨機(jī)數(shù),為db = 2

(4)Bob計算Pb = q^db mod p = 7^2 mod 15 = 4

(5)Alice和Bob交換Pa和Pb

(6)Alice計算共享密鑰S = Pb ^da mod p = 4^3 mod 15 = 4

(7)Bob計算共享密鑰S = Pa ^db mod p = 13^2 mod 15 = 4

看起來還是協(xié)商成功了,那問題在哪?

7^x mod 15:

7^1 mod 15 = 7

7^2 mod 15 = 4

7^3 mod 15 = 13

7^4 mod 15 = 1

7^5 mod 15 = 7

7^6 mod 15 = 4

7^7 mod 15 = 13

7^7 mod 15 = 1

......

看到規(guī)律了嗎?7^x mod 15的結(jié)果一共才4種,并且周期循環(huán)。

這也就意味著中間人獲取到了Pb = 4,中間人不一定需要知道Alice原始的隨機(jī)值(私鑰)是什么,只要在[1 , 14]中隨便選擇一個滿足7^x mod 15 = 13的值進(jìn)行計算S = 4^7 mod 15 = 4^11 mod 15 = 4 都能正確計算共享密鑰。換句話說,中間人不需要暴力遍歷[1 , 14]中的所有數(shù)就能計算共享密鑰。

所以我們選擇(b, p)的原則就是,G = b^x mod p,

當(dāng)x遍歷[1, p -1]時,G也遍歷了一遍[1, p -1],這樣中間人即使暴力破解,在P很大的時候,暴力破解是非常難的。

DH背后的數(shù)學(xué)&DH算法證明

設(shè) 已知 二元組(q, p)

Alice 生成隨機(jī)值a,計算q^a mod p = Ga

Bob 生成隨機(jī)值b, 計算q^b mod p = Gb

Alice 計算Sa =Gb^a mod p

Bob 計算Sb = Ga^b mod p

我們需要證明Sa=Sb

Sa = Gb^a mod p

= (q^b mod p)^a mod p

令q^b mod p = T,則q^b = kp + T,也即T = q^b - kp

Sa = (q^b mod p)^a mod p

= (T)^a mod p

=(q^b - kp)^a mod p

由于對 (q^b - kp)^a展開,除了第一項為q^(ab)以及最后一項為(kp)^a,其余每一

項均存在p,所以計算(q^b - kp)^a mod p之后,只保留了第一項,即Sa = q^(ab) mod p

同理可正Sb = q^(ba) mod p = Sa

原根

我們在上一節(jié)例二中講到,我們選擇的(q, p)盡可能的使得當(dāng)x遍歷[1, p -1]時,

b^x mod p也遍歷了一遍[1, p -1]。我們就來介紹一下原根。

定義1:

當(dāng) m > 1, gcd(a, m) = 1,則使得 a^e mod m = 1成立的最小正整數(shù)e稱作整數(shù)a

對模m的階(或指數(shù)、乘法周期),記做ord(a)。若a的階

DH算法原理

 

,

a稱作為模m的原根。

例二中,7模15的階是4。

那15有原根嗎? 顯然,根據(jù)定義,找出所有和15互素的數(shù),然后計算他們的

階,階無一例外均不是,故15不存在原根。

現(xiàn)在我們來看看原根的另一個定理,這個定理對于我們找打合適的(q, p)很重要。

定理1:

設(shè)m>1,gcd(a,m) = 1,則

a^0, a^1, a^2, ... a^ord(a)-1 模m兩兩不同余。

證明:反證法

如若存在K,L(L<K<ord(a)) 使得

a^K = a^L mod m

由于gcd (a , m)=1,即存在a的逆a^-1,故等式兩邊乘上a^(-L)

a^(k-l) = 1 mod m

即存在k-l,使得a^(k-l) = 1 mod m等式成立,而k-l < ord(a),與階的定義矛盾。故假設(shè)不成立。

定理1中a和m的關(guān)系,我們就可以用來當(dāng)做DH算法中的(q,p)。

RFC 3526 中給出了推薦的DH參數(shù)。

分享到:
標(biāo)簽:算法 DH
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定