压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

可信開源硬件是條死胡同?

面對日益升級的供應鏈攻擊和 “預裝” 后門威脅,開源硬件是可信賴硬件的終極答案嗎?開源硬件一定比閉源硬件安全(自主可控)嗎?

著名硬件黑客黃欣國 (Andrew ‘bunnie’ Huang) 在上周末舉行的混沌計算機俱樂部會議 (36C3) 上討論了這個問題。

數年前,黃欣國和朋友構建了開源筆記本電腦 Novena,在此過程中他們意識到構建一個完全可信的開源硬件非常困難,即使你能制造自己的 CPU 和 SSD,你也無法確保它們是值得信任的,因為你沒辦法確保供應鏈的每一環節你的硬件沒有遭到纂改。自從斯諾登事件以后,人們已經意識到供應鏈攻擊的風險無處不在:在產品交付到客戶手中的各個環節,從送貨司機、海關官員到倉庫工人都可能接觸硬件,有機會纂改硬件。尤其是在智能手機行業,固件調換(預裝)已經形成了規模龐大的市場。

黃欣國的結論是開放硬件和閉源硬件的可信度沒什么差別。軟件有近乎完美的信任轉移機制,比如驗證哈希值,但硬件沒辦法采用這些方法。他描述了構建可信任硬件的三個原則:

1. 復雜性是驗證的敵人;

2. 不能只驗證元件而要驗證整個系統;

3. 賦權終端用戶去驗證和密封硬件。

他和朋友發起了 Betrusted 項目去實踐這三個原則。

以下是《我們能否開發出可信硬件》的論文原文,安全牛編譯如下:

我們能否打造可信硬件?

為什么開放硬件自身不能解決信任問題?

幾年前,我和 Sean ‘xobs’ Cross 弄了個開源筆記本電腦 Novena(上圖),一路從電路板構建起來的,并將構建方法和過程分享給了全世界。我是開源硬件的堅定支持者,堅信分享知識就是共享力量。我們沒料到的是,媒體會把我們的開源硬件小創造標榜為更可信的計算機。若說有何不同的話,構建 Novena 的過程讓我強烈意識到:真是什么都不能信任!仔細審查過每個部件的開放性和文檔后,你就會發現:從開機加電到執行你代碼的第一條指令的過程中,如果不運行幾個閉源固件塊,你根本無法啟動任何現代計算機。互聯網批評家認為,如果我們真想弄個可以信任的東西出來,我們就應該構建自己的 CPU 和固態硬盤 (SSD)。

我還真的認真考慮過這個建議。我在芯片行業待過,所以從無到有構建開源片上系統 (SoC) 的想法也沒那么瘋狂。但是,我想得越多,就越感覺到,自己構建片上系統也還是太多短視。制造芯片的過程中我也在編輯芯片掩模;芯片的可塑性相當強,甚至在流片試產之后都保有可塑性。我也花了十年時間爭論供應鏈問題,對付假貨、劣等工藝、秘密零件替換——把 “好” 芯片偷偷換成 “壞” 芯片的機會和動機簡直不要太多。即使工廠出品的是經過嚴格質檢的產品,配送公司、海關人員和倉庫工作人員也有機會在用戶拿到計算機前動點兒手腳。最后,當今高度集成的電子商務系統環境下,往供應鏈中注入惡意硬件也不過就是下單產品、篡改、裝回原包裝箱,然后再退個貨這么簡單。買到這種被篡改過的退換貨品的受害者根本不會察覺。

參照上述經驗,我可以肯定,開源硬件的可信度跟閉源硬件沒什么不同。換句話說,兩者都不可信。雖然開源硬件讓用戶有機會創新,也自帶比閉源硬件更正確和透明的設計意圖,但最終,無論開源還是閉源,任何足夠復雜的硬件實際上都是難以檢驗的。就現代十億級晶體管 CPU 而言,即使我們公開了完整的掩模組,如果沒有實用方法在不破壞 CPU 的同時,以近原子級的程度驗證掩模組和手中芯片間的等價性,那也是毫無意義的。

