簡體   English   中英

Diffie-Hellman密鑰交換-澄清嗎?

[英]Diffie-Hellman Key Exchange - Clarification?

簡要 :

愛麗絲(Alice)和鮑勃(Bob)試圖進行交流,而不希望夏娃(正在聽)知道他們將要談論的話題。

所以

               Bad Eve
                  |
                  |
Alice ------------+--------------- Bob                               

愛麗絲(Alice)和鮑勃(Bob)在質數模生成器上公開達成共識。

  • 發電機= 3
  • 素數= 17

因此公式將是(例如):

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哪個x1513

但是顯然,我們在這里談論的是大數字。

如果是這樣-我寫了這個演示:

Console.WriteLine(BigInteger.Pow( new BigInteger(3213213213212123332), 6549875) % 17);

這是:

3213213213212123332 ^ 6549875 % 17

我有16GB內存的I7,運行了5分鍾

題 :

如果雙方(愛麗絲和鮑勃)都使用大數,那么第一步要花很長的時間才能得到結果(以后他們應該交換該值)

我可能在這里錯過了一些東西,但是似乎通過使用大量數字使夏娃的生活變得艱難,這也使愛麗絲和鮑勃的生活變得艱難。

我想念什么?

您缺少的東西稱為模冪 這是一種計算巨大的指數模值的快速方法。

例如,假設您要計算(123 ^ 456)mod 777。

如果先執行冪運算,將得到約1000位數字的結果。 對於DH密鑰交換中通常使用的那種值,您最終可能需要使用更多的數字,甚至可能是數百萬。 顯然這根本沒有效率。

模冪運算將問題分解為更容易的步驟。 有兩種數學身份使這成為可能:

  1. (x ^ a)×(x ^ b)= x ^(a + b),並且
  2. (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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM