端到端加密
端到端加密(End-to-end encryption,縮寫:E2EE),是一種只有參與通訊的用戶可以讀取信息的通信系統。總的來說,它可以防止潛在的竊聽者——包括電信供應商、互聯網服務供應商[1] 甚至是該通訊系統的提供者——獲取能夠用以解密通訊的密鑰。此類系統被設計為可以防止潛在的監視或篡改企圖,因為沒有密鑰的第三方難以破譯系統中傳輸或儲存的數據。舉例來說,使用端到端加密的通訊提供商,將無法將其客戶的通訊數據提供給當局。
目錄
現代的用法
直到2016年,典型的基於中心服務器的通信系統尚不包括端到端加密功能。此類系統至多只能保證客戶端到服務端之間的通訊受到保護。這意味着通訊雙方必須信任服務端的運營者,因為他可以閱讀通訊的全部明文內容。相比之下,端到端加密被認為是更安全的,因為這種機制極大減少了第三方干擾或破壞通訊加密的可能性。對於使用普通即時通訊(IM)產品的用戶,通常可以選擇使用第三方客戶端或加解密插件,以便在非E2EE協議的通訊中實現端到端加密。
一些非E2EE的通訊系統,例如拉維畢特和 Hushmail 宣稱提供了端到端加密,但實際上並沒有。而另一些系統,例如 Telegram和 谷歌Allo,由於沒有默認啟用端到端加密而受到了批評。
一些加密的文件備份和文件共享服務提供客戶端加密。但這並不能稱作端到端加密,因為此類服務並不是用來在用戶之間交換信息的。 但在很多場合,這兩個術語經常被混用。
挑戰
中間人攻擊
端到端加密能確保數據安全保密地傳輸於通訊的兩端之間。但對於不懷好意的竊聽者而言,與其嘗試破解加密,不如冒充的消息接受方(例如,在密鑰交換期間冒名頂替,或是設法將收件人公布的公共密鑰替換成自己的)來得方便,因為此後,發信人發出的信息將以一個竊聽者掌握的密鑰進行加密。在獲取解密的信息後,監聽者還可以冒充發信人,與實際的接收者進行密鑰交換、發送訊息,以避免通訊雙方察覺異常。由於攻擊者處在通訊雙方之間,因此這種攻擊方式被稱為中間人攻擊的。
身份驗證
大多數端到端加密協議都設計了某種形式的終端認證機制,專門用來防禦中間人攻擊,例如依靠數字證書認證機構或信任網絡進行驗證。其他的技術包括的針對用戶公鑰或預共享密鑰生成密碼哈希(設備指紋)。通訊各方可以通過外部(out-of-band)通信渠道來校驗這一指紋,便可確認通訊的完整性和真實性(但不能保證機密性),之後再展開真實對話。如果指紋匹配的話,理論上可以確認不存在中間人攻擊。
為了方便人工檢查,指紋通常會顯示為十六進制字符串。這些字符串通常會編排成特定格式並編組,以提高可讀性。例如,128位MD5指紋會顯示如下:
43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
在一些協議中,指紋會被顯示成自然語言。這是通過在指紋塊與文字之間建立一對一的映射來實現的,因此不會有熵損失。有些協議還能匹配地顯示為用戶的母語(如參照設備的語言設定)。 但是,在跨語言的環境下這種技術會帶來一些問題。 為了提高本地化程度,一些協議選擇將指紋顯示為十進制字符串,而不是十六進制或自然語言串。現代化的通訊應用也可以把指紋顯示為二維碼,供用戶使用其他設備掃描讀取。
終端安全
端到端加密並不能避免終端本身的安全風險。每個用戶的計算機等設備上仍然存在密鑰被盜(以進行中間人攻擊),或是是被解密的信息被讀取的可能性。即使是最完美的加密通信,他的安全性仍然受制於兩端「信箱」的安全性。提升端點安全性的手段主要有:將密鑰的產生、儲存和加解密操作獨立到一個小的智能卡上,例如Google Project Vault。然而,由於明文輸入和輸出仍然對於用戶設備來說依舊是可見的,因此惡意軟件仍然可以實時竊聽用戶的對話。一個更強大的方式是將所有敏感數據隔離到一台由網閘完全限制的計算機上。一些專家已經建議將PGP用於此目的:
然而,正如布魯斯·施奈爾所指出的,美國和以色列開發的「震網」病毒成功地通過離線渠道進入並癱瘓了伊朗在納坦茲建設的核設施。 為了避免惡意軟件導致的密鑰泄漏、一種方法是將可信計算基分散在兩個單向連接的計算機上,以避免惡意軟件感染及其導致的敏感數據泄漏。
密鑰交換
在一個端到端加密的系統中,用於加解密的密鑰必須被、且僅被參與通訊的各方掌握。為實現這一目的,端到端加密系統可以使用事先預定好的一串字符(稱為「預共享密鑰」)來加密數據(如PGP),也可以使用該字符串生成一次性密碼來進行加密(如DUKPT)。此外,參與通訊的各方還可以通過協商(迪菲-赫爾曼密鑰交換協議)創建密鑰(如OTR)。