所以,到底為什么,相比閉源軟件,我們覺得自己可以更加信任開源軟件呢?畢竟,Linux 內核都有 2,500 萬行代碼了,而且貢獻者里還包括向來就跟 “隱私” 或 “信任” 不搭界的企業。

個中關鍵就在于,軟件有近乎完美的信任轉移機制,用戶可以把審計程序這種困難任務委托給專家去做,并將此審計結果精準轉譯到用戶自己的程序副本中。有了這套機制,我們才可以不用擔心軟件程序的 “供應鏈”,不用先信任云才能信任我們的軟件。

軟件開發者使用 Git 等工具管理源代碼(如上圖所示,云在左邊),用 Merkel 可信樹跟蹤代碼修改。這些散列樹將代碼鏈向各自開發歷史,使經審核后的代碼不易被偷偷插入惡意代碼。代碼構建再經過散列和簽名(如上圖所示,密鑰在中上部),可重現構建的項目支持第三方審計者下載、構建和證實(如上圖所示,綠色對勾)用戶下載的程序符合開發者的本意。

上一段講了很多東西,重點是:軟件中的信任轉移機制依賴一種名為“散列”的東西。了解散列為何物的讀者可以略過下一段內容;不了解的可以看看。

散列可將任意大文件轉換為一組短得多的符號:比如,左側文件轉換為“????????”(貓-鼠-熊貓-熊)。這些符號有兩個重要屬性:

(1) 原始文件的些微改變都會導致符號組的巨大變化;

(2) 符號組基本上不會泄露關于原始文件的任何信息。

信任轉移中起關鍵作用的是第一個屬性:基本上,散列值是鑒別大量數據細微修改的一種快速可靠的方法。如上圖所示,右邊的文件動了一個數字,肉眼幾乎不可查,但散列的改變就是天翻地覆一般——“????????”(桃子-蛇-披薩-曲奇)。

因為計算機源代碼也不過就是 “0” 和 “1” 組成的字符串,我們也就可以對計算機源代碼執行散列操作。這樣一來,代碼庫中的任何修改就能快速檢出了。多名開發人員協作的時候,每個代碼貢獻都用上一個貢獻的散列值再行散列,構建出一棵散列樹。重寫已提交的代碼貢獻,將會改變樹中此貢獻點之后的所有東西。

為什么我們無需一條一條審查 Linux 內核 2,500 多萬行源代碼?因為我們可以信任專家團隊,知道他們的知識和專業技能可以憑借散列的力量,轉化進我們電腦上運行的程序副本中。

由于散列很容易計算,我們可以就在持續執行前加以驗證——所謂堵上“檢查時間 vs 使用時間” (TOCTOU) 缺口。程序檢查時間與使用時間之間的窗口期越短,惡意黑客篡改代碼的機會越少。

現在我們來看看硬件語境下的開源示意圖,如上圖所示。看起來是不是有點復雜?因為本來就這么復雜:你手里的硬件在你拿到之前早已被無數只手碰過了。

Git 可以確保原始設計文件不遭篡改,開放性有助于保證可信設備已 “盡最大努力” 加以構建和測試。然而,供應鏈中仍有很多人可以篡改該硬件,也沒有什么 “硬件散列函數” 可以讓我們將開發者的本意與手里實際拿到的硬件實例間畫上等號。想要檢查現代芯片,我們最多就是破壞性分拆芯片,一層一層揭下來用掃描電子顯微鏡 (SEM) 檢查;或者弄一臺房子一樣大的顯微鏡來做疊層成像。

這就好像硬件版的海森伯格不確定性原理:你無法在不干擾其功能的同時確定計算機的構造。換句話說,對硬件而言,檢查時間和使用時間是解耦的,為惡意黑客創造了篡改機會。

當然,我們完全依賴硬件來忠實計算軟件中完美信任轉移所需的散列和簽名。一旦篡改了硬件,那所有這些機智的算法就頓時毫無價值了:被篡改的硬件完全可以偽造散列計算的結果,讓惡意代碼看起來跟合法代碼毫無二致。

