Protocol-Design

密碼學挑戰:如何對斯諾登保密?

  • August 3, 2019

斯諾登的情況引發了一個有趣的密碼學問題。目前,怎麼能秘密地向斯諾登發送一些東西?

宣稱:

我沒有特別的政治傾向。上述問題僅僅是一個密碼學挑戰。元假設是……

  1. 您信任某人,稱為斯諾登,但斯諾登不信任任何人,並且您不知道有關斯諾登的任何進一步資訊,除了他的姓名或身份。
  2. 你應該小心有人,比如 FBI,可能會冒充斯諾登給你。

客觀的:

  1. 如何在不依賴任何第三方的情況下,從零開始建構您與斯諾登之間的全球安全溝通渠道?
  2. 斯諾登一開始不信任任何人,但他想通過步驟 1 中建立的安全通道(如果可能)找到他可以信任的人。這是如何完成的?

這可以通過使用密碼學來做到嗎?

為方便起見,我們將此挑戰稱為斯諾登挑戰。我們如何為斯諾登和您的安全目標建模?

  1. 生成至少與要發送的消息一樣長的加密強隨機數據文件。這將允許使用隨機數據作為一次性密碼來傳達秘密。即,通過使用諸如XOR之類的逐位組合函式來產生密文。
  2. 購買通過謝列梅捷沃機場轉機的國際航班機票。
  3. 將 OTP 數據的副本刻錄到 CD-ROM 上。給它貼上“Lady Gaga”的標籤,然後把它鎖在一個給自己戴上手銬的公文包裡。
  4. 坐飛機。在中途停留期間,在國際旅遊區找到斯諾登。
  5. 悄悄告訴斯諾登的秘密。
  6. 然後你們倆都大聲地咯咯笑著關於 Lady Gaga 的一些事情。
  7. 將 CD-ROM 丟棄在垃圾箱中,這樣間諜就不必空手而歸。
  8. (可選)與斯諾登交換公鑰以保護您未來的通信。

編輯:好的,我對留下可能被解釋為只是拖釣的回應感到難過。但說真的,這是一個經典的身份引導問題。

一旦我們完成了身份驗證,消息的完整性和機密性基本上可以通過標準的加密系統來解決。引導身份沒有靈丹妙藥,但以下是我在嘗試解決問題時問自己的問題:

第一:究竟哪些事實正在被驗證?

例如,您是否有一個聲稱是斯諾登的公鑰並且您試圖證明它是真實的?認證是有代價的,他為什麼要特意向你證明呢?

一個更容易解決的問題可能是“如果斯諾登想收到的消息,他怎麼能安全地做到這一點?”

第二:這些事實是向誰證實的?

你是想向斯諾登證明你發送的資訊是真的來自你嗎?還是某個自稱是斯諾登的不知名人士會向您證明您收到的消息來自真正的斯諾登?

第三:誰會從一次成功的攻擊中失去什麼?

也許您正在向斯諾登發送一些東西,然後依靠他完美地驗證他收到的內容(即證明不存在活躍的中間人攻擊者)。但是,如果他至少不像您那樣關心消息的安全性,那麼他可能會半心半意地做這件事,您可能會繼續不安全地傳輸消息。

第四:這些證書可以延伸多遠?

換句話說,你的行為會讓斯諾登做的不僅僅是驗證你嗎?例如,他能冒充你參加第三者嗎?反過來呢?


總之:

密碼是一種將明文機密性問題轉換為密鑰分發問題的設備。

臨時密鑰協商算法是將密鑰分發問題轉換為身份驗證問題的裝置。

簽名算法是一種將消息認證問題轉化為身份問題的裝置。

如果您可以以某種方式在一個或兩個方向上建立對身份驗證憑據的信任,那麼剩下的問題基本上是一個已解決的問題。但這只能建立在人類系統之上:你和/或斯諾登需要什麼才能相信對方是真實的?

首先,我認為您的問題對於 crypto.SE 來說不是什麼問題,並且更適合 security.SE 角落。儘管如此,這裡是:

…除了他的名字或身份…

這本身已經描述了您在安全和密碼學方面的問題。

  1. 由於缺乏驗證選項而導致的問題。

