歡迎光臨
每天分享高質量文章

工程師男友如何反竊聽?趣聊密碼學入門科普

本文來自阿裡技術官方公眾號(ali_tech)

導讀:誰都不想在通訊過程中被別人“竊取”小秘密。本文藉助一對情侶與八卦女、猥瑣男的鬥智故事,為大家講述科普密碼學基礎知識。既有料又有趣,深入淺出,相信你會喜歡。

背景

事情是這樣的,Alice 和 Bob 是一對 CP。兩人之間難免要說一些 secret,又不想被別人偷聽,怎麼辦呢?本文就是講述這對 CP 之間如何安全隱秘地聊天。如何跟無(wěi)聊(suǒ)份子們鬥智鬥勇的故事。先介紹一下將要登場的各個角色:


  • Alice:話嘮,嚴重的傾訴欲,和 Bob 是 CP。

  • Bob:沉默男,理工男,和 Alice 是 CP。

  • Eve:Alice 的室友,熱衷於偷聽八卦。

  • Mallory:猥瑣男,專業搞破壞 20 年。

  • Trent:長者,相當具有權威性,大家都相信他。


如何不被竊聽 —— 加密


剛開始時,Alice 和 Bob 沒有安全意識。平時說話聊天沒有什麼防範措施,經常被 Eve 偷聽。但礙於情面又不好直說,為此煩惱不已。偷聽過程如下:


Bob 是個技術男,想到一個辦法。既然有人偷聽,那我為什麼不加密呢?說乾就乾,他事先和 Alice 商定一個金鑰(key),是個隨機值,別人猜不出來。從此這對 CP 之間聊天就用這個 key 進行加密保護,如下:


從圖中可以看到,Alice 在說話前,先用 key 對訊息內容進行加密。傳送訊息時,不再直接傳遞“我剛買了個包包”這麼直白的明文,而是 “*&2#%/Qw@##” 這種誰都看不懂的密文。即使被 Eve 竊聽,她也完全看不懂神馬意思,只能表示 WTF。Bob 收到密文後,先用 key 對其進行解密,得到原始的訊息內容“我剛買了個包包”。


旁白:


  • 這種加密方案在密碼學裡稱為對稱密碼,加密方和解密方使用的是相同的金鑰。

  • 知名的密碼演演算法有 AES(2001)、Blowfish(1993)、DES(1977),再遠一點,有二戰時期的恩尼格碼(轉輪機原理,德國)、紫色密碼(轉輪機原理,日本),以及著名的凱撒密碼(沒錯就是地中海北岸那個凱撒)、柵欄密碼等。後續會寫文章專門進行各個演演算法的效能比較、安全性比較。

  • 友情提示: 密碼學裡的“密碼”和現實生活中的“密碼”不是一回事兒!後者一般指的是口令(password),比如登入淘寶、QQ、ATA輸入的那個東西。順便說下,有些耿直的 boy 會把自己的口令設定得炒雞簡單,比如 12345678 、helloworld 等。這是萬萬不能夠的,小心被人猜出來。


言歸正傳,一切看起來是那麼完美。Alice 和 Bob 以為可以高枕無憂了,卻沒想到道高一尺,Eve 高一丈。


如何交換金鑰 —— 非對稱加密


自從 Alice 和 Bob 使用了“加密”這種秘密武器之後,Eve 什麼都聽不到了。為此她寢食難安,沒有八卦的生活還有神馬意義!? 還好,Eve 不是普通的 Eve,她並不只是一個八卦女,她是個懂科技的 girl。思考幾天之後,Eve 意識到這對 CP 肯定是用了加密的。一不做二不休,Eve 找到了破解辦法,請看下圖。


Eve 觀察到那對 CP 之間為了安全性,會經常更換 key。為此,她尋找一個合適的時機,把 key 竊取到手。之後,Eve 又可以愉快的竊聽了,終於可以睡個安穩覺。竊聽過程如下:


有 key 在手,Eve 截獲訊息之後,就可以像 Bob 一樣把訊息明文解密出來。