打造可信硬件的三個原則

現實情況就是這樣,我們應該怎么做呢?難道我們就只能束手無策嗎?有沒有什么方案能夠解決硬件驗證問題?

我在這個問題上思考多年,總結出三條核心原則:

1. 復雜性是驗證的敵人。缺乏散列、Merkel 可信樹和數字簽名等工具在開發人員和用戶間轉移信任,我們只能依賴自己的雙眼評估硬件是否正確構造。使用工具和應用程序自動化驗證不過是在遷移信任問題,因為無論工具自身能否經過驗證,你都只能信任該驗證工具的結果。所以,偏離肉眼查驗越遠,驗證硬件的成本和難度就越高,呈指數型螺旋上升趨勢。理想狀態下,硬件要么是普通用戶都能輕松驗證,要么在社交網絡二度以內的 “可信” 人脈技術幫助下加以驗證。

2. 驗證整個系統而不僅僅是組件。如果鍵盤和顯示器有后門,驗證 CPU 沒什么用處。所以我們的檢查范圍應從用戶界面一路涵蓋到執行秘密計算的芯片。盡管 Keystone 和 OpenTitan 等開源安全芯片項目備受推崇,是可信硬件生態系統的重要組成部分,但單靠它們自身并不足以保護用戶的隱私。

3. 讓用戶能夠驗證和封裝自己的硬件。將驗證和密鑰生成委托給中心權威機構,會使用戶暴露在各種供應鏈攻擊面前。因此,終端用戶要有足夠的文檔來查驗自己的硬件是否正確構建。一旦經過驗證且拿到密鑰,還需封裝硬件,以便用戶無需每次設備離身之后都得再做一遍費時費力的重新驗證過程。總的說來,封裝越好,無需擔心設備中秘密資料被實體抽出的時間也就越長。

不幸的是,第一條和第二條原則一起顛覆了我們對當今電子設備和計算機的預期。行業誕生之初,計算機制造商就一直在比拼誰往越來越小型的機器里塞入更多的功能,憋著勁兒增加計算機的復雜性。因此,我們實際上根本不可能驗證現代硬件,無論開源還是閉源。相反,如果可信度是首要考慮,務必選取有限的功能集,圍繞這些必需功能設計最小可行可驗證產品。

Betrusted 的簡單性

為證實我們的想法,我和 Sean ‘xobs’ Cross,還有Tom Mable,啟動了名為 “Betrusted” 的項目,打算將這些原則轉化為可實際驗證的可信設備。根據第一條原則,我們縮減了設備的功能,只包含安全文本和語音聊天、雙因子身份驗證和數字貨幣存儲的功能。

這意味著 Betrusted 無法瀏覽網頁;沒有“應用商店”;沒法幫你叫車;也不能導航。不過,這東西能保護你的私密對話;賦予你健壯的身份驗證第二因子;還能提供存儲數字貨幣的安全場所。

為符合第二條原則,我們延伸了 Betrusted 的一系列外設,將信任邊界擴展至用戶的眼睛和指尖。這就將 Betrusted 與僅開源芯片的安全飛地項目區別開來了。

可驗證 I/O

舉個例子,Betrusted 的輸入接口是實體鍵盤。實體鍵盤不過是由開關和導線構成,便于檢查。

Betrusted 的鍵盤只需對著光線就能檢查,還支持更換鍵盤膜以便使用不同語言。

Betrusted 的輸出界面是 200ppi 的黑白液晶顯示器,具備電子報或紙媒的性能,足以滿足絕大多數文字聊天、身份驗證和銀行應用。該顯示器的電路全由大號晶體管組成,對著明亮的光線用個 USB 顯微鏡就能看清。下圖是 50 倍放大率的顯微鏡下看到的顯示器一角。

此顯示器構造如此簡單,是為了不給隱藏后門留余地。能看到每個晶體管是一方面,更重要的是,就沒有多余的晶體管可以掛載攻擊。

