作為一名coder,平時(shí)工作中真正用到數(shù)學(xué)公式的機(jī)會(huì)其實(shí)并不多,而且因?yàn)楣ぷ鲀?nèi)容以CRUD為主,本質(zhì)上是在做數(shù)據(jù)的提取與組裝,很少有用到數(shù)學(xué)公式的機(jī)會(huì),更遑論感受數(shù)學(xué)之美了(說起來當(dāng)年考研數(shù)學(xué)分?jǐn)?shù)高出英語不到10分,要知道數(shù)學(xué)總分150,英語總分100,不提了,說起來都是淚),直到我研究HTTPS協(xié)議時(shí),看到Diffie–Hellman密鑰交換協(xié)議,真是驚為天人,第一次感覺到了數(shù)學(xué)之美,持續(xù)數(shù)年之久,于今日成文。
什么是Diffie–Hellman密鑰交換?
它可以讓雙方在完全沒有對(duì)方任何預(yù)先信息的條件下通過不安全信道創(chuàng)建起一個(gè)密鑰。這個(gè)密鑰可以在后續(xù)的通訊中作為對(duì)稱密鑰來加密通訊內(nèi)容。
盜圖一張

神奇之處
數(shù)學(xué)公式看著是容易讓人頭疼的,不過簡(jiǎn)單來講就是
- Alice與Bob兩人要協(xié)定一個(gè)只有兩人知道的共享密鑰
- Alice公開
g、p、A三個(gè)數(shù)并提供給Bob - Bob公開
B并提供給Alice - 由此Alice與Bob通過計(jì)算可以得到相同的值
K,作為共享密鑰,就算知道這個(gè)數(shù)學(xué)公式,但是通過公開的g、p、A、B卻難以計(jì)算出a
中間人攻擊
一切看起來似乎很美好,不過前面有提到不安全信道,這種方式難以防止中間人攻擊

Alice的網(wǎng)絡(luò)被Jack監(jiān)聽,Alice跟Bob的交互都要先通過Jack,于是Jack就可以將g、p、A偽造成g'、p'、A'(為什么要偽造呢,因?yàn)镴ack目前還不知道Bob私有的數(shù)據(jù)b),Jack偽裝成Alice與Bob通信,同理,得到Bob的數(shù)據(jù)B,然后偽造新的數(shù)據(jù)B'返回給Alice;所以此時(shí)其實(shí)共享密鑰K其實(shí)有兩個(gè)值,Alice與Jack共享的K1以及Jack與Bob共享的K2,此時(shí)Jack作為中間人,就可以竊取Alice與Bob的通訊記錄了:
- Alice發(fā)送使用K1加密后的數(shù)據(jù)M
- Jack得到M, 使用K1解密,然后使用K2加密成M'
- Jack將M'發(fā)送給Bob
- Bob給Alice發(fā)送數(shù)據(jù)同上
雖然通信信道被竊聽,但是雙方是無感知的,這就是中間人攻擊。
參考: