2013年8月27日 星期二

OpenBSD 並沒有內藏 FBI 後門; 值得關切的是神秘版的 RSA 加解密演算法及 SecurID

[2013/12/22 補充: 啊! RSA 的後門不只是 理論上 存在於亂數產生器當中。 最新的 Snowden 解密證實: (中文) NSA 以三億台幣誘騙(或買通?) RSA公司, 在其產品內植入 Dual EC 後門。 路透社衛報簡中。]

前陣子在 blogger 後臺查看小格流量來源自 high 的時候, 看到 這串討論, 裡面某大大宣稱 OpenBSD 被 FBI 植入後門。 正好, 先前在寫 「Windows 暗藏 NSA 後門」 的時後, 恰巧研究過這個謠言。 本來想說 OpenBSD 是小眾的小眾, 有點懶得談; 不過現在發現連 ubuntu 的大大都被騙了, 當然要幫 OpenBSD 澄清一下。 這是已經被證實錯誤的謠言。 反倒是 RSA 加解密演算法如果搭配某些特定、神秘、惡意的金鑰產生器 -- 特別是它可能的衍生產品 SecurID -- 才值得你擔心。 可以省略歷史與技術, 直接跳到 結論

首先, 幫謠言補上網址, 這樣打起來比較有真實感, 比較有 fu :-) 搜尋 「OpenBSD backdoor」, 可以看見這事發生在 2010 年 12 月。 資安專家 Bruce Schneier 列出六篇報導; 但他表示個人並不太相信。 「(OpenBSD) 這麼龐大的程式碼, 一定有很多漏洞可鑽。 從既有漏洞裡下手, 會比自己動手安插要好多了。 除非 FBI 裡面真的有人那麼笨。」

最開始是這樣爆料出來的。 一位 Gregory Perry 私下寄信給 OpenBSD 的大大 Theo de Raadt, 宣稱十年前 FBI 曾找他們公司 NETSEC 在 OpenBSD 的加密系統 (OCF) 當中植入後門。 他並點名 Jason Wright 參與植入後門; 而指稱另一位領 FBI 薪水的 Scott Lowe 大力鼓吹業界採用 OpenBSD 背後的真正原因, 就是希望備有 FBI 後門的產品可以進入市場。 Perry 說他跟 FBI 的秘密合約過期了, 所以才敢講出來。 Theo de Raadt 在 12/14 把信公佈在網路上, 要大家自行採取適當措施: 擔心的人請自行檢查程式碼; 生氣的人另行採取行動; 被誣控的人請自己澄清。

接下來怎麼辦? 如果是 Windows 或 Mac OS, 你就禱告吧; 但是既然我們面對的是 原始碼公開 的 OpenBSD, 那就 捲起袖子 擦乾淨手上的餅乾屑, 大家一起來檢查原始碼 (audit) 呀! Theo de Raadt 的信一寄出去, 立即就有十位開發者著手檢查 OCF 的程式碼。 一個星期後, Theo de Raadt 貼出這樣的結論: 他相信

  1. NETSEC 這家公司有在接政府 「資安/反資安」 的案子。
  2. 1999-2001 這段期間, 美國政府單位處心積慮將竊聽黑手從軍方伸向商業界。
  3. Gregory Perry 曾在 NETSEC 工作, 並面試僱用 Jason Wright, 然後 Perry 自己不知道為什麼就被 NETSEC 逐出公司。
  4. Jason Wright 碰的是驅動程式而非加解密演算法的部分。
  5. 主管加解密演算法的 Angelos 後來確實有接受 NETSEC 的委託, 並且將某一些加解密流程導到 Jason Wright 的是驅動程式去。 我們也找到一些 bugs, 但我認為這些 bugs 都比較像是 「歲月留下的傷痕」 ("a function of the time in history") 而不像是明顯的惡意後門。
  6. Jason 跟 Angelos 在 (OCF 以外的) 別處, 對 OpenBSD 貢獻良多。 我個人無法指控他們 (惡意植後門)。
  7. 我想信 NETSEC 所接的案子, 原先確實是想要植入後門。
  8. 如果真有後門程式, 我也不認為它曾經成功入侵 OpenBSD 的官方版本。 也許是在 NETSEC 他們自己的版本裡面。
  9. 如果 Jason 跟 Angelos 早知道 NETSEC 是家什麼樣的公司, 他們早應該告訴我, 這樣我們當初也許會有不同的對策。
  10. 很高興大家藉這個機會把這部分這麼重要的程式碼清查了一遍, 回應了大家長久以來心中的疑慮。

那篇公開信當中也很清楚地列出他們找到的 bugs 的網址。 另外這篇分析 倒是有提到: 曾經有一個資安的 bug 在 2002 年時被默默地修正掉, 不太像是一般的做法。 總之後來的版本就沒那個問題了。

Gregory Perry 並沒有就此住口, 反而後來又貼了 一長篇, 除了解釋背景和歷史之外, 並懷疑 FBI 與伊朗資金合作甚至力推 「密碼演算法輸出解禁」 的這個政策背後有陰謀。 其中他很明確地聲稱 RSA 演算法有漏洞, 又質疑 RSA 發明人為何要放著大把專利金不賺, 將該演算法釋放到公領域。 既然 Perry 的專長是資安, 而他又並沒有道歉認錯, 於是我專注在他對資安演算法提出的疑慮, 又搜尋、 連結到 這篇密碼學書摘, 指出: 如果採用 Elliptic Curve Asymmetric 方式產生的金鑰來餵給 RSA 演算法吃, 那麼確實可以暗藏後門。 作者是專門研究密碼學植後門的 Adam L. Young 與 Moti M. Yung。 別問我這是什麼, 現在的我也看不懂 :-) [12/25 補充: 請參考白話解釋 「類似但比 "較簡"」 的後門機制: 撲克牌版的 「公鑰夾帶部分私鑰」 密碼破解術] 然後又搜尋到 "Simple Backdoors for RSA key generation" "A Comprehensive Study of Backdoors for RSA Key Generation" 兩篇學術論文, 都是在改進 Young 與 Yung 的 「植後門金鑰產生器」。 前者指出: 「對於第三方提供的金鑰產生器, 千萬別拿來用在 RSA 加密機制當中。」 後者的作者是臺灣的 孫宏民教授, 探討如何改進 Young 與 Yung 所提出的金鑰產生器, 讓用戶更不容易發現後門的存在。

然後又搜尋到一個被懷疑有後門的身份認證機制 "SecurID"。 以硬體版來說, 這個產品像一把鑰匙, 可以用來開啟對應的鎖。 比較特別的是: 它每一分鐘會改變一次密碼, 所以它的時鐘必須與鎖同步, 顯示的密碼才會正確。 這個裝置被設計成禁止拆解研究 (reverse engineering), 據說是為了安全的理由。 (咦, 為什麼有一種微軟講話的感覺: 「棄權」 就是 「安全」?) 重點是: 它正是 RSA 公司的產品 (所以我猜應該是採用 RSA 加密技術)、 它最強大的地方就是它有一個金鑰產生器 (而不是像過去的 LPT1 硬體鎖, 金鑰是燒死在電路版上的)、 沒有人可以研究它的金鑰產生器如何運作 (因為禁止拆解研究)。 這些不尋常的特性恰好就是 「入侵佔領 RSA 的金鑰產生器」 所有的/所需要的。 2011 年 3 月, NetworkWorld ComputerWorldUK 報導: 「不願具名的產業分析師表示: RSA 跟政府秘密協商, 讓政府可以 (在 SecurID 產品裡) 嵌入後門, 以換取 SecurID 獲得授權出口的權利。 (還記得 Perry 說的 「密碼演算法輸出解禁」 嗎?) RSA 表示: 基於法律因素, 他們無法回應這項指控。

本來只是要寫一篇破除謠言文而已, 沒想到越搜尋越發現真相太奇妙了... 下個結論收尾吧:

  1. 2003 年以後的 BSD, 或許有一些安全漏洞 (誰沒有啊?) 但 經過眾人檢視原始碼後, 並沒有發現後門。
  2. 下次要指控某個開放原始碼軟體被植入後門時, 請搜尋一下, 給個網址好嗎? 謠言止於搜尋。 如果真的內藏木馬, 那一段程式碼的名稱/時間/作者/內容一定會被明白糾出來的。
  3. 真正有問題的不是現代的 OpenBSD, 而是針對 RSA 演算法所設計的某一特定類型金鑰產生器。 如果你所採用的資安產品, 而底層的加解密機制恰好是 RSA, 那麼請小心。 RSA 本身不是問題; 可能有問題的是 (亂數) 金鑰產生器。 [請見 Explorer 在 1F 跟 3F 的留言。] 不論你有沒有能力研讀其金鑰產生器, 請試著去取得它的原始碼。 如果取得的過程困難重重, 那麼最好別用。
  4. 「RSA 公司所生產的 SecurID 產品被懷疑有後門」, 有許多側面證據 (circumstantial evidences) 但沒有一針見血的鐵證可以證明這個說法。 如果真的在意安全, 不用也罷。 維基百科 說: SanDisk、 Motorola、 Broadcom、 Blackberry 等等公司的產品都有採用; OATH HOTP 是可以取代 SecurID 的開放版替代品。
  5. 美國的 NSA 與 FBI 等邪惡組織在資訊產品裡藏後門的時候, 通常都不是直接大剌剌地明修棧道, 而是藏在加解密模組的 (亂數) 金鑰產生器裡面 -- 就像 NSA 在 Windows 裡暗藏的後門 DUAL_EC_DRBG 一樣。 因為看得懂程式碼的門檻比較低; 看得懂加解密演算法系統 (含金鑰產生器) 破綻的門檻比較高。
  6. 同樣被懷疑遭美國政府植後門, 微軟與 OpenBSD 的後續處理方式與收場就大不相同。 原因在哪裡?
陽光是最好的消毒劑。 -- 美國最高法院大法官 Louis Brandeis

* * * * *

(本文也刊載於 泛科學)

手邊沒電腦; 口頭推薦本文嗎? 可以請您的朋友搜尋 「openbsd 後門」 或 「rsa 後門」。

9 則留言:

  1. 這篇文章讓我越讀越困惑,我想格主應該要先了解這幾個詞的不同吧:
    1. RSA 演算法 - 這是在TLS協定裏面很常用的key exchange演算法,RSA演算法是基於質因數分解問題而設計的。(如果RSA演算法本身有後門的話,那HTTPS就沒人敢用了)
    2. SecurID - 這個認證機器裏面_沒有_使用RSA演算法,他只是RSA公司做的,所以才叫"RSA" SecurID。

    回覆刪除
    回覆
    1. 雖然我也不是很懂背後的機制,但這篇文章其中一件主要的claim,不正是警告大家「HTTPS機制目前使用的RSA演算法其亂數產生器,美國政府有意的試圖對其植入弱點」,所以請大家要注意嗎?

      刪除
  2. 多謝教授撰文,如此一來對於與這相關事件的視角更加全面了

    說來個人最常使用基於RSA加密演算法的技術是SSH,這或許是身在Open source界中最常接觸與RSA相關的服務吧

    回覆刪除
  3. 還有,格主給的幾篇論文都講的是RSA演算法_實作_上面暗藏的後門,跟RSA演算法無關。RSA演算法在維基百科上面就有了,很簡單,也不會有啥後門。問題在於:RSA並沒有細講公、私鑰的產生方式,所以各個TLS實作都可以"自己找辦法"來產生公、私鑰。

    Young 與 Yung 的論文講的是這種後門,讓金鑰產生器作出容易被破解的金鑰。文中的結論有寫這點,但是開頭講「神秘版的 RSA 加解密演算法」很容易誤導讀者。

    回覆刪除
  4. 嗯, explorer 的留言是比較精確的。 我已略修改正文, 強調 RSA 本身沒有問題、 有可能被動手腳的是亂數產生器。 更精確地說, 應該是說 RSA 太普及了, 所以那三篇論文針對 RSA 演算法 (而不是其他加解密演算法) 開發出暗藏後門的亂數產生器。 不過對於一般不熟悉密碼學的讀者來說, 要如何描述才能讓他知道該用哪些關鍵詞進一步搜尋呢? 我在標題跟摘要當中選擇採用呼籠的方式, 把亂數生產器實作的爛帳很簡約地算到 RSA 這個 (被我濫用了的) 大略代名詞去了。 但內文有詳細解釋。 如果 explorer 看到內文當中還有其他措辭或段落可能誤導之處, 也請幫我想個比較簡單清楚的描述方式。

    SecurID 到底有沒有採用 RSA 演算法? 除了他們自己 (還有也許 FBI?) 沒有人知道。 我也依此改了正文。

    UGP 提到 Open Source 當中的 ssh, 那是沒問題的。 因為 linux 跟 BSD 的原始碼公開, 所以如果亂數產生器採用那三篇論文 (或其他類似方式) 的演算法, 那一定會引起大家側目。 「這是什麼鬼啊? 你是照哪篇論文寫的程式碼?」

    回覆刪除
  5. 德國政府憂心微軟Windows 8與TPM 2.0成為安全災難
    http://www.ithome.com.tw/itadm/article.php?c=82275

    回覆刪除
  6. 要知道SecurID有沒有用RSA演算法, 沒有想像的難. SecurID基本上是遵守FIPS-140-2(http://en.wikipedia.org/wiki/FIPS_140-2) Level 2, 沒辦法用物理性的破壞. 但是只要你是SecurID的Admin, 你就會有一台機器或是Library, 只要會一點逆向工程就可以知道了.當然你拿到機器或是Library時候就會簽一份NDA, 所以我也不能在此公開細節. 我只能說SecurID只需要用對稱金鑰就足夠了, 另外就效能的考量RSA很慢AES快多了.

    回覆刪除
  7. 拜讀,十分佩服!另外,您的想法被證實了。美政府買通資安大廠 RSA,於加解密機制中暗藏後門 http://dr.waynehuang.cc/2013/12/nsa-rsa-backdoor.html

    回覆刪除
  8. 謝謝 Wayne! 您的大作幫小格帶來好多流量呵 :-) 已在正文加連結。

    回覆刪除