【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]各種維基百科