Protocol-Design

設備可以證明自己程式碼的身份嗎?

  • July 24, 2018

假設您有一個計算系統,它的某些功能本身不是加密安全的,但您想確保按規定執行,例如,當您不查看時,對手沒有重新刷新軟體。一個範例可能是用於非加密方案的投票機,或驗證主機板是否正在執行工廠的韌體。

是否有任何類型的數據或驗證協議可用於證明正在執行哪個版本的軟體,不需要物理拆卸硬體,並且即使是知道它並專門設計他們的攻擊者也能抵抗變種軟體來嘗試惡搞嗎?

如果事先對硬體(及其容量)一無所知,那麼 AFAIK 這是不可能的,因為攻擊者可以虛擬化整個“正確”軟體並返回它產生的任何東西。(雖然如果這不是真的請糾正我)因為這不是一個非常有趣的場景,而是假設

  • 驗證者和攻擊者都可以完全訪問機器程式碼形式的“正確”軟體。
  • 機器的記憶體容量是固定的,並且驗證者和攻擊者都提前知道。(或者更一般地說,機器的硬體配置是已知的,攻擊者除了通過軟體重新程式之外沒有對其進行修改)
  • 如果涉及握手,驗證者可以是具有任意能力的可信電腦,不一定是人。(因此驗證者必須做的任何計算都可能很複雜,只要它們是有效的。)
  • 如果系統的“正確”軟體必須事先以某種不尋常但有效可行的方式準備好,以使方案工作,假設驗證步驟已經發生。
  • 可以在純軟體中實現的解決方案是首選,但涉及“小的”硬體更改的解決方案也是可以接受的。(假設無論出於何種原因,都不能簡單地用 ROM 替換程序儲存器)

(作為我正在尋找的一個例子,我遇到的這個問題的一個可能的解決方案是正常建構軟體映像,然後用隨機數據填充它,直到機器程序記憶體的容量。為了驗證,驗證者然後向系統提供一個隨機數,然後機器計算該數字的雜湊值,該雜湊值附加到其程序記憶體的全部內容中(它不能欺騙,因為沒有地方可以儲存“正確”的副本來重現此步驟) 並將其提供給驗證者。然後驗證者可以根據自己的計算驗證機器給它的雜湊值。不過,我並沒有認真考慮過這個方案的含義,或者如何攻擊它,所以我想我“我漏掉了一些缺陷。我也想看看是不是”s 有可能達到相同的結果,而無需依靠相當小的容量來填充。)

,假設沒有硬體修改,設備不能*“證明其自己程式碼的身份”*,如果我們希望這一點安全並通過以機器形式提供的任意軟體映像自動實現,代表應該是可執行程式碼的機器形式,至少在所述圖像部分是對抗性建構的(如果它是按照慣例建構的,則可以說兩者都不是)。

**無論遠端展示什麼程式碼正在執行,都必須本質上是可信的;**正如問題中所想的那樣,它無法證明自己的完整性。

問題是*“作為一個例子..”*方法有一個弱點:一些經過雜湊處理的數據可以在雜湊過程中選擇性地重建,而不是真正存在。修改後的散列部分的程式碼將對大部分軟體映像的實際記憶體內容進行散列,但在兩個區域(A)自身所在的區域和(B)一些真正的散列程式碼應該在的區域中合成數據(實際修改,例如通過至少一個 JMP 來修改 A) 中的散列碼。在執行時,A 和 B 從未真正進行過散列/檢查。A 包含修改後的雜湊碼和必要的數據,以在顯然散列 A 或 B 時重建合成的內容;該數據包括原始 B 的副本,以及 A 包含在以機器形式提供的任意軟體映像中的壓縮形式(不可能自動檢測到它實際上不是功能程式碼/數據)。

上述論點假設以機器形式提供的任意軟體映像是專門為使修改後的雜湊碼的插入變得容易而準備的,使用的軟體區域 A 沒有真正的功能價值,而是作為對抗準備的東西的佔位符。然而,如果軟體映像包含足夠可壓縮的數據或程式碼區域,則攻擊通常是可能的。我願意接受如果整個軟體映像最初是由非攻擊者精心設計的,那麼攻擊就無法進行。但這與現代軟體建構實踐背道而馳。


OP 明確針對投票機軟體的完整性。一個例子就是這個,它(使用不同的軟體)仍然在法國的幾個城市(勒阿弗爾,布雷斯特……)使用。整個軟體在一個插口的 EPROM 中。軟體的完整性由軟體計算並在顯示器上顯示其自身的CRC來“證明”。當然,這完全是針對對抗性攻擊的玩笑(並且使用​​散列並沒有多大幫助,因為顯示散列的程式碼可以替換為顯示適當常量的程式碼)。