目前,世界新聞媒體(例如:路透社)以及美國政府證實,斯諾登先生的護照已被美國政府吊銷。因此,您無法驗證與您交談的人是否確實是斯諾登先生,因為沒有官方文件可以確實以可靠的方式驗證身份。 2. 由於缺乏知識而出現問題。

由於您也從未親自見過斯諾登先生,因此您無法判斷您遇到的人是否真的是斯諾登先生,而不是看起來“像他”的人。請記住,您目前擁有的唯一“知識”是一個名字和一小包新聞媒體發布的圖片。簡而言之:由於你們倆都沒有可以用來建立“信任”的“共同知識”,因此您不能信任與您交談的人。

現在……安全是基於知道、做或擁有別人無法做到的事情。在考慮用於通信目的的密碼學時尤其如此。由於您甚至不認識斯諾登先生,他也不認識您,因此無法建立安全連接和/或通信。

事實上,你們都代表彼此的**“不受信任的端點” 。**當一個或多個端點不受信任時,您無法建立安全連接。舉一個日常的例子:這就像在訪問受 SSL 保護的網站時信任無效證書一樣。

保持簡短:對稱密鑰加密不是一種選擇。

另一種方法是使用公鑰密碼術。但是:為了避免每個人都可以解密消息,解密密鑰需要秘密地而不是公開地傳遞給斯諾登先生……這不再滿足“公鑰密碼學”的定義。此外,您無法與不受信任的端點建立安全連接,這意味著您無法安全地傳遞解密密鑰。這實際上關閉了循環。

總結:人類通常是安全協議中最薄弱的環節。這是其中一種情況。

編輯

最近在對我的回复的評論中發現了一些不錯的、現實檢查的觀點……

  1. 你能相信*“公共影片”*嗎?

300人理事會 2. 即使您可以信任公共影片來傳輸密鑰,即使您忽略端點也無法確定地驗證…… “信任問題”仍然是由於“不受信任的傳輸通道”。如前所述:在這種情況下,當試圖找到一種安全的方法時,人類是最薄弱的環節。

加密書呆子

(圖片來自 http://xkcd.com/,CC BY-NC 2.5 許可)

由於評論中的討論歸結為認為公鑰加密是要走的路,這裡有一些額外的想法為什麼它在這種情況下不起作用:

在公鑰密碼系統中,私鑰由所有者保密。所有者然後通過證書頒發機構 (CA) 發布他的公鑰。CA 本質上提供(身份、公鑰)對並使用 CA 的私鑰對其進行簽名,以便可以使用“眾所周知的”對應的 CA 公鑰對其進行檢查。

現在,要查找某人的公鑰,您向 CA 發送一個請求,CA 用簽名消息回答該請求,然後您檢查其簽名。

這在斯諾登先生的案例中提供了至少兩個弱點,主要集中在 CA 可能受到損害這一事實:

  1. 如果攻擊者獲知 CA 的私鑰,他可以偽造簽名(身份、公鑰)對,看起來像是由 CA 簽名的,從而傳播虛假的公鑰記錄。
  2. 如果攻擊者以某種方式使 CA 將實體 XYZ 的公鑰記錄更改為私鑰被洩露的“偽造密鑰”,他可以使用“偽造密鑰”冒充實體 XYZ;這與上述攻擊的結果基本相同,只是 CA 可能有偽造密鑰的記錄。

因此,要與像斯諾登先生這樣的人進行安全通信,您需要確保可以與他建立可信、可驗證的直接連接,或者您需要一個雙方都信任的 CA。但是您將無法就一個普遍信任的 CA 達成一致,因為您一開始就無法與斯諾登先生建立可驗證的通信。

我們可以來回討論這個問題,事實是:信任是一個問題,如果不依賴另一個不可驗證的中間方,驗證實際上是不可能的。總結一下:你不能*“對斯諾登說一些機密的事情”(在問題中描述的目前情況下),因為“機密”*部分不能從密碼學的角度證明,因為密鑰交換問題決定了所描述的情況在問題中。

總結這一切:

如何對斯諾登保密?

你不能。由於多種原因,請閱讀我的完整答案。

引用自:https://crypto.stackexchange.com/questions/9022