相比之下,彩色顯示器依賴硅板上幾百萬個晶體管實現幀緩沖和命令界面,而且這控制器芯片是閉源的。即使此類控制器芯片開源,要檢查驗證也需要逐層剝離和用臊面電子顯微鏡查看。所以,Betrusted 所用 LCD 的可檢性和簡單性在顯示器世界中可謂獨一份。

可驗證的 CPU

CPU 自然是問題的核心。我仔細想過非破壞性芯片檢查方法。就算有這種檢測方法,估計沒有幾千萬美元和兩年時間也是完不成概念驗證系統執行的。這就可能涉及到追逐風險資本,然后導致解決方案變成閉源。雖說閉源有機會通過向政府和企業售賣服務和許可專利技術而變身億萬富翁,我是挺擔心普通人估計就無法受惠了。

短期妥協的解決方案就是使用現場可編程門陣列 (FPGA)。我們依靠邏輯布局隨機化來緩解固定芯片后門的威脅,依賴比特流自省來輔助設計者到用戶的信任轉移。如果不關心這些技術細節,可以直接跳到下一段。

我們打算用在 Betrusted CPU 中的 FPGA 是 Xilinx “7系列”中的 Spartan-7,因為其 -1L 型號在能耗上勝過 Lattice ECP5 FPGA 2-4 倍。采用低能耗 FPGA 能讓 Betrusted 設備從半天就自動關機,提升到電池電量能撐一整天。其不利一面是,Spartan-7 FPGA 是閉源器件,目前依賴專有編譯器。不過,已出現一些令人振奮的發展,有助緩解 FPGA 工具鏈惡意植入或篡改威脅。比如:

  • Symbiflow 項目正為 7 系列 FPGA 開發 F/OSS 工具鏈,有望最終消除對不透明供應商工具鏈編譯設備代碼的依賴。
  • Prjxray 正在記錄 7 系列 FPGA 的比特流格式。此進展中的項目表明,即便我們無法確切了解每個比特干些什么,至少能夠檢測激活了哪些從未見過的功能。這里指的新奇功能是之前未披露的后門或 FPGA 應引起注意的功能。
  • FPGA 邏輯可通過往源代碼中引入隨機種子而輕易隨機化。這意味著黑客往 FPGA 邏輯單元中植入后門的操作毫無意義。對 FPGA 的有效芯片級攻擊得是對硅片的整體改動,用 X 光就能執行非破壞性檢測的那種量級。這種緩解措施的有效性類似地址空間布局隨機化 (ASLR):擋不住所有攻擊,但能輕易讓潛在攻擊變得麻煩無比。

檢查已編譯比特流的能力將 CPU 問題帶回到與軟件類似的情景,也就是我們能用數學工具將信任元素從設計者有效轉移至硬件層面上。因此,盡管晶體管級的 FPGA 構建細致檢查是不可行的(但因其結構規律,FPGA 檢查仍比通用 CPU 檢查來得容易),FPGA 的邏輯和路由不確定性、可驅動比特流檢查的新工具,以及 100% F/OSS 解決方案編譯設計的前景,大幅提升了基于 FPGA 的 CPU 驗證與信任轉移的標準。

上圖:FPGA 設計工具中強調的信號,表明設計意圖可關聯至 FPGA 中的硬件塊。

有人可能會說,只有開發出非破壞性定制芯片檢測方法,FPGA 才可以作為可驗證可信硬件的黃金標準。畢竟,即使掩模級芯片設計開源,怎么確定自己手中的芯片忠實實現了每一個設計功能呢?

上面描述的系統觸及簡單性第一原則和從用戶界面到芯片驗證的第二原則。第三原則——檢查驗收后用戶對設備的封裝,7 系列 FPGA 也是可以達成的。

將秘密封在 Betrusted 里

透明性是驗證的好朋友,但用戶還需能夠封裝硬件,保護自己的秘密。理想工作流中,用戶應可以:

1. 收到 Betrusted 設備;

