作為一名coder造寝,平時工作中真正用到數(shù)學公式的機會其實并不多常摧,而且因為工作內(nèi)容以CRUD為主搅吁,本質(zhì)上是在做數(shù)據(jù)的提取與組裝,很少有用到數(shù)學公式的機會落午,更遑論感受數(shù)學之美了(說起來當年考研數(shù)學分數(shù)高出英語不到10分谎懦,要知道數(shù)學總分150,英語總分100溃斋,不提了界拦,說起來都是淚),直到我研究HTTPS協(xié)議時梗劫,看到Diffie–Hellman密鑰交換協(xié)議享甸,真是驚為天人,第一次感覺到了數(shù)學之美梳侨,持續(xù)數(shù)年之久枪萄,于今日成文。
什么是Diffie–Hellman密鑰交換?
它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創(chuàng)建起一個密鑰猫妙。這個密鑰可以在后續(xù)的通訊中作為對稱密鑰來加密通訊內(nèi)容。
盜圖一張
神奇之處
數(shù)學公式看著是容易讓人頭疼的聚凹,不過簡單來講就是
- Alice與Bob兩人要協(xié)定一個只有兩人知道的共享密鑰
- Alice公開
g
割坠、p
、A
三個數(shù)并提供給Bob - Bob公開
B
并提供給Alice - 由此Alice與Bob通過計算可以得到相同的值
K
妒牙,作為共享密鑰彼哼,就算知道這個數(shù)學公式,但是通過公開的g
湘今、p
敢朱、A
、B
卻難以計算出a
中間人攻擊
一切看起來似乎很美好摩瞎,不過前面有提到不安全信道拴签,這種方式難以防止中間人攻擊
Alice的網(wǎng)絡被Jack監(jiān)聽,Alice跟Bob的交互都要先通過Jack旗们,于是Jack就可以將g
蚓哩、p
、A
偽造成g'
上渴、p'
岸梨、A'
(為什么要偽造呢喜颁,因為Jack目前還不知道Bob私有的數(shù)據(jù)b
),Jack偽裝成Alice與Bob通信曹阔,同理半开,得到Bob的數(shù)據(jù)B
,然后偽造新的數(shù)據(jù)B'
返回給Alice赃份;所以此時其實共享密鑰K其實有兩個值寂拆,Alice與Jack共享的K1以及Jack與Bob共享的K2,此時Jack作為中間人芥炭,就可以竊取Alice與Bob的通訊記錄了:
- Alice發(fā)送使用K1加密后的數(shù)據(jù)M
- Jack得到M, 使用K1解密漓库,然后使用K2加密成M'
- Jack將M'發(fā)送給Bob
- Bob給Alice發(fā)送數(shù)據(jù)同上
雖然通信信道被竊聽,但是雙方是無感知的园蝠,這就是中間人攻擊渺蒿。
參考: