雙棘輪算法:端對端加密安全協(xié)議潮饱,原理以及流程詳解

我們繼續(xù)講解signal的核心技術(shù):雙棘輪来氧。

在上一篇,我們先講了:X3DH香拉,F(xiàn)S(前向安全)啦扬,PCS(后向安全),然后簡單提了密碼學中的DH凫碌,HMAC, KDF, HKDF扑毡。這一篇,我們將詳細講解雙棘輪這個核心技術(shù)盛险。

如果你要跟某個人進行安全通信瞄摊,你會如何設(shè)計

假設(shè)你要做個系統(tǒng),可以和某個人安全通信苦掘,站在安全性的角度换帜,技術(shù)上應(yīng)該如何設(shè)計?

思考時間......
思考時間......
思考時間......

  1. 首先鹤啡,你可能會想到惯驼,如何與對方進行密鑰協(xié)商,這就涉及到DH递瑰。
  2. 其次祟牲,出于極致的安全性要求,你會考慮FS(前向安全)泣矛,PCS(后向安全)疲眷。如何保證在某次通信中,被破解出來的密鑰您朽,不能破解出之前的消息,而且在一定周期內(nèi),這個破解出來的密鑰將不會再起作用哗总。

下面几颜,我們來看看雙棘輪是如何做的

棘輪

我們先來感性認識一下棘輪:

pic2.1_mark.jpg

從感觀上,棘輪就是一種特殊的齒輪讯屈,他只能往一個方向轉(zhuǎn)下去蛋哭,而不能往回轉(zhuǎn)。

在技術(shù)上涮母,做到"只能往一個方向轉(zhuǎn)下去谆趾,而不能往回轉(zhuǎn)",是達到FS(前向安全)的關(guān)鍵叛本。比如KDF沪蓬,導(dǎo)出的KDF鏈只能往后面派生,而不能計算出前向的密鑰来候,這就保證了跷叉,如果某一輪的密鑰被破解出來,但前面的密鑰是無法計算出來的营搅,也就是前面的消息無法被解密云挟。

雙棘輪

雙棘輪,就是說转质,signal用了兩個棘輪來保證其安全性园欣。這里先不展開,我們到最后再看休蟹,可能會更加清楚沸枯。

我們以一個真實場景來講解signal的通信技術(shù)

我們還是以Alice與Bob通信為例,講解這個核心技術(shù)鸡挠。

Alice主動給Bob發(fā)第一條消息

X3DH

Alice要主動與Bob聯(lián)系辉饱,首先要進行密鑰協(xié)商。由于Bob可能不在線拣展,所以Alice可以借助Bob存放在Server的公鑰進行彭沼。

Signal用的是X3DH,即Alice會去Server拿到Bob的長期公鑰IdentityKey备埃,以及中期的公鑰SignedPreKey姓惑,以及臨時的公鑰PreKey。然后做X3DH按脚,導(dǎo)出一個密鑰于毙。

X3DH的具體做法可以看我的上一篇文章。

發(fā)送鏈與接收鏈

在signal中辅搬,Alice與Bob都分別有自己的發(fā)送鏈(chain)以及接收鏈唯沮。如下圖所示:

pic2.2_mark.jpg

這兩種鏈分別計算發(fā)送密鑰以及接收密鑰脖旱。

第一條消息

總體流程如下圖(為了能更簡單清晰地解釋,下面的圖已經(jīng)是簡化過后的圖):

pic2.3_mark.jpg

Alice要給Bob第一條消息介蛉,需要初始化發(fā)送鏈:

  1. DH棘輪:Alice首先使用雙棘輪中的第一個棘輪:DH棘輪萌庆,進行DH計算,具體流程是:
    a) Alice生成一對臨時的key pair(公私鑰對)
    b) 用這個臨時的key pair的私鑰與Bob SignedPreKey的公鑰進行DH計算币旧。

  2. KDF棘輪:Alice再使用雙棘輪中的第二個棘輪:KDF棘輪践险,導(dǎo)出三個密鑰KeyA1、Key1以及Key2吹菱。其中巍虫,KeyA1用于下一次發(fā)送鏈的Root Key(即salt),Key1用于加密消息鳍刷,Key2用于派生下一輪的密鑰占遥。

  3. 發(fā)送鏈密碼派生:如果Bob一直不給Alice發(fā)送消息,則Alice則一直使用此發(fā)送鏈發(fā)送消息倾剿,如上圖所示筷频,第二輪使用Key2加鹽進行派生,第三輪使用Key4前痘。

(PS:Signal實際的實現(xiàn)要比上述的復(fù)雜凛捏,但原理上一致的)

Bob接收到消息

Bob接收到消息后,會做兩件事情芹缔,第一件是初始化接收鏈坯癣,第二件是初始化發(fā)送鏈

初始化接收鏈

