安全隔離區
「安全隔離區」是以下最新版本之 iPhone、iPad、Mac、Apple TV、Apple Watch 和 HomePod 的專用安全子系統。
概覽
「安全隔離區」是整合在 Apple 系統單晶片(SoC) 中的專用安全子系統。「安全隔離區」與主要處理器加以隔離,以提供額外的安全性,並且即使在「應用程式處理器」核心受到威脅時,也可以確保敏感性使用者資料的安全。其遵循與 SoC 整體相同的設計原則:開機 ROM 用於建立硬體信任根、AES 引擎用於確保有效且安全的加密編譯作業,以及受保護的記憶體。雖然「安全隔離區」不包含儲存空間,但是其具有機制可將資訊安全儲存在外接的儲存裝置上(獨立於應用程式處理器和作業系統所使用的 NAND 快閃儲存空間)。
「安全隔離區」是大部分 iPhone、iPad、Mac、Apple TV、Apple Watch 和 HomePod 版本的硬體功能,包含:
iPhone 5s 或後續機型
iPad Air 或後續機型
配備 Apple 晶片的 Mac 電腦
配備觸控列且搭載 Apple T1 晶片的 MacBook Pro 電腦(2016 和 2017 年)
採用 Intel 架構並配備 Apple T2 安全晶片的 Mac 電腦
Apple TV HD 或後續機型
Apple Watch Series 1 或後續機型
HomePod 和 HomePod mini
安全隔離區處理器
「安全隔離區處理器」為「安全隔離區」提供主要的運算電力。為了提供最強的隔離性,「安全隔離區處理器」專門用於「安全隔離區」。這有助於防止與被攻擊目標軟體共享同一執行核心的惡意軟體從旁進行攻擊。
「安全隔離區處理器」採用 Apple 特製的 L4 microkernel 版本。其設計宗旨為以較低的時脈高效運行,進而有助於保護其免受時鐘和電源攻擊。自 A11 和 S4 起,「安全隔離區處理器」包含了受記憶體保護的引擎和加密記憶體搭配反重播功能、安全開機、專用亂數產生器和專屬的 AES 引擎。
記憶體保護引擎
「安全隔離區」在裝置 DRAM 記憶體的專用區域內運行。多層保護將「安全隔離區」的受保護記憶體與「應用程式處理器」隔開。
裝置啟動時,「安全隔離區開機 ROM」會為「記憶體保護引擎」產生隨機的臨時記憶體保護密鑰。每當「安全隔離區」寫入其專用記憶體區域時,「記憶體保護引擎」就會在 Mac XEX(xor-encrypt-xor)模式下使用 AES 來加密記憶體區塊,並計算該記憶體的密碼型訊息驗證碼(CMAC)認證標記。「記憶體保護引擎」將認證標記與加密的記憶體一起儲存。當「安全隔離區」讀取記憶體時,「記憶體保護引擎」便會確認認證標記。如果認證標記相符,則「記憶體保護引擎」將對記憶體區塊進行解密。如果標記不相符,則「記憶體保護引擎」會向「安全隔離區」發出錯誤訊號。發生記憶體認證錯誤後,「安全隔離區」會停止接受要求,直到系統重新開機為止。
從 Apple A11 和 S4 SoC 開始,「記憶體保護引擎」為「安全隔離區」記憶體加入了重放保護。為了協助防止安全性相關重要的資料遭到重放,「記憶體保護引擎」會在認證標記旁邊儲存該記憶體區塊的唯一一次性號碼,稱為「反重放值」。反重放值的作用是 CMAC 認證標記的額外調校。所有記憶體區塊的反重放值都使用根植於「安全隔離區」內專用 SRAM 中的完整性樹狀結構進行保護。對於寫入操作,「記憶體保護引擎」會更新反重放值和完整性樹狀結構中最高至 SRAM 的每個層級。對於讀取操作,「記憶體保護引擎」會驗證反重放值和完整性樹狀結構中最高至 SRAM 的每個層級。反重放值不相符的處理方式與認證標記不相符的處理方式相同。
在 Apple A14、M1 或後續 SoC 上,「記憶體保護引擎」支援兩種臨時記憶體保護密鑰。第一種用於「安全隔離區」專用的資料,第二種則用於與「安全神經引擎」共用的資料。
「記憶體保護引擎」對「安全隔離區」直接且透明地運行。「安全隔離區」就像一般未加密的 DRAM 來讀寫記憶體,而「安全隔離區」外部的觀察者只能看到記憶體的加密和認證版本。這一切造就了強大的記憶體保護機制,同時無須犧牲效能或軟體的複雜度。
安全隔離區開機 ROM
「安全隔離區」包含專用的「安全隔離區開機 ROM」。類似於「應用程式處理器開機 ROM」,「安全隔離區開機 ROM」屬於無法更改的程式碼,用於為「安全隔離區」建立硬體信任根。
系統啟動時,iBoot 會將專用的記憶體區域指定給「安全隔離區」。使用記憶體前,「安全隔離區開機 ROM」會初始化「記憶體保護引擎」,以提供對「安全隔離區」受保護記憶體的加密保護。
然後,「應用程式處理器」會將 sepOS 映像檔傳送到「安全隔離區開機 ROM」。將 sepOS 映像檔拷貝到「安全隔離區」的受保護記憶體後,「安全隔離區開機 ROM」將會檢查映像檔的加密雜湊和簽章,以驗證 sepOS 是否已獲得在裝置上執行的授權。如果 sepOS 映像檔已正確簽署以在裝置上執行,則「安全隔離區開機 ROM」會將控制權轉移到 sepOS。如果簽章無效,則「安全隔離區開機 ROM」的設計會阻止對「安全隔離區」的任何後續使用,直到下一次晶片重置為止。
在 Apple A10 和較新的 SoC 上,「安全隔離區開機 ROM」將 sepOS 的雜湊值鎖定到專用於此用途的註冊器中。「公共密鑰加速器」會將此雜湊用於作業系統綁定(OS 綁定)密鑰。
安全隔離區開機監視器
在 Apple A13 和較新版 SoC 上,「安全隔離區」包含一個「開機監視器」,其設計可確保開機 sepOS 的雜湊值具有更強的完整性。
系統啟動時,「安全隔離區處理器」的「系統副處理器完整保護」(SCIP)設定可協助防止「安全隔離區處理器」執行「安全隔離區開機 ROM」以外的任何程式碼。「開機監視器」可協助防止「安全隔離區」直接修改 SCIP 設定。為了讓載入的 sepOS 可執行,「安全隔離區開機 ROM」會向「開機監視器」傳送一個要求,其中包含載入之 sepOS 的位址和大小。收到要求後,「開機監視器」將重置「安全隔離區處理器」,對已載入的 sepOS 進行雜湊處理、更新 SCIP 設定以允許執行已載入的 sepOS,並在新載入的程式碼內開始執行。隨著系統繼續開機,只要使新程式碼可執行,就會使用相同的程序。每次「開機監視器」都會更新開機程序的執行雜湊值。「開機監視器」也會執行的雜湊中包含重要的安全性參數。
開機完成後,「開機監視器」會定案執行中的雜湊,並將其發送到「公共密鑰加速器」以用於與 OS 綁定的密鑰。此處理序經設計可確保即使「安全隔離區開機 ROM」中存在漏洞,也無法略過作業系統密鑰的綁定。
真亂數產生器
「真亂數產生器」(TRNG)會用來產生安全隨機資料。每當「安全隔離區」產生隨機加密編譯密鑰、隨機密鑰種子或其他熵時,就會使用 TRNG。TRNG 的基礎是使用 CTR_DRBG(「計數器模式」下以區塊加密為基礎的演算法)處理後的多個環形振盪器。
根加密編譯密鑰
「安全隔離區」包含唯一識別碼(UID)根加密編譯密鑰。UID 對每個個別的裝置都是唯一的,並且與裝置上的任何其他識別碼無關。
製造時隨機產生的 UID 會與 SoC 融合在一起。自 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 雜湊值的組合產生的。雜湊由「安全隔離區開機 ROM」或 Apple A13 和較新的 SoC 上的「安全隔離區開機監視器」提供。這些密鑰也用於在向某些 Apple 服務送出要求時驗證 sepOS 版本,以及用來在沒有使用者授權的狀態下進行重要系統更動時,協助防止密鑰材料遭存取,藉此改善受密碼保護的資料安全性。
安全非揮發性儲存裝置
「安全隔離區」配備了專用的安全非揮發性儲存裝置。安全非揮發性儲存裝置使用專用 I2C 匯流排連接到「安全隔離區」,因此只能由「安全隔離區」對其進行存取。所有使用者資料加密密鑰均奠基於儲存在「安全隔離區」非揮發性儲存裝置中的熵。
在配備 A12、S4 和更新 SoC 的裝置上,「安全隔離區」會與「安全儲存元件」配對,以用於熵儲存空間。「安全儲存元件」本身的設計包含無法更改的 ROM 程式碼、硬體亂數產生器、依設備的唯一加密密鑰、加密引擎,以及物理篡改偵測。「安全隔離區」和「安全儲存元件」使用經過加密和認證的協定進行通訊,以提供對熵的唯一存取。
最早於 2020 年秋季發布的裝置或較新版本均配備了第二代「安全儲存元件」。第二代「安全儲存元件」加入了計數器密碼箱。每個計數器密碼箱都儲存一個 128 位元 salt、一個 128 位元密碼驗證器、一個 8 位元計數器和一個 8 位元嘗試次數最大值。對計數器密碼箱的存取會透過經過加密和認證的協定。
計數器密碼箱含有解鎖受密碼保護使用者資料所需的熵。若要存取這些使用者資料,配對的「安全隔離區」必須從使用者的密碼和「安全隔離區」的 UID 衍生正確的密碼熵值。嘗試解鎖的行為如果是來自配對的「安全隔離區」以外,將無法得知使用者的密碼。如果超過了密碼嘗試次數的限制(例如,在 iPhone 上嘗試 10 次),則「安全儲存元件」將完全清除受密碼保護的資料。
為了建立計數器密碼箱,「安全隔離區」會向「安全儲存元件」傳送密碼熵值和嘗試次數最大值。「安全儲存元件」會使用其亂數產生器來產生 salt 值。接著會衍生出密碼驗證器值和所提供密碼熵的密碼箱熵值、「安全儲存元件」的唯一加密密鑰以及 salt 值。「安全儲存元件」會使用計數 0、所提供的嘗試次數最大值、衍生的密碼驗證器值和 salt 值來初始化計數器密碼箱。「安全儲存元件」接著會將產生的密碼箱熵值傳回「安全隔離區」。
若要從計數器密碼箱中擷取密碼箱熵值,「安全隔離區」會向「安全儲存元件」傳送密碼熵。「安全儲存元件」會先遞增密碼箱的計數器。如果遞增的計數器超過嘗試次數最大值,則「安全儲存元件」會完全清除計數器密碼箱。如果計數尚未達到嘗試次數最大值,「安全儲存元件」會透過用於建立計數器密碼箱的同一個演算法,嘗試衍生密碼驗證器值和密碼箱熵值。如果衍生的密碼驗證器值與儲存的密碼驗證器值相符,「安全儲存元件」就會將密碼箱熵值傳回「安全隔離區」,並將計數器重置為 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 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
A11 | 加密、認證和重放預防 | EEPROM | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
A12(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
A12(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
A13(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰和開機監視器 |
A13(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰和開機監視器 |
A14 至 A17 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰和開機監視器 |
S3 | 加密和認證 | EEPROM | DPA 保護和可鎖定的種子位元 | 是 |
S4 | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
S5(2020 年秋季之前發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第一代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
S5(2020 年秋季之後發佈的 Apple 裝置) | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
S6 至 S9 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
T2 | 加密和認證 | EEPROM | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰 |
M1、M2、M3 | 加密、認證和重放預防 | 安全儲存元件(第二代) | DPA 保護和可鎖定的種子位元 | OS 綁定的密鑰和開機監視器 |