不過好景不長,相對於 Eve 來說,Bob 才是掌握核心科技的。他很快發現 Eve 的這一行為,想到另一個辦法: 非對稱加密。具體過程如下:


  • Bob 事先生成一對公鑰和私鑰,私鑰 pri 由自己保管,把公鑰 pub 發給 Alice。

  • Alice 使用 pub 對訊息內容進行加密,Bob 用 pri 進行解密。

  • 需要註意的是, 只有私鑰才可以解密,所以即使 Eve 竊取到了 pub(只有 pub 被傳輸而容易被竊取),她也無法解密。


另外,這種方式還有個顯著優點。假使 Bob 還有很多別的女友(嚴重抨擊這種行為),他可以把同一個公鑰 pub 都發給她們,各個女友都用這個 pub 和 Bob 進行通訊。構成“多對一”的通訊關係,卻不用擔心女友 A 竊聽到女友 B 和 Bob 之間的聊天內容,因為 pub 無法解密。而在對稱密碼中,Bob 必須為每個女友都分發一個不同的 key,這很難保管。


旁白:


  • 這種加密方式在密碼學裡稱為非對稱密碼,所謂“非對稱”指的是加密方和解密方用的金鑰不一樣。

  • 知名的非對稱演演算法有:DSA(數字簽名演演算法,只能用於簽名,1991)、ECC(橢圓曲線加密,1985)、RSA(公鑰加密演演算法,1977)等。

  • 這些演演算法除了用於加密外,還可以用於 數字簽名,本文後面會講到。

  • 非對稱演演算法有個致命弱點: 效能很低。實際應用中一般採用混合加密體制、雜湊簽名體制,後續會寫文章中進行介紹。


好了,現在通道安全問題已經解決啦,不用再擔心 secret 被 Eve 偷聽。但是情場多艱,猥瑣男 Mallory 現在隆重登場。


如何防止資料篡改 —— MAC


文章開頭說了,Mallory 是個專業搞破壞 20 年的男人,這次也不例外。請看下圖:



Mallory 並不是八卦小女生,他對偷聽秘密沒有任何興趣。生而不羈,他決定搞一些惡作劇,篡改一下訊息吧。於是他把 “我剛買了個包包” 改成“我決定跟你分手”,但 Bob 卻不知道已被篡改,還以為是 Alice 的原話。那麼問題來了,求此刻 Bob 的心理陰影面積。


經過一番狗血的情感糾葛之後,Alice 表示還是愛他的,Bob 終於意識到有人在從中作梗。這還得了,之前我們一直強調,Bob 是個掌握核心科技的 boy,他很快就想到了應對措施。請看下圖(為了簡單起見,本例僅展示防篡改的情況,沒有對 message 做加密):


圖中的 MAC 指的是 訊息認證碼(Message Authentication Code),你現在不需知道它的原理,只要記住 :(1)傳入兩個引數 message 和 key,進行一系列計算後得到一個值叫 MAC。(2)只有 message 和 key 相同的情況下,才能得到相同的 MAC。


  • 跟對稱加密一樣,這對 CP 之間會事先協商一個 key。

  • Alice 使用 key 對 message 計算出一個 MAC1,並把 message + MAC1 發給 Bob。

  • Bob 收到之後,用自己的 key 對 message 計算出一個 MAC2,再比較 MAC1 和 MAC2 是否一致。

  • 根據 MAC 的性質,如果 message 被篡改,那麼計算得到的 MAC2 一定不等於 MAC1,驗證失敗,Bob 得出結論:有人篡改了訊息。

  • 由於僅 Alice 和 Bob 擁有 key,所以別人無法篡改 message 後偽造出一個有效的 MAC。

  • 在檢測篡改方面,還可以用HASH(雜湊)演演算法,包括MD5、SHA1/224/256/384/512等。比如版本控制系統GIT就使用SHA1來檢查檔案是否有修改。


旁白:


  • 訊息認證碼有多種實現方式,其中最常見的是 HMAC(Hash MAC),即使用雜湊演演算法來實現 MAC,還有一種是基於分組密碼演演算法的 MAC,不常見。

  • 聰明如你,肯定會想到如果 key 被竊取該怎麼辦?這就涉及到 數字簽名了,後文會講到。


