端對端加密(E2EE)-參考文章
DH交換
實際上遮咖,在學習密碼學原理的時候滩字,有一個重點叫做零知識證明
,在零知識證明中御吞,利用大素數(shù)分解的原理麦箍,能夠學習到雙密鑰體系,在這里也十分相同
簡單示例
Alice希望與Bob建立一個密鑰用于通信
首先陶珠,他們約定一個
p
和一個g
挟裂,假設,p=23,g=5
-
Alice在不告訴Bob的情況下揍诽,秘密生成一個數(shù)字
a=6
诀蓉,計算A = g^a * mod(p)并發(fā)送給BobA=5^6 * mod(23)=8
-
Bob同樣的選擇一個數(shù)字
b=15
,也計算B = g^a * mod(p)發(fā)送給AliceB = 8^15 * mod(23) = 19
-
接下來暑脆,Alice計算S=B^a * mod(p)
S = 196 mod(23) = 2
-
而Bob計算S=A^b * mod(p)
S = 8^15 * mod(23) = 2
這樣渠啤,Alice相當于證明了自己知道
p、q
的值添吗,這被稱為零知識證明沥曹,同樣的,這也被稱為DH密鑰交換
ECDH密鑰交換
ECDH根资,簡單說就是ECC加上DH架专,ECC是基于橢圓曲線的離散對數(shù)問題的密碼體制同窘,與上文中大素數(shù)分解難題不同。而在加上DH之后部脚,這就成為了密鑰磋商的一種體系想邦。
交換雙方可以在不共享任何秘密的情況下協(xié)商出一個密鑰。給定橢圓曲線上的一個點P委刘,一個整數(shù)k丧没,求解Q=kP很容易;給定一個點P锡移、Q呕童,知道Q=kP,求整數(shù)k確是一個難題淆珊。
示例
同樣的夺饲,這里還是Alice和Bob,其有共享曲線參數(shù)(橢圓曲線E施符、階N往声、基點G)。
Alice生成隨機整數(shù)a戳吝,計算
A=a*G
浩销。Bob生成隨機整數(shù)b,計算
B=b*G
听哭。Alice將A傳遞給Bob慢洋。A的傳遞可以公開,即攻擊者可以獲取A陆盘。
由于橢圓曲線的離散對數(shù)問題是難題普筹,所以攻擊者**不可以通過A、G計算出a**隘马。
Bob將B傳遞給Alice斑芜。同理,B的傳遞可以公開祟霍。
Bob收到Alice傳遞的A,計算
Q =b*A
Alice收到Bob傳遞的B盈包,計算
Q'=a*B
Alice沸呐、Bob雙方即得
Q = b*A
? = b*(a*G) = (b*a)*G
? = (a*b)*G = a*(b*G)
? = a*B = Q'
僅僅依靠交換律和結合律即可得,即雙方得到一致的密鑰Q呢燥。