1. 程式人生 > >【IERG4130學習筆記】Diffie-Hellman Key Exchange

【IERG4130學習筆記】Diffie-Hellman Key Exchange

/* Written by Edward

* BEng, CSE, Faculty of Engineering, CUHK

* 本人本科小菜鳥一個,如有遺漏,歡迎指出,互相學習,謝謝

*/

Diffie-Hellman Key exchange可以說是Public Key Infrastructure的開山始祖,雖說沒有涉及到具體詳細的演算法,但是提供了一個非常好的方向,可以說ElGamal Encryption基本上完全就是直接套用了Diffle-Hellman的核心思想,更然後才有了RSA演算法,更多的介紹您可以移步百度百科或者WIKI(WIKI上的介紹更詳盡)。

簡而言之,人們在通訊時想要加密自己的資訊,然而收信方往往需要預先與發信方有一個提前商量好的加密/解密方法,以及其相對應的金鑰(key),但是在他們商量好加密/解密方法之前,他們的資訊又是未加密的,怎麼通過未加密的資訊來傳遞關於加密/解密方法的資訊(通常是協商確定key),避免在正式通訊開始前就被敵方破解(知道key的值)呢? 這就是Diffie-Hellman Key Exchange解決的問題。

在這裡小記一下自己對Diffie-Hellman Key exchange的理解

Pre-requisites:

1. 對群(group)有基本認知 (WIKI一下啦,反正我是自學的,上課時教授幾頁PPT就講完了,不明覺厲啊)

2. 對Modular Arithmetic模運算有一定的認知(上課時教授幾頁PPT都沒用就講完了,完全不能支撐接下來的學習,於是我又WIKI了)

3. 對Diffille-Hellman Problem有一定認知

4. 對Discrete Logarithm Problem有一定的認知

那麼接下來我大概簡介一下3跟4、什麼是Diffille-Hellman Problem,什麼又是Discrete Logarithm Problem。

Diffile-Hellman Problem

這個問題說的是,如果你知道g的值、N的值、(g^x) mod N的值和(g^y) mod N的值,怎麼算出(g^xy) mod N的值呢?

這被認為是一個很難解決的問題,您可以思考一下。

由於直接從(g^x) mod N和(g^y) mod N是很難算出(g^xy) mod N的值的,那麼就有人開始考慮,是否可以先分別算出其中x跟y的值,然後直接去算出(g^xy) mod N的值呢?這就引申出了下面這個Discrete Logarithm Problem

Discrete Logarithm Problem

什麼是Discrete Logarithm Problem呢?簡單來說,就是你已知數字g、N和(g^x) mod N分別的值,但是你無法求出x的值。 

當然以上的解釋是很不數學嚴謹的,但是直觀上來講大概就是這樣的意思。這是由取模操作的特點造成的,我也無法給出具體的數學證明(畢竟數學差),但是我可以舉幾個例子

例如說,g = 3, N = 5, (g^x) mod N = 4

當然,你第一時間會想到x = 2啊!(3 ^ 2 = 9, 9 mod 5 = 4)

但是,很不幸的是,x = 5也行哦,x = 9也行哦,x = 13也行哦,暈了吧?往大一點,x = 28也行哦。

只要以上兩個問題解決不了Diffie-Hellman Key Exchange就是不容易給攻破的(當然還有別的方法攻破)

Diffie-Hellman Key Exchange Procedure

Diffie-Hellman Key Exchange具體是怎麼工作的呢?如下,設有兩者A與B要進行KEY EXCHANGE

1. A選擇一個g,一個N,一個x (A的secret key), 計算出X = (g^x) mod N,然後傳送(g, N, X)給B

2. B收到(g, N, X),選擇一個y (B的secret key),計算出Y = (g^y) mod N,並且把X^y = (g^x)^y mod N = (g^xy) mod N作為key,然後傳送(Y)給A

3. A收到Y,計算Y^x = (g^y)^x mod N = (g^yx) mod N = (g^xy) mod N作為key,至此,A與B的key是相同的(g^xy) mod N。

就是以上三步那麼簡單。至此,A和B都共享同一個key = (g^xy) mod N可以用作今後通訊的加密。

如果中間有一個黑客C,他竊聽到了(g,N,X)和(Y),那麼他可不可能知道key呢?

答案是否定的,基於Diffie-Hellman Problem跟Discrete Logarithm Problem,他既無法直接用X,Y算出key,也無法知道A與B分別的secret key x跟y,所以最後無法算出key的值。

總的來說,這種Key Exchange Protocol是安全的,但是也有許多侷限性。

Man-in-the-Middle Attack (中間人攻擊)

當然,由於A與B都沒有驗證資訊(g,N,X)或者(Y)的來源,那麼如果黑客C不僅僅可以竊聽,還可以分別偽裝成A和B跟另一方進行通訊,那麼這種Key Exchange就會被攻破了。

其他攻擊

百度百科上還寫道說此Key Exchange還容易受到重演攻擊Replay Attack跟阻塞攻擊(Congestion Attack? 私以為是一種Denial of Service),具體是什麼情況我還得另外瞭解瞭解……

Reference:

[1]Bruce Schneier, Applied Crptography

[2]各種維基百科