如何校驗身份 —— MAC


Mallory 還有個小伎倆,那就是冒充身份,恰好 MAC 也可以對付這個。且看下圖:


Mallory 發一個訊息給 Bob,說“親愛的,我是 Alice 哦,balabala…”。如果沒有校驗措施,Bob 可能就中招了。同樣的,Bob 可以用以下方式進行防範:


只有 Alice 和 Bob 擁有相同的 key,所以 Bob 只有在校驗 MAC 成功時才會相信對方是 Alice。而 Mallory 沒有這個 key,偽造的 MAC 肯定會校驗失敗的,所以計謀不能得逞。


旁白:


  • MAC包含幾種實現方式:基於 HASH 的 MAC 稱為 HMAC,應用比較廣泛。

  • 有些同學應該接觸過阿裡雲的 Access Key,其實就是 HMAC 的原理。

  • 有些同學在兩個系統之間API呼叫時,會使用同一個 key 做 md5 計算來實現 API 鑒權,這稱為“加鹽HASH”,可以簡單理解為 HMAC 的簡化版。

  • 同樣的,如果 key 被竊取該怎麼辦?這可以用 數字簽名來解決。


更進一步 —— 數字簽名


MAC 雖好,但是遇到和對稱密碼同樣的問題:金鑰如何交換。


其中一個解決方式就是 數字簽名,這個“簽名”你基本可以想象成現實生活中的手寫簽名,具有類似的作用。原理上和非對稱加密有點像,但有個很大的區別,傳送方是用 私鑰進行簽名,而接收方用 公鑰 進行驗簽,這跟加密情況正好相反。


Bob 可以用數字簽名來校驗訊息是否被篡改,請看下圖:


原理上和圖 6 差不多,但區別在於:由 Alice 事先生成一對公鑰 pub 和私鑰 pri,並把 pub 傳送給 Bob,前者用 pri 加簽,後者用 pub 驗簽。驗簽失敗說明訊息被篡改。


也可以用於身份校驗,請看下圖:


Mallory 沒有 Alice 的 pri,所以無論如何他也沒法冒充 Alice 的身份。


看到這裡,大家可能都鬆了一口氣,以為這小倆口終於沒事兒了。但情場多變,萬一哪天 Alice 變心了呢,她給 Bob 發了一條訊息,說“分手吧”,如下圖:


可是發完之後又有點後悔,但他們使用的不是 釘釘,並沒有訊息撤回功能。怎麼辦?所以說 Alice 還是有點 too naive,她妄想可以矢口否認,把 shit 盆子扣到破壞小王子 Mallory 身上,聲稱“剛才那句話是 Mallory 說的” 等云云。


Mallory 雖然猥瑣,但也是個講“原則“的 man,你扣盆子也要講基本法啊!於是他跳出來說, “表冤枉我,我又沒有 Alice 的私鑰”。


這是什麼意思呢?原來數字簽名還具有“抗否認”的神奇功效,Alice 講的話裡帶有她的簽名,是不能否認的(是不是有點類似現實生活中的手寫簽名?)。任何不講基本法的栽贓陷害都是無效的…


公鑰的身份證 —— 數字證書


如果你以為 Eve 和 Mallory 就此屈服於非對稱加密和數字簽名的威力,那你就真的是圖樣了。所謂 “兩汪戰一虎,四汪沉航母。六汪戲上帝,八汪創世紀”,他們決定聯合起來,找出公鑰機制的破綻。偉大友誼自然會有效果,他們果真找到了破解之法(絕對不是劇情發展需要…)。


