中文網(wǎng)絡(luò)上對(duì)OTR(Off-the-record)技術(shù)文章甚少嬉荆,實(shí)際上聊天上采用OTR技術(shù)具有極大的安全性泵额。OTR是一種結(jié)合Diffie-Hellman密鑰交換算法型型、AES算法鸿脓、SHA-1哈希算法的加密在明文情況下傳輸?shù)募夹g(shù)。
通過(guò)OTR技術(shù)妹懒,能夠?qū)崿F(xiàn):
加密聊天內(nèi)容
證明與你聊天的人就是與你聊天的人(防止中間人攻擊)
服務(wù)器無(wú)法記錄你的真實(shí)聊天內(nèi)容
原理
消息鑒別碼(MAC)
在密碼學(xué)中雀监,消息鑒別碼(Message Authentication Code)是經(jīng)過(guò)特定算法后產(chǎn)生的一小段信息,檢查某段消息的完整性,以及作身份驗(yàn)證会前。
假設(shè)有兩個(gè)聊天用戶好乐,一個(gè)叫Alice,一個(gè)叫Bob瓦宜。
例如:Alice要給一個(gè)叫Bob發(fā)信蔚万,Alice將明文MK使用Hash算法進(jìn)行摘要提取,提取結(jié)果為Hash(MK)临庇,之后用Alice的私鑰對(duì)摘要進(jìn)行簽名SA[Hash(MK)]反璃,之后將MK和SA[Hash(MK)]一同發(fā)給Bob。
其中SA[Hash(MK)]便可稱之為消息鑒別碼(MAC)假夺。
它可以用來(lái)檢查在消息傳遞過(guò)程中淮蜈,其內(nèi)容是否被更改過(guò),不管更改的原因是來(lái)自意外或是蓄意攻擊侄泽。同時(shí)可以作為消息來(lái)源的身份驗(yàn)證礁芦,確認(rèn)消息的來(lái)源蜻韭。
過(guò)程
第一步悼尾,使用Diffie-Hellman雙方交換公鑰,確認(rèn)公鑰可以信任(只大概敘述肖方,取mod運(yùn)算被簡(jiǎn)化)闺魏。
Alice(用A表示)和Bob(用B表示)每人分別取一個(gè)數(shù)x,y,并且取一個(gè)g
A->B: Alice 生成gx,并且簽名SignAlice(gx)
B->A: Bob 生成gy俯画,并且簽名SignBob(gy)
SS=g^xy: 生成共享的公鑰
第二步析桥,使用公鑰加密消息,消息傳遞艰垂。
計(jì)算EK=Hash(SS), MK=Hash(EK)
A->B: Encek(M), MAC(Encek(M),MK)
Enc采用對(duì)稱加密算法泡仗,比如AES算法用EK作為密鑰
Bob 用MK驗(yàn)證MAC, 用EK解密M
保密性和真實(shí)性得到了保證
第三步,更新密鑰
Alice and Bob 再取一個(gè)x',y'
A->B: g^x’, MAC(g^x’, MK)
B->A: g^y’, MAC(g^y’, MK)
SS’ = H(g^x’y’)
EK’ = H(SS’), MK’=H(EK’)
隨后猜憎,Alice和Bob安全清除掉之前的SS, x, y, EK
第四步娩怎,繼續(xù)保留 MK
Alice 和 Bob 并不需要去清除MK
事實(shí)上,在他們發(fā)下一條消息的時(shí)候還用著之前的MK
這讓中間人攻擊者只能偽造過(guò)去的消息胰柑,并不能對(duì)現(xiàn)在的消息造成影響
從宏觀的角度上來(lái)看截亦,假設(shè)是Alice是消息發(fā)送方 發(fā)給 Bob是消息接受方,大致步驟可以分為:
Alice 和 Bob 都自行生成一對(duì)公私鑰對(duì)柬讨,并將自己的公鑰發(fā)送給對(duì)方
若消息Alice打算發(fā)送消息M崩瓤,則發(fā)送方首先用Bob的公鑰和自己的私鑰對(duì)M進(jìn)行加密、簽名踩官,得到M1
M1經(jīng)由服務(wù)器被發(fā)送給消息接收方
Bob用自己的私鑰和Alice的公鑰對(duì)M1進(jìn)行解密却桶、簽名校驗(yàn),最終還原出M
Awesome OTRs
官網(wǎng): https://otr.cypherpunks.ca/
pidgin-otr: https://otr.cypherpunks.ca/gentoo-install/otr-setup.html
JavaScript 實(shí)現(xiàn): https://github.com/arlolra/otr
otr.to源代碼(JS): https://github.com/OTRMan/otr.to-chat
一個(gè)python的otr項(xiàng)目: https://github.com/SpiralP/HexChat-otr
otrtalk(JS): https://github.com/mnaamani/otrtalk
Facebook的OTR實(shí)現(xiàn)Chrome插件:https://github.com/osnr/otron
一個(gè)基于OTR技術(shù)的P2P聊天系統(tǒng): https://github.com/mehrvarz/P2pChatOTR
小結(jié)
研究算法的過(guò)程很有趣蔗牡,也很累颖系,每次應(yīng)用OTR技術(shù)聊天的時(shí)候畴嘶,我都強(qiáng)烈的感受到我的數(shù)據(jù)包被加密解密的過(guò)程,不知道為什么集晚,感覺(jué)窗悯,異常,舒爽...