2. 通過視覺檢查和 FPGA 比特流隨機化與自省,確認其正確構建;

3. 以密鑰封裝 Betrusted 設備。

理想狀態下,密鑰應完全由 Betrusted 設備自行生成,一旦封裝,應 “難以” 被黑客直接接觸設備以盜取或篡改這些密鑰。

密鑰生成和自封裝應可用 7 系列 Xilinx 設備實現。因為Xilinx 的 FPGA 硬件內置了比特流加密功能。撰寫此文的時候,我們已對此加密格式和熔斷機制有了幾近充分的了解,可提供完全自托管的密鑰生成與封裝 F/OSS 解決方案。

至于這種封裝有多好,答案可能有點兒技術流。簡單講就是,應該沒人能借走 Betrusted 設備幾個小時就抽取到密鑰,抽取密鑰的任何嘗試都將在硬件上留下永久性的改動。更具體一些,Xilinx 7 系列設備很流行,歷經廣大安全社區的廣泛審查。針對這些設備所用 256 位 CBC AES + SHA-256 HMAC 加密的著名攻擊,利用硬件邊信道泄露 AES 輪間信息。此類攻擊要求對硬件的無限訪問,需要 24 小時時間從 160 萬所選密碼收集數據。雖然可以改進,但要記得,用聚焦離子束物理檢查抽取密鑰,這種開箱成像操作消耗的時間也大約是 24 小時。換句話說,保護硬件內秘密的程度更多是由物理篡改防護措施決定的,嚴格加密措施反而作用沒那么大。

更進一步,既然邊信道攻擊原理已被披露,我們就能應用簡單的緩解措施挫敗此類攻擊,比如貼封條,或者移除向 FPGA 呈現所選密碼的必要外部配置和調適接口。用戶還可以選擇使用通用 SRAM 加密密鑰,這種掉電即失,大大增加了取下 FPGA 或修改電路板的風險。當然,這樣也帶來了備用電源中斷時意外丟失密鑰的代價。

但至少,用 7 系列設備,用戶可以確知自己的設備是否被物理篡改,這是個好的開始;從防篡改的角度看,已經是用戶所能期待的全部了。

可以訪問 Betrusted 項目在 GitHub 上的頁面 https://betrusted.io,了解更多相關信息。我們認為 Betrusted 更像是“硬件/軟件發行版”,而不僅僅一個硬件產品。我們希望 Betrusted 能夠分叉,適應我們多樣化數字生態系統的各種不同需求和用戶場景。我們是否制作完整 Betrusted 參考設備售賣,將取決于社區的反饋;目前已經收到關于此類設備真正需求的大量意見與建議。

信任 Betrusted vs 使用 Betrusted

我個人認為 Betrusted 是可驗證可信硬件探索的一種進化而非終結。為什么開放性不足以解決硬件中的信任問題?我花了幾年時間將個中原因提煉成幾條簡明扼要的原則。我很確定,隨著我們對用例、威脅模型和可用工具的理解加深,這些原則也會進化發展。

我個人開發 Betrusted 的動機,是為了與我的非技術朋友們享有私密對話。因此,其另一個巨大障礙自然就是用戶接受度:你對隱私安全重視到愿意花時間驗證硬件的程度嗎?驗證硬件要花費時間精力,iPhone 很好用,蘋果公司的隱私宣傳很高調。而且,“無論如何,我這種好人當然‘君子坦蕩蕩’啦”。或許,我們打造真正可驗證可信通信設備的異想天開嘗試,不過會被大眾當成某個新奇小玩意兒。

即便如此,我這至少啟動了關于硬件信任問題的討論,將這個問題具體地闡述出來。我們是在奠定讓他人可以通往更安全、更私密、更可信數字未來的框架。

感謝 NLnet 基金對 Betrusted 團隊的支持。

報告原文:

https://www.bunniestudios.com/blog/?p=5706

上一篇:Insight Partners以11億美元估值收購物聯網安全公司Armis

下一篇:Forrester:2020年內部威脅管理面臨拐點