如下圖所示:

pic2.4 bob received_mark.jpg

與Alice的發(fā)送鏈對應(yīng)最欠,Bob使用相同的規(guī)則初始化接收鏈示罗。

由于Bob進行X3DH,以及DH之后的值芝硬,是一樣的蚜点,所以可以產(chǎn)生相同的Key1,Key3進行解密拌阴。

初始化發(fā)送鏈

Bob在收到Alice的消息后绍绘,就可以初始化發(fā)送鏈了:

pic2.5 init send_mark.jpg

與Alice一樣:

  1. DH棘輪:Bob生成一個臨時的key pair,與Alice進行DH
  2. KDF棘輪:與Alice一樣迟赃,用上述的DH做Salt陪拘,導(dǎo)出三個密鑰
  3. 發(fā)送鏈密碼派生:與Alice一樣,第二輪使用Key2加鹽進行派生纤壁,第三輪使用Key4

在初始化發(fā)送鏈后左刽,Bob就可以發(fā)送消息了。

Bob給Alice回消息

如下圖所示:

pic2.6 init received alice.jpg

Bob用自己發(fā)送鏈的密鑰加密消息后酌媒,給Alice發(fā)送消息欠痴。Alice在接收消息后迄靠,會做兩件事情,一個是初始化自己的接收鏈斋否,第二個是重置自己的發(fā)送鏈梨水。

初始化自己的接收鏈如上圖所示拭荤,重置自己的發(fā)送鏈要重點講講茵臭。

Alice在收到Bob的消息后,會重置發(fā)送鏈

如下圖所示:

pic2.7 reinit sending_mark.jpg

Alice在收到Bob的消息后舅世,會重置自己的發(fā)送鏈旦委,可以想像為棘輪往后移了一格,這樣雏亚,KDF將重新計算缨硝,如果之前某輪的密鑰泄密了,從此刻開始罢低,之前的密鑰將無法解密到消息查辩,這滿足了PCS(后向安全)的特性。

具體做法是:

  1. Alice生成新的臨時key pair网持,與Bob的SigndPreKey做DH
  2. 將上一輪Key Chain導(dǎo)出的KeyA1做Salt宜岛,與上述的DH做KDF,導(dǎo)出KeyA2, Key1, Key2功舀,同樣萍倡,KeyA2為下一輪發(fā)送鏈的salt, Key1用于此輪加密消息辟汰,Key2用于KDF列敲。

Ping Pong

如上圖所示,Bob在收到Alice的消息后帖汞,也會重置發(fā)送鏈戴而。

其實就是Ping Pong,Alice收到Bob消息會重復(fù)發(fā)送鏈翩蘸,Bob也一樣所意。

從Alice的角度總結(jié)

從Alice的角度上看,發(fā)送鏈如下變化:

pic2.8 finish_mark.jpg

總結(jié)

本文詳細講解了signal中的核心技術(shù):雙棘輪鹿鳖,包括了DH棘輪以及KDF棘輪扁眯。KDF棘輪保證了FS,而DH棘輪保證了PCS翅帜。

如果有什么問題姻檀,歡迎留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涝滴,一起剝皮案震驚了整個濱河市绣版,隨后出現(xiàn)的幾起案子胶台,更是在濱河造成了極大的恐慌,老刑警劉巖杂抽,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诈唬,死亡現(xiàn)場離奇詭異,居然都是意外死亡缩麸,警方通過查閱死者的電腦和手機铸磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來杭朱,“玉大人阅仔,你說我怎么就攤上這事』⌒担” “怎么了八酒?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長刃唐。 經(jīng)常有香客問我羞迷,道長,這世上最難降的妖魔是什么画饥? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任衔瓮,我火速辦了婚禮,結(jié)果婚禮上荒澡,老公的妹妹穿的比我還像新娘报辱。我一直安慰自己,他們只是感情好单山,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布碍现。 她就那樣靜靜地躺著,像睡著了一般米奸。 火紅的嫁衣襯著肌膚如雪昼接。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天悴晰,我揣著相機與錄音慢睡,去河邊找鬼。 笑死铡溪,一個胖子當著我的面吹牛漂辐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棕硫,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼髓涯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了哈扮?” 一聲冷哼從身側(cè)響起纬纪,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤蚓再,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后包各,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體摘仅,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年问畅,在試婚紗的時候發(fā)現(xiàn)自己被綠了娃属。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡按声,死狀恐怖膳犹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情签则,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布铐料,位于F島的核電站渐裂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏钠惩。R本人自食惡果不足惜柒凉,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望篓跛。 院中可真熱鬧膝捞,春花似錦、人聲如沸愧沟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沐寺。三九已至林艘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間混坞,已是汗流浹背狐援。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留究孕,地道東北人啥酱。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像厨诸,于是被迫代替她去往敵國和親镶殷。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容