[英]Diffie-Hellman Key Exchange - Clarification?
簡要 :
愛麗絲(Alice)和鮑勃(Bob)試圖進行交流,而不希望夏娃(正在聽)知道他們將要談論的話題。
所以
Bad Eve
|
|
Alice ------------+--------------- Bob
愛麗絲(Alice)和鮑勃(Bob)在質數模和生成器上公開達成共識。
說
因此公式將是(例如):
3^x % 17
好。
愛麗絲(Alice)選擇一個私人號碼(例如15 ),然后執行3^15 %17 => 6
鮑勃(Bob)選擇一個私人號碼(例如13 ),然后執行3^13 %17 => 12
現在,當夏娃在聽時,愛麗絲和鮑伯互相告訴他們他們的結果( 而不是他們的私鑰)。
所以現在的圖片是:
Bad Eve ( knows : 3^x %17 , 12,6)
|
|
Alice ------------+--------------- Bob
(15)private (13)private
12(Bob's) 6(Eve's)
現在,愛麗絲拿了鮑勃的12和她的私鑰,然后這樣做:
((other's public num) ^ secret number) % 17
愛麗絲在做: 12^15 % 17 => 10
鮑勃在做: 6^13 % 17 => 10
因此,現在它們具有相同的對稱數。
現在:
這是一個例子,很容易破解。
夏娃要做的就是試圖找出3^x % 17
哪個x
是15
或13
。
但是顯然,我們在這里談論的是大數字。
如果是這樣-我寫了這個演示:
Console.WriteLine(BigInteger.Pow( new BigInteger(3213213213212123332), 6549875) % 17);
這是:
3213213213212123332 ^ 6549875 % 17
我有16GB內存的I7,運行了5分鍾
題 :
如果雙方(愛麗絲和鮑勃)都使用大數,那么第一步要花很長的時間才能得到結果(以后他們應該交換該值)
我可能在這里錯過了一些東西,但是似乎通過使用大量數字使夏娃的生活變得艱難,這也使愛麗絲和鮑勃的生活變得艱難。
我想念什么?
您缺少的東西稱為模冪 。 這是一種計算巨大的指數模值的快速方法。
例如,假設您要計算(123 ^ 456)mod 777。
如果先執行冪運算,將得到約1000位數字的結果。 對於DH密鑰交換中通常使用的那種值,您最終可能需要使用更多的數字,甚至可能是數百萬。 顯然這根本沒有效率。
模冪運算將問題分解為更容易的步驟。 有兩種數學身份使這成為可能:
- (x ^ a)×(x ^ b)= x ^(a + b),並且
- (x ^ y)mod n =(((x mod n)^ y)mod n
其中第一個應該是不言而喻的。 第二個可以證明如下:
如果x mod n == z,則對於c的某個整數值,x等於(c×n + z)。 (c×n + z)^ y的二項式展開具有(y + 1)項
c ^ y×n ^ y + k1×c ^(y-1)×n ^(y-1).z + k2×c ^(y-2)×n ^(y-2)×z ^ 2 + ... + k(y-1)c×n×z ^(y-1)+ z ^ y
(其中k1 ... k(y-1)是二項式系數 )
除了最后一個(z ^ y)以外,所有這些項都是n的倍數,因此等於零(mod n)。 因此(x ^ y)mod n ==(z ^ y)mod n ==((xx mod n)^ y)mod n。
要計算(x ^ y)mod n,請重復將x自身相乘以獲得以下序列:
X0 = x mod n
X1 = X0×X0 mod n = x ^ 2 mod n
X2 = X1×X1 mod n = x ^ 4 mod n
X3 = X2×X2 mod n = x ^ 8 mod n
X4 = X3×X3 mod n = x ^ 16 mod n
現在,將與該系列中與y的二進制表示形式的設置位相對應的項相乘。 例如,假設y = 21:
(x ^ 21)mod n =((x ^ 16)×(x ^ 4)×x)mod n =(X4 * X2 * X0)mod n
用這種方法進行計算有兩個優點。 首先,您將要計算的最大數字最多為模數n的兩倍。 其次,必須執行的計算數量與指數的(以2為底)對數成正比,這意味着對於6549875這樣的指數,計算將運行數百萬倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.