|
—— 本文由本人首發(fā)于“阿里技術(shù)”公眾號(hào):鏈接 事情是這樣的,Alice 和 Bob 是一對(duì) CP。兩人之間難免要說(shuō)一些 secret,又不想被別人偷聽(tīng),怎么辦呢?本文就是講述這對(duì) CP 之間如何安全隱秘的聊天,如何跟無(wú)(wěi)聊(suǒ)份子們斗智斗勇的故事。先介紹一下將要登場(chǎng)的各個(gè)角色:
如何不被竊聽(tīng) —— 加密剛開(kāi)始時(shí),Alice 和 Bob 沒(méi)有安全意識(shí)。平時(shí)說(shuō)話聊天沒(méi)有什么防范措施,經(jīng)常被 Eve 偷聽(tīng)。但礙于情面又不好直說(shuō),為此煩惱不已。偷聽(tīng)過(guò)程如下: Bob 是個(gè)技術(shù)男,想到一個(gè)辦法。既然有人偷聽(tīng),那我為什么不 加密 呢?說(shuō)干就干,他事先和 Alice 商定一個(gè) 密鑰(key),是個(gè)隨機(jī)值,別人猜不出來(lái)。從此這對(duì) CP 之間聊天就用這個(gè) key 進(jìn)行加密保護(hù),如下: 從圖中可以看到,Alice 在說(shuō)話前,先用 key 對(duì)消息內(nèi)容進(jìn)行加密。發(fā)送消息時(shí),不再直接傳遞“我剛買(mǎi)了個(gè)包包”這么直白的 明文 ,而是 “*&2#%/Qw@##” 這種誰(shuí)都看不懂的 密文。即使被 Eve 竊聽(tīng),她也完全看不懂神馬意思,只能表示 WTF。Bob 收到密文后,先用 key 對(duì)其進(jìn)行解密,得到原始的消息內(nèi)容“我剛買(mǎi)了個(gè)包包”。 旁白:
言歸正傳,一切看起來(lái)是那么完美。Alice 和 Bob 以為可以高枕無(wú)憂了,卻沒(méi)想到道高一尺 Eve 高一丈。 如何交換密鑰 —— 非對(duì)稱加密自從 Alice 和 Bob 使用了“加密”這種秘密武器之后,Eve 什么都聽(tīng)不到了。為此她寢食難安,沒(méi)有八卦的生活還有神馬意義?。?還好,Eve 不是普通的 Eve,她并不只是一個(gè)八卦女,她是個(gè)懂科技的 girl。思考幾天之后,Eve 意識(shí)到這對(duì) CP 肯定是用了加密的。一不做二不休,Eve 找到了破解辦法,請(qǐng)看下圖。 Eve 觀察到那對(duì) CP 之間為了安全性,會(huì)經(jīng)常更換 key。為此,她尋找一個(gè)合適的時(shí)機(jī),把 key 竊取到手。之后,Eve 又可以愉快的竊聽(tīng)了,終于可以睡個(gè)安穩(wěn)覺(jué)。竊聽(tīng)過(guò)程如下: 有 key 在手,Eve 截獲消息之后,就可以像 Bob 一樣把消息明文解密出來(lái)。 不過(guò)好景不長(zhǎng),相對(duì)于 Eve 來(lái)說(shuō),Bob 才是掌握核心科技的。他很快發(fā)現(xiàn) Eve 的這一行為,想到另一個(gè)辦法: 非對(duì)稱加密。具體過(guò)程如下:
另外,這種方式還有個(gè)顯著優(yōu)點(diǎn)。假使 Bob 還有很多別的女友(嚴(yán)重抨擊這種行為),他可以把同一個(gè)公鑰 pub 都發(fā)給她們,各個(gè)女友都用這個(gè) pub 和 Bob 進(jìn)行通信。構(gòu)成“多對(duì)一”的通信關(guān)系,卻不用擔(dān)心女友 A 竊聽(tīng)到女友 B 和 Bob 之間的聊天內(nèi)容,因?yàn)?pub 無(wú)法解密。而在對(duì)稱密碼中,Bob 必須為每個(gè)女友都分發(fā)一個(gè)不同的 key,這很難保管。 旁白:
好了,現(xiàn)在信道安全問(wèn)題已經(jīng)解決啦,不用再擔(dān)心 secret 被 Eve 偷聽(tīng)。但是情場(chǎng)多艱,猥瑣男 Mallory 現(xiàn)在隆重登場(chǎng)。 如何防止數(shù)據(jù)篡改 —— MAC文章開(kāi)頭說(shuō)了,Mallory 是個(gè)專業(yè)搞破壞 20 年的男人,這次也不例外。請(qǐng)看下圖: Mallory 并不是八卦小女生,他對(duì)偷聽(tīng)秘密沒(méi)有任何興趣。生而不羈,他決定搞一些惡作劇,篡改一下消息吧。于是他把 “我剛買(mǎi)了個(gè)包包” 改成“我決定跟你分手”,但 Bob 卻不知道已被篡改,還以為是 Alice 的原話。那么問(wèn)題來(lái)了,求此刻 Bob 的心理陰影面積。 經(jīng)過(guò)一番狗血的情感糾葛之后,Alice 表示還是愛(ài)他的,Bob 終于意識(shí)到有人在從中作梗。這還得了,之前我們一直強(qiáng)調(diào),Bob 是個(gè)掌握核心科技的 boy,他很快就想到了應(yīng)對(duì)措施。請(qǐng)看下圖(為了簡(jiǎn)單起見(jiàn),本例僅展示防篡改的情況,沒(méi)有對(duì) message 做加密): 圖中的 MAC 指的是 消息認(rèn)證碼(Message Authentication Code),你現(xiàn)在不需知道它的原理,只要記住 :(1)傳入兩個(gè)參數(shù) message 和 key,進(jìn)行一系列計(jì)算后得到一個(gè)值叫 MAC。(2)只有 message 和 key 相同的情況下,才能得到相同的 MAC。
旁白:
如何校驗(yàn)身份 —— MACMallory 還有個(gè)小伎倆,那就是冒充身份,恰好 MAC 也可以對(duì)付這個(gè)。且看下圖: Mallory 發(fā)一個(gè)消息給 Bob,說(shuō)“親愛(ài)的,我是 Alice 哦,balabala...”(求猥瑣程度...)。如果沒(méi)有校驗(yàn)措施,Bob 可能就中招了。同樣的,Bob 可以用以下方式進(jìn)行防范: 只有 Alice 和 Bob 擁有相同的 key,所以 Bob 只有在校驗(yàn) MAC 成功時(shí)才會(huì)相信對(duì)方是 Alice。而 Mallory 沒(méi)有這個(gè) key,偽造的 MAC 肯定會(huì)校驗(yàn)失敗的,所以計(jì)謀不能得逞。 旁白:
更進(jìn)一步 —— 數(shù)字簽名MAC 雖好,但是遇到和對(duì)稱密碼同樣的問(wèn)題:密鑰如何交換。 其中一個(gè)解決方式就是 數(shù)字簽名,這個(gè)“簽名”你基本可以想象成現(xiàn)實(shí)生活中的手寫(xiě)簽名,具有類似的作用。原理上和非對(duì)稱加密有點(diǎn)像,但有個(gè)很大的區(qū)別,發(fā)送方是用 私鑰進(jìn)行簽名,而接收方用 公鑰 進(jìn)行驗(yàn)簽,這跟加密情況正好相反。 Bob 可以用數(shù)字簽名來(lái)校驗(yàn)消息是否被篡改,請(qǐng)看下圖: 原理上和圖 6 差不多,但區(qū)別在于:由 Alice 事先生成一對(duì)公鑰 pub 和私鑰 pri,并把 pub 發(fā)送給 Bob,前者用 pri 加簽,后者用 pub 驗(yàn)簽。驗(yàn)簽失敗說(shuō)明消息被篡改。 也可以用于身份校驗(yàn),請(qǐng)看下圖: ![]() Mallory 沒(méi)有 Alice 的 pri,所以無(wú)論如何他也沒(méi)法冒充 Alice 的身份。 看到這里,大家可能都松了一口氣,以為這小倆口終于沒(méi)事兒了。但情場(chǎng)多變,萬(wàn)一哪天 Alice 變心了呢,她給 Bob 發(fā)了一條消息,說(shuō)“分手吧”,如下圖: ![]() 可是發(fā)完之后又有點(diǎn)后悔,但他們使用的不是 釘釘,并沒(méi)有消息撤回功能。怎么辦?所以說(shuō) Alice 還是有點(diǎn) too naive,她妄想可以矢口否認(rèn),把 shit 盆子扣到破壞小王子 Mallory 身上,聲稱“剛才那句話是 Mallory 說(shuō)的” 等云云。 Mallory 雖然猥瑣,但也是個(gè)講“原則“的 man,你扣盆子也要講基本法??!于是他跳出來(lái)說(shuō), “表冤枉我,我又沒(méi)有 Alice 的私鑰”。 這是什么意思呢?原來(lái)數(shù)字簽名還具有 抗否認(rèn) 的神奇功效,Alice 講的話里帶有她的簽名,是不能否認(rèn)的(是不是有點(diǎn)類似現(xiàn)實(shí)生活中的手寫(xiě)簽名?)。任何不講基本法的栽贓陷害都是無(wú)效的... 公鑰的身份證 —— 數(shù)字證書(shū)如果你以為 Eve 和 Mallory 就此屈服于非對(duì)稱加密和數(shù)字簽名的威力,那你就真的是圖樣了。所謂 “兩汪戰(zhàn)一虎,四汪沉航母。六汪戲上帝,八汪創(chuàng)世紀(jì)”,他們決定聯(lián)合起來(lái),找出公鑰機(jī)制的破綻。偉大友誼自然會(huì)有效果,他們果真找到了破解之法(絕對(duì)不是劇情發(fā)展需要...)。 沒(méi)錯(cuò),就是 偽造公鑰。我們先拿公鑰加密來(lái)舉例子,圖4 中講到,Bob 需要事先生成公鑰 pub 和私鑰 pri ,然后把 pub 分發(fā)給 Alice。那么攻擊過(guò)程就從這入手:
![]()
![]() 這是個(gè)“偷天換日”的過(guò)程,Eve 通過(guò)偽造公鑰(中間人攻擊),不光竊聽(tīng)到 Alice 的消息,還能保證整個(gè)過(guò)程中 Alice 和 Bob 都沒(méi)有察覺(jué)! 再來(lái)看一下 Mallory 怎樣用偽造公鑰的方式來(lái)冒充身份。圖10 中講到,Alice 需要事先把自己公鑰發(fā)給 Bob,所以攻擊過(guò)程就從這入手:
![]()
![]() 這個(gè)過(guò)程中,Mallory 通過(guò)偽造 Alice 公鑰,成功冒充了 Alice 的身份。 這種偽造公鑰的攻擊方式讓 Bob 很頭疼,思考了很久,終于想到一個(gè)辦法。這次他找來(lái)了幫手 —— Trent。文章開(kāi)頭有介紹過(guò),Trent 非常具有權(quán)威性,而且能保證自身不受攻擊(或者別人不敢攻擊),就像現(xiàn)實(shí)生活中的公安局。 Eve 不是喜歡偽造公鑰嗎,Bob 這次就要請(qǐng) Trent 為自己的公鑰注冊(cè)一張 “身份證” —— 數(shù)字證書(shū)。見(jiàn)證如見(jiàn)人,哦不對(duì),見(jiàn)證如見(jiàn)公鑰!以下是注冊(cè)數(shù)字證書(shū)的過(guò)程: ![]()
Eve 不可能找 Trent 為她辦一個(gè) Bob 的數(shù)字證書(shū),因?yàn)?Trent 不會(huì)同意的,就像警察蜀黍不會(huì)給我辦一張別人的身份證一樣。所以,Eve 無(wú)法偽造 Bob 的公鑰。 同理,為了防止 Mallory 偽造公鑰來(lái)冒充身份,Alice 也需要向 Trent 注冊(cè)自己的公鑰,得到一個(gè)數(shù)字證書(shū),用于防止別人偽造公鑰。 旁白:
自古情場(chǎng)多艱,且聽(tīng)下回分解。
|
|
|