沒錯,就是 偽造公鑰。我們先拿公鑰加密來舉例子,圖4 中講到,Bob 需要事先生成公鑰 pub 和私鑰 pri ,然後把 pub 分發給 Alice。那麼攻擊過程就從這入手:


  • Eve 生成自己的一對公鑰 pub’ 和 私鑰 pri’,截獲 Bob 的 pub,並用自己的 pub’ 冒充 Bob 的公鑰發給 Alice。如下圖:


  • Alice 用 pub’ 加密訊息,發送出去。

  • Eve 截獲 Alice 的資料,並用 pri’ 解密得到訊息明文。

  • Eve 偽造一個假資料“幹嘛呵呵去洗澡”,並用 pub 加密後發給 Bob。

  • Bob 用 pri 解密,拿到偽造的資料,以為是 Alice 發給他的。


這是個“偷天換日”的過程,Eve 透過偽造公鑰(中間人攻擊),不光竊聽到 Alice 的訊息,還能保證整個過程中 Alice 和 Bob 都沒有察覺!

再來看一下 Mallory 怎樣用偽造公鑰的方式來冒充身份。圖10 中講到,Alice 需要事先把自己公鑰發給 Bob,所以攻擊過程就從這入手:


  • Mallory 生成自己的公鑰 pub’ 和 私鑰 pri’,截獲 Alice 的 pub,並用自己的 pub’ 冒充 Alice 的公鑰發給 Bob,如下圖:


  • Alice 用正常私鑰 pri 進行簽名,併發給 Bob。

  • Bob 手裡拿的是被偽造的公鑰 pub’,所以對 Alice 的 sign 會驗簽失敗,認為對方不是 Alice。

  • Mallory 用自己私鑰 pri ‘ 進行簽名,併發給 Bob。

  • Bob 用被偽造的公鑰 pub’ 進行驗簽,可以驗簽成功,認為對方是 Alice。


這個過程中,Mallory 透過偽造 Alice 公鑰,成功冒充了 Alice 的身份。

這種偽造公鑰的攻擊方式讓 Bob 很頭疼,思考了很久,終於想到一個辦法。這次他找來了幫手 —— Trent。文章開頭有介紹過,Trent 非常具有權威性,而且能保證自身不受攻擊(或者別人不敢攻擊),就像現實生活中的公安局。


Eve 不是喜歡偽造公鑰嗎,Bob 這次就要請 Trent 為自己的公鑰註冊一張 “身份證” —— 數字證書。見證如見人,哦不對,見證如見公鑰!以下是註冊數字證書的過程:

  • Bob 請求 Trent 為自己的公鑰 pub 註冊一個證書。

  • Trent 收到請求後,用自己的私鑰 pri ‘ 對 pub(以及身份資訊) 進行簽名,得到一個 sign。

  • Trent 把證書 certificate = pub + sign 頒發給 Bob。

  • Bob 把自己的證書 pub + sign 發給 Alice。

  • Alice 使用 Trent 的公鑰 pub ‘ 對 sign 進行驗簽,如果校驗成功則說明 pub 的確是 Bob 的公鑰,因為她相信 Trent 的權威性。


Eve 不可能找 Trent 為她辦一個 Bob 的數字證書,因為 Trent 不會同意的,就像警察蜀黍不會給我辦一張別人的身份證一樣。所以,Eve 無法偽造 Bob 的公鑰。


同理,為了防止 Mallory 偽造公鑰來冒充身份,Alice 也需要向 Trent 註冊自己的公鑰,得到一個數字證書,用於防止別人偽造公鑰。


旁白:


  • 考慮到非對稱演演算法的效率問題,實際應用中一般是先對資料進行雜湊,然後才用私鑰對雜湊值(摘要)進行簽名。

  • Trent 在密碼技術領域中一般稱為 認證機構(Certification Authority,即 CA)。

  • 以數字證書為基礎,業界制定了一系列的規範和規格,比如由誰頒發證書、如何進行頒發、如何作廢證書等,稱為 公鑰基礎設施(Public-Key Infrastructure,即 PKI)。

關於我們

城市大腦X實驗室是國家城市大腦專案的主要搭建與落地團隊,承載了實現城市大資料的融合與治理工作,為城市的發展提供必要的土壤,依託阿裡雲強大的算力,用強大的智慧演演算法解決交通、公安、司法、治安等問題。


●編號693,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

Linux學習

更多推薦18個技術類公眾微信

涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

贊(0)

分享創造快樂