安全隔離區
「安全隔離區」是以下最新版本之 iPhone、iPad、Mac、Apple TV、Apple Watch 和 HomePod 的專用安全子系統。
概覽
「安全隔離區」是整合在 Apple 單晶片系統(SoC)中的專用安全子系統。「安全隔離區」與主要處理器加以隔離,以提供額外的保安,並且即使在「應用程式處理器」核心受到威脅時,也可以確保敏感性用户資料的安全。其遵循與 SoC 整體相同的設計原則:Boot ROM 用於建立硬件信任根、AES 引擎用於確保有效且安全的加密編譯操作,以及受保護的記憶體。雖然「安全隔離區」不包含儲存空間,但是其具有機制可將資料安全地儲存在外置儲存裝置上(獨立於「應用程式處理器」和作業系統所使用的 NAND 快閃儲存空間)。
「安全隔離區」是大多數版本 iPhone、iPad、Mac、Apple TV、Apple Watch 和 HomePod 的硬件功能,這些版本為:
iPhone 5s 或較新型號
iPad Air 或較新型號
配備 Apple 晶片的 Mac 電腦
MacBook Pro 電腦配備觸控欄(2016 年和 2017 年),包含 Apple T1 晶片
以 Intel 為基礎的 Mac 電腦,包含 Apple T2 保安晶片
Apple TV HD 或較新型號
Apple Watch Series 1 或較新型號
HomePod 和 HomePod mini
安全隔離區處理器
「安全隔離區處理器」為「安全隔離區」提供主要的運算能力。為了提供最強的隔離性,「安全隔離區處理器」專門用於「安全隔離區」。這有助於防止與被攻擊目標軟件共享同一執行核心的惡意軟件從旁進行攻擊。
「安全隔離區處理器」採用 Apple 特製的 L4 microkernel 版本。其設計旨在以較低的時脈高效運行,進而有助於保護其免受時鐘和電源攻擊。自 A11 和 S4 起,「安全隔離區處理器」包含了受記憶體保護的引擎和加密記憶體配搭反重播功能、安全啟動、專用亂數產生器和專屬的 AES 引擎。
記憶體保護引擎
「安全隔離區」在裝置 DRAM 記憶體的專用區域內運行。多層保護將「安全隔離區」的受保護記憶體與「應用程式處理器」隔開。
裝置啟動時,「安全隔離區 Boot ROM」會為「記憶體保護引擎」產生隨機的臨時記憶體保護密鑰。每當「安全隔離區」寫入其專用記憶體區域時,「記憶體保護引擎」就會在 Mac XEX(xor-encrypt-xor)模式下使用 AES 來加密記憶體區塊,並計算該記憶體的密碼型訊息驗證碼(CMAC)認證標記。「記憶體保護引擎」將認證標記與加密的記憶體一起儲存。當「安全隔離區」讀取記憶體時,「記憶體保護引擎」便會確認認證標記。如果認證標記相符,則「記憶體保護引擎」將對記憶體區塊進行解密。如果標記不相符,則「記憶體保護引擎」會向「安全隔離區」發出錯誤訊號。發生記憶體認證錯誤後,「安全隔離區」會停止接受要求,直到系統重新開機為止。
從 Apple A11 和 S4 SoC 開始,「記憶體保護引擎」為「安全隔離區」記憶體加入了重放保護。為協助防止保安相關重要的資料遭到重播,「記憶體保護引擎」會在認證標記旁邊儲存該記憶體區塊的唯一一次性號碼,稱為反重播值。反重播值被用作 CMAC 認證標記的附加調校。所有記憶體區塊的反重播值都使用根植於「安全隔離區」內專用 SRAM 中的完整性樹狀結構進行保護。對於寫入操作,「記憶體保護引擎」將會更新反重播值和完整性樹狀結構的每個層級直至 SRAM。對於讀取操作,「記憶體保護引擎」會驗證反重播值和完整性樹狀結構的每個層級直至 SRAM。反重播值不相符的處理方式與認證標記不相符的處理方式相似。
在 Apple A14、M1 或較新版本的 SoC 上,「記憶體保護引擎」支援兩種臨時記憶體保護密鑰。第一種用於「安全隔離區」專用的資料,第二種則用於與「安全神經引擎」共用的資料。
「記憶體保護引擎」對「安全隔離區」直接且透明地運行。「安全隔離區」就像一般未加密的 DRAM 來讀寫記憶體,而「安全隔離區」外部的觀察者只能看到記憶體的加密和認證版本。成果即是強大的記憶體保護,而無須犧牲效能或軟件的複雜度。
安全隔離區 Boot ROM
「安全隔離區」包含專用的「安全隔離區 Boot ROM」。類似於「應用程式處理器 Boot ROM」,「安全隔離區 Boot ROM」屬於無法更改的程式碼,用於為「安全隔離區」建立硬件信任根。
系統啟動時,iBoot 會將專用的記憶體區域指定給「安全隔離區」。使用記憶體前,「安全隔離區 Boot ROM」會初始化「記憶體保護引擎」,以提供對「安全隔離區」受保護記憶體的加密保護。
然後,「應用程式處理器」會將 sepOS 映像檔傳送到「安全隔離區 Boot ROM」。將 sepOS 映像檔複製到「安全隔離區」的受保護記憶體後,「安全隔離區 Boot ROM」將會檢查映像檔的加密雜湊值和簽名,以驗證 sepOS 是否已獲得在裝置上執行的授權。如果 sepOS 映像檔已正確簽署以在裝置上執行,則「安全隔離區 Boot ROM」會將控制權轉移到 sepOS。如果簽署無效,則「安全隔離區開機 ROM」的設計會阻止對「安全隔離區」的任何後續使用,直到下一次晶片重置為止。
在 Apple A10 和較新版本的 SoC 上,「安全隔離區 Boot ROM」將 sepOS 的雜湊值鎖定到專用於此用途的註冊器中。「公共密鑰加速器」會將此雜湊值用於作業系統綁定(OS 綁定)密鑰。
安全隔離區開機監視器
在 Apple A13 和較新版本的 SoC 上,「安全隔離區」包括一個「開機監視器」,其設計用意是確保開機 sepOS 的雜湊值具有更強的完整性。
在系統啟動時,「安全隔離區處理器」的系統協同處理器完整保護(SCIP)設定可協助防止「安全隔離區處理器」執行「安全隔離區 Boot ROM」以外的任何程式碼。「開機監視器」可協助防止「安全隔離區」直接修改 SCIP 設定。為了讓載入的 sepOS 可執行,「安全隔離區 Boot ROM」會向「開機監視器」傳送一項要求,其中包含載入之 sepOS 的地址和大小。收到要求後,「開機監視器」將重設「安全隔離區處理器」,對已載入的 sepOS 進行雜湊值處理、更新 SCIP 設定以允許執行已載入的 sepOS,並在新載入的程式碼內開始執行。隨着系統繼續開機,只要有可執行的新程式碼,就會使用相同的程序。每次「開機監視器」都會更新開機程序的執行雜湊值。「開機監視器」也包含執行雜湊值中的重要保安參數。
開機完成後,「開機監視器」將最終確定執行雜湊值,並將其發送到「公共密鑰加速器」以用於 OS 綁定的密鑰。此過程的設計目標是即使「安全隔離區 Boot ROM」中存在漏洞,也無法略過作業系統密鑰的綁定。
真隨機數產生器
「真隨機數產生器」(TRNG)會用來產生安全隨機資料。每當「安全隔離區」產生隨機加密編譯密鑰、隨機密鑰種子或其他熵時,就會使用 TRNG。TRNG 的基礎是使用 CTR_DRBG(「計數器模式」下以區塊加密為基礎的演算法)處理後的多個環形振盪器。
根加密編譯密鑰
「安全隔離區」包含唯一識別碼(UID)根加密編譯密鑰。UID 對每個個別的裝置都是唯一的,並且與裝置上的任何其他識別碼無關。
SoC 於生產時便已植入一個隨機產生的 UID。自 A9 SoC 起,於生產期間「安全隔離區」TRNG 會產生 UID,並使用完全在「安全隔離區」中執行的軟件程序植入其中。這個程序可保護 UID 在生產期間不會在裝置外顯示,因此 Apple 或任何供應商皆無法存取或儲存 UID。
sepOS 會使用 UID 來保護裝置專屬機密資料。UID 允許資料以加密編譯方式與特定裝置綁定。例如,用來保護檔案系統的密鑰階層便包含 UID,因此如將內置 SSD 儲存空間實際從一部裝置移至另一部裝置,檔案則無法存取。其他受保護的裝置專屬機密資料包含 Face ID 或 Touch ID 資料。在 Mac 上,只有與 AES 引擎連結的完全內置儲存空間可獲得這個層級的加密。例如,透過 USB 連接的外部儲存裝置或加到 2019 年 Mac Pro 的 PCIe 式儲存空間都不會由此方式加密。
「安全隔離區」也具有裝備群組 ID(GID),這對於使用特定 SoC 的所有裝置都是通用的(例如,所有使用 Apple A15 SoC 的裝置都共享相同的 GID)。
UID 和 GID 無法透過聯合測試工作群組(JTAG)或其他除錯介面來使用。
安全隔離區 AES 引擎
「安全隔離區 AES 引擎」是一個硬件區塊,用於依據 AES 密碼執行對稱加密編譯。「AES 引擎」的設計用意在於針對使用定時和「靜態功率分析」(SPA)攻擊阻止資料洩漏。從 A9 SoC 開始,「AES 引擎」也包括對「動態功率分析」(DPA)攻擊的反制措施。
「AES 引擎」支援硬件和軟件密鑰。硬件密鑰衍生自「安全隔離區」的 UID 或 GID。這些密鑰位於「AES 引擎」中,即使在 sepOS 軟件中也不可見。雖然軟件可以要求使用硬件密鑰進行加密和解密作業,但其無法截取密鑰。
在 Apple A10 和更新的 SoC 上,「AES 引擎」包括可鎖定的種子位元,這些種子位元會讓從 UID 或 GID 衍生的密鑰更多元。這樣就可以根據裝置的操作模式來限制資料的存取。例如,當從裝置韌體更新(DFU)模式開機時,可鎖定的種子位元便會用於拒絕存取受密碼保護的資料。如需更多資料,請前往:密碼。
AES 引擎
每部具有「安全隔離區」的 Apple 裝置都配備專用的 AES256 加密編譯引擎(「AES 引擎」),其內置於 NAND(非揮發性)快閃儲存空間與主系統記憶體間的「直接記憶體存取」(DMA)路徑中,可讓檔案加密具備高度效率。在 A9 或較新版本 A 系列處理器上,快閃儲存子系統位於獨立的匯流排上,此匯流排擁有的存取權有限,只能存取包含用户資料的記憶體(透過 DMA 加密編譯引擎)。
在開機時,sepOS 會使用 TRNG 產生臨時包裝密鑰。「安全隔離區」使用專用線路將此密鑰傳輸到「AES 引擎」,此計設是防止「安全隔離區」以外的任何軟件對其進行存取。sepOS 可以使用臨時包裝密鑰來包裝檔案密鑰,以供「應用程式處理器」檔案系統驅動程式使用。當檔案系統驅動程式讀取或寫入檔案時,它會將包裝的密鑰傳送到「AES 引擎」,藉此解開密鑰。「AES 引擎」絕對不會向軟件洩漏解封的密鑰。
附註:「AES 引擎」是獨立於「安全隔離區」和「安全隔離區 AES 引擎」的元件,但是其操作與「安全隔離區」環環相扣,如下所示。
公共密鑰加速器
「公共密鑰加速器」(PKA)是一個硬件區塊,用於執行非對稱加密作業。PKA 支援 RSA 和 ECC(橢圓曲線加密技術)簽名和加密演算法。PKA 的用意在於針對 SPA 和 DPA 之類的定時和從旁攻擊阻止資料洩漏。
PKA 支援軟件和硬件密鑰。硬件密鑰衍生自「安全隔離區」的 UID 或 GID。這些密鑰位於 PKA 中,即使在 sepOS 軟件中也不可見。
從 A13 SoC 開始,已使用正式的驗證技術證明 PKA 的加密實作在數理上是正確的。
在 Apple A10 和更新版 SoC 上,PKA 支援與 OS 綁定的密鑰,也稱為「密封密鑰保護」(SKP)。這些密鑰是使用裝置的 UID 和裝置上執行的 sepOS 雜湊值的組合產生的。雜湊值由「安全隔離區 Boot ROM」或 Apple A13 和較新版本的 SoC 上的「安全隔離區開機監視器」提供。這些密鑰也用於在向某些 Apple 服務送出要求時驗證 sepOS 版本,以及用來在沒有用户授權的狀態下進行重要系統變更時,協助防止密鑰材料遭存取,藉此改善受密碼保護的資料之保安。
安全非揮發性儲存裝置
「安全隔離區」配備了專用的安全非揮發性儲存裝置。安全非揮發性儲存裝置使用專用 I2C 匯流排連接到「安全隔離區」,因此只能由「安全隔離區」對其進行存取。所有用户資料加密密鑰均奠基於儲存在「安全隔離區」非揮發性儲存裝置中的熵。
在配備 A12、S4 和較新版本 SoC 的裝置上,「安全隔離區」會與「安全儲存元件」配對,以用於熵儲存空間。「安全儲存元件」本身的設計包含無法更改的 ROM 程式碼、硬件亂數產生器、依設備的唯一加密密鑰、加密編譯引擎,以及物理篡改偵測。「安全隔離區」和「安全儲存元件」使用經過加密和認證的協定進行進行通訊,以提供對熵的唯一存取。
最早於 2020 年秋季發布的裝置或更新版本均配備了第二代「安全儲存元件」。第二代「安全儲存元件」加入了計數器密碼箱。每個計數器密碼箱都儲存一個 128 位元鹽值、一個 128 位元密碼驗證器、一個 8 位元計數器和一個 8 位元最大嘗試值。對計數器密碼箱的存取會透過經過加密和認證的協定進行。
計數器密碼箱含有解鎖受密碼保護用户資料所需的熵。如要存取這些用户資料,配對的「安全隔離區」必須從用户的密碼和「安全隔離區」的 UID 衍生正確的密碼熵值。從配對的「安全隔離區」以外的其他來源所傳送的解鎖嘗試,無法得知用户的密碼。如果次數超過了密碼嘗試限制(例如,在 iPhone 上嘗試 10 次),「安全儲存元件」會完全清除受密碼保護的資料。
為了建立計數器密碼箱,「安全隔離區」會向「安全儲存元件」傳送密碼熵值和最大嘗試值。「安全儲存元件」會使用其亂數產生器來產生鹽值。接着會衍生出密碼驗證器值和所提供密碼熵的密碼箱熵值、「安全儲存元件」的唯一加密密鑰以及鹽值。「安全儲存元件」使用計數 0、所提供的最大嘗試值、衍生的密碼驗證器值和鹽值來初始化計數器密碼箱。「安全儲存元件」接着會將產生的密碼箱熵值傳回到「安全隔離區」。
之後如要從計數器密碼箱中取回密碼箱熵值,「安全隔離區」會向「安全儲存元件」傳送密碼熵。「安全儲存元件」會先遞增密碼箱的計數器。如果遞增的計數器超過最大嘗試值,則「安全儲存元件」會完全清除計數器密碼箱。如果計數尚未達到嘗試次數最大值,「安全儲存元件」會透過用於建立計數器密碼箱的同一組演算法,嘗試衍生密碼驗證器值和密碼箱熵值。如果衍生的密碼驗證器值與儲存的密碼驗證器值相符,「安全儲存元件」就會將密碼箱熵值傳回「安全隔離區」,並將計數器重置為 0。
用來存取受密碼保護的資料的密鑰根植於儲存在計數器密碼箱內的熵。如需更多資料,請前往:「資料保護」概覽。
安全非揮發性儲存裝置可用於「安全隔離區」中的所有反重播服務。「安全隔離區」上的反重播服務用於在發生標記反重播邊界的情形時撤銷資料,包括但不限於以下情形:
密碼更改
啟用或停用 Face ID 或 Touch ID
加入或移除 Face ID 容貌或 Touch ID 指紋
Face ID 或 Touch ID 重設
加入或移除 Apple Pay 卡片
清除所有內容和設定
在沒有採用「安全儲存元件」的架構上,會利用 EEPROM(電子清除式可程式化唯讀記憶體)來為「安全隔離區」提供安全儲存服務。如同「安全儲存元件」,EEPROM 只能透過「安全隔離區」連接和存取,不過 EEPROM 中不包含專用的硬件保安功能,也不保證對熵的專有存取權限(除了其實體連接特性之外),也不提供計數器密碼箱功能。
安全神經引擎
在配備 Face ID(而不是 Touch ID)的裝置上,「安全神經引擎」會將 2D 影像和深度圖轉換為用户容貌的數學表徵。
在 A11 至 A13 SoC 上,「安全神經引擎」已整合到「安全隔離區」中。「安全神經引擎」使用直接記憶體存取(DMA)來取得高效能。在 sepOS 核心控制下的輸入輸出記憶體管理單元(IOMMU)限制了對授權記憶體區域的直接存取。
從 A14、M1 或較新版本開始,「安全神經引擎」在「應用程式處理器」的「神經引擎」中作為安全模式進行實作。專用的硬件保安控制器在「應用程式處理器」和「安全隔離區」任務之間切換,在每次轉換時重設「神經引擎」狀態,以確保 Face ID 的資料安全。專用引擎會進行記憶體加密、認證和存取控制,同時使用單獨的加密密鑰和記憶體範圍將「安全神經引擎」限制在授權的記憶體區域中。
電源和時鐘監視器
所有電子裝置均設計為在有限的電壓和頻率範圍內操作。超出此範圍進行操作時,電子裝置可能會發生故障,然後可能會繞過安全控制。為協助確保電壓和頻率保持在安全範圍內,「安全隔離區」設計有監控電路。這些監控電路的作業範圍要比「安全隔離區」的其餘部份大得多。如果監視器偵測到非法的作業點,則「安全隔離區」中的時鐘會自動停止並且直到下一次 SoC 重設才會重新起動。
安全隔離區功能摘要
附註:2020 年秋季首次發布的 A12、A13、S4 和 S5 產品配備第二代「安全儲存元件」,而以這些 SoC 為基礎的較早產品則配備第一代「安全儲存元件」。
SoC | 記憶體保護引擎 | 安全儲存 | AES 引擎 | PKA |
---|---|---|---|---|
A8 | 加密和認證 | EEPROM | 是 | 否 |
A9 | 加密和認證 | EEPROM | DPA 保護 | 是 |
A10 | 加密和認證 | EEPROM | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
A11 | 加密、認證和重放預防 | EEPROM | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
A12(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
A12(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
A13(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | 作業系統綁定的密鑰和「開機監視器」 |
A13(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統綁定的密鑰和「開機監視器」 |
A14–A17 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統綁定的密鑰和「開機監視器」 |
S3 | 加密和認證 | EEPROM | DPA 保護和可鎖定的種子位元 | 是 |
S4 | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
S5(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
S5(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
S6–S9 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
T2 | 加密和認證 | EEPROM | DPA 保護和可鎖定的種子位元 | 作業系統鎖定的密鑰 |
M1、M2、M3 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | 作業系統綁定的密鑰和「開機監視器」 |