Signal安全I(xiàn)M核心技術(shù)詳解:X3DH,雙棘輪算法龟梦,以及源碼詳解隐锭,含F(xiàn)S/PCS等概念

Signal是在IT界與安全界都非常有名的一個(gè)端對(duì)端加密產(chǎn)品,它既符合FS(Forward secrecy计贰,前向安全)钦睡,也同時(shí)符合PCS(Post-Compromise security,后向安全)躁倒。

Signal的核心技術(shù)是X3DH(3倍增加版的Diffie Hellman)荞怒,以及Double Ratchet(雙棘輪)

我打算分開兩篇文章詳解相關(guān)的技術(shù)細(xì)節(jié):

第一篇:簡(jiǎn)單講解相關(guān)的技術(shù)背景,以及代碼級(jí)別詳解X3DH秧秉。
第二篇:詳解Double Ratchet雙棘輪的算法褐桌。

下面開始第一篇,我們先講講剛剛提到的技術(shù)點(diǎn):FS前向安全象迎,PCS后向安全荧嵌,DH算法。然后再講密碼學(xué)中的HMAC, KDF, HKDF砾淌,這些跟雙棘輪有關(guān)完丽。然后再細(xì)講X3DH。

一些技術(shù)背景

Forward secrecy拇舀,前向安全

前向安全,一般人的理解是:如果某一輪的密鑰泄漏了蜻底,不會(huì)導(dǎo)致之前的消息被破解骄崩。但我查過一些相關(guān)的文獻(xiàn)聘鳞,如Wiki,Handbook of applied cryptography等要拂,定義可能比較多抠璃,綜合了一下,我更傾向于將前向安全定義為:

FS/前向安全 = 無論long-term key長(zhǎng)期密鑰脱惰,或者中期密鑰搏嗡,或者某輪密鑰泄露,都不會(huì)導(dǎo)致之前的消息被破解拉一。

Post-Compromise security / Future Secrecy / 后向安全

同樣采盒,我更傾向于將后向安全定義為:在密鑰Compromise之后, 在一定時(shí)間內(nèi)蔚润,可以恢復(fù)磅氨。(recovery from compromise)

DH (Diffie Hellman) / ECDH

這個(gè)到處都有說,不展開了嫡纠,最簡(jiǎn)單的理解是:

DH: A的私鑰 + B的公鑰 = 密鑰 = A的公鑰 + B的私鑰

ECDH就是基于橢圓曲線的Diffie Hellman烦租。

HMAC

全稱Hash-based Message Authentication Code,就是用于生成摘要除盏,驗(yàn)證消息完整性以及源身份叉橱。不再展開了。

KDF

KDF全稱是key derivation function者蠕,我也不知道怎么翻譯好窃祝。像上面說的DH出來的密鑰,其實(shí)不是離散均勻的蠢棱,更多情況下需要KDF或HKDF

HKDF

基于HMAC的KDF锌杀,細(xì)節(jié)可以看看其它文章,簡(jiǎn)單地說泻仙,就是

HKDF(key, salt, info) => T(0), T(1), T(2), T(..)個(gè)密鑰糕再。

X3DH

我們剛剛說了X3DH就是三倍的DH。從signal官方文檔說玉转,X3DH就是下圖的樣子:

1.x3dh1.jpg

圖中:
IKA:A的長(zhǎng)期Key Pair突想;
EKA:A的臨時(shí)Key Pair;
IKB:B的長(zhǎng)期Key Pair究抓;
SPKB:B的中期Key Pair猾担;
OPKB:B的臨時(shí)Key Pair;

圖中的1,2,3,4。其實(shí)就是做4次ECDH刺下。我們從代碼看看他是如何實(shí)現(xiàn)的绑嘹。

PS:我們拿Javascript的代碼,更好理解

1.x3dhsource.jpg

我已經(jīng)在圖上標(biāo)注了如何做的橘茉。簡(jiǎn)單說工腋,就是:

Final = (DH1 + DH2 + DH3 + DH4)

值得注意的是姨丈,像上圖的虛線,X3DH并不一定需要OPKB擅腰,從代碼也可以看到蟋恬,ECDH4不一定會(huì)做。

Double Ratchet雙棘輪

上面說的內(nèi)容算是比較簡(jiǎn)單的趁冈,雙棘輪才是Signal的經(jīng)典歼争,我們將在下一篇文章詳細(xì)講解。如果你對(duì)HKDF渗勘,HMAC沐绒,X3DH還不太清楚,可以多看幾遍此文章呀邢。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末洒沦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子价淌,更是在濱河造成了極大的恐慌申眼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝉衣,死亡現(xiàn)場(chǎng)離奇詭異括尸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)病毡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門濒翻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人啦膜,你說我怎么就攤上這事有送。” “怎么了僧家?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵雀摘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我八拱,道長(zhǎng)阵赠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任肌稻,我火速辦了婚禮清蚀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爹谭。我一直安慰自己枷邪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布诺凡。 她就那樣靜靜地躺著齿风,像睡著了一般药薯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上救斑,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音真屯,去河邊找鬼脸候。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绑蔫,可吹牛的內(nèi)容都是我干的运沦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼配深,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼携添!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篓叶,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤烈掠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后缸托,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體左敌,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年俐镐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矫限。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佩抹,死狀恐怖叼风,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棍苹,我是刑警寧澤无宿,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站廊勃,受9級(jí)特大地震影響懈贺,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜坡垫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一梭灿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冰悠,春花似錦堡妒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搬泥。三九已至,卻和暖如春伏尼,著一層夾襖步出監(jiān)牢的瞬間忿檩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工爆阶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燥透,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓辨图,卻偏偏與公主長(zhǎng)得像班套,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子故河,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345