從表面上看,該問題提出的方法(顯示的值取決於手動輸入)似乎可以減輕修改後的軟體顯示其所模仿軟體的硬編碼 CRC 或散列的攻擊。然而,出於我解釋的原因,這對熟練的對手來說在密碼學上並不強大。更糟糕的是,為遠端證明提供的挑戰可能被用作控制選票操縱的輔助渠道。


這個有趣的“是”答案通過添加受信任的平台模組(具有能夠簽名的私鑰、證書和受信任程式碼的安全 CPU)來實現其目標,最重要的是假設主 CPU 的受信任引導程式碼的完整性,即CRTM。我上面的推理假設所有軟體都是不完整性的,只有硬體的完整性。

受信任的引導程式碼的完整性產生了質的差異。該引導程式碼可以通過使用受信任引導程式碼中的公鑰(或證書鏈的根)驗證數字簽名來驗證其餘程式碼的完整性。這被廣泛使用(例如,自 1990 年代以來在銷售點終端中)並且是防止未經授權的程式碼修改的相當有效的措施。然而僅此而已實現問題所要求的:該方法無法遠端證明任何軟體正在執行;它只確保只有授權的軟體才能執行。它仍然很容易受到修改/篡改,通過允許程式碼注入的調試機制(JTAG 埠,通過分頁機制將額外記憶體動態帶入可定址空間),以及利用軟體漏洞帶來惡意程式碼,例如通過緩衝區溢出(緩解以後可以通過哈佛架構分離程式碼和數據、安全環、虛擬機、程式碼證明……)。

要添加證明,標準和工作方法是添加使用私鑰簽名的功能。一個簡單的概念模型是可信引導程式碼包括一個虛擬機(例如JavaCard),驗證(通過檢查上面的程式碼簽名)哪些程式碼可以在該 VM 中執行,並遠端證明它在那裡啟動的內容以及防止重放的挑戰(最好通過加密簽名或 MACing,這需要某個地方的秘密);它甚至可以動態地查看 VM 中的內容並對其進行證明。虛擬機中的解釋不是必需的;自 1960 年代的大型機以來,以本機速度執行的硬體等效原理就為人所知。鎖定 TPM 的 PC 可以被視為一種改進,允許遠端證明正在執行的內容,在消費者 PC 上的合理假設下,包括不更改負責證明的某些程式碼。

,我想改寫原始問題,使正確答案一目了然。

投票機會被黑客入侵嗎?

上下文。

讓我們升級到市場上最新的機器(您可能已經使用過其中一台):-

mc1

mc2

這些以 Windows 作業系統、Windows Server 和 Windows SQL Server 軟體為特色。對於 GUI,可能是 .Net 或 Visual C++。這不是一些小的 DIY GRUB 東西和一點彙程式序。它實際上是在硬碟上執行的數百萬行程式碼,通過 Internet 進行聯網和遠端整理/審計/診斷。有些有WiFi。它們可能也可以遠端升級。還有千兆字節的 RAM,而不是 ROM。通過默默無聞的安全性將成為重要的特徵,因為這是一個常見的安全毯。

為什麼它們應該是安全的?

由於 DMCA、選民欺詐和智慧財產權立法、市場主導地位和遊說力量的結合,嚴格保護這些機器幾乎沒有經濟動機。因此,讓我們看看一個有巨大動力不被黑客入侵的設備——Play Station。黑客直接降低了盈利能力,而PS4現在已經被黑客入侵了。

可信平台模組是無用的。

僅僅合法或非法地獲得TPM密鑰就會破壞任何可能已聲明的安全保證。儘管如此,你甚至不能散列大型軟體。純文字的加密散列是有效的,但軟體會隨著使用而發展和變化。您不能簡單地散列生產 SQL Server 安裝(包括數據庫文件、事務日誌和 blob)並期望得到一致的摘要。遠端更新也很棘手。系統資料庫也是如此。

並不是所有的程式碼都是程序字節碼。T-SQL 保存在一個模式中,可以很容易地更改以使希拉里獲勝。沒有人使用它們是有原因的。

最重要的是…

這是不可能的,因為問題是有沒有不可破解的電腦?基於 Windows 的投票機能否不受所有黑客攻擊,但所有其他世俗電腦卻不能?有些不太可能。不要忘記電腦的基本定義之一是作為通用計算引擎。它不是錘子,但即使是錘子也可以用於螺釘。

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