iOS 安全保護白皮書(二)——加密和數據保護

作者:Apple中國

安全啟動鏈、代碼簽名和運行時進程安全性都有助於確保只有受信任的代碼及應用可以在設備上運行。iOS 還有更多加密和數據保護功能來保護用戶數據的安全,即使安全性基礎架構的其他部分遭到入侵(例如,在設備上進行未授權的修改)。這對於用戶和 IT 管理員都大有助益,它可始終保護個人和企業信息,並提供了設備被盜或丟失時將它立即徹底遠程擦除的方法。

硬體安全性功能

在移動設備上,速度和節能至關重要。加密操作非常複雜,如果在設計和實施時未考慮這兩個重要因素,可能會帶來一些性能或電池續航方面的問題。

每台 iOS 設備都配備了專用的 AES 256 加密引擎,它內置於快閃記憶體與主系統內存之間的 DMA 路徑中,可以實現高效的文件加密。

設備的唯一 ID (UID) 和設備組 ID (GID) 是 AES 256 位密鑰,密鑰已在製造過程中被固化 (UID)

或編譯 (GID) 在應用程序處理器和 Secure Enclave 中。任何軟體或固件都無法直接讀取這些

ID;而只能查看由植入於矽片中的專用 AES 引擎將 UID 或 GID 用作密鑰所執行的加密或解密操

作結果。此外,只有專用於 Secure Enclave 的 AES 引擎才能使用 Secure Enclave 的 UID 和

GID。每台設備的 UID 都是唯一的,Apple 或其任何其供應商都沒有記錄在案。GID 對於同一類設備(例如,使用 Apple A8 處理器的所有設備)的所有處理器是通用的,它可用於非高安全性的任務,例如在安裝和恢復過程中交付系統軟體。將這些密鑰集成到矽片中可防止篡改或繞過它們,或在 AES 引擎外部對其進行訪問。UID 和 GID 也不可以通過 JTAG 或其他調試介面使用。

利用 UID 可以採用加密方式將數據與特定設備捆綁起來。例如,用於保護文件系統的密鑰層次結構包括 UID,因此如果將內存晶元從一台設備整個移至另一台設備,文件將不可訪問。UID 與設備上的任何其他標識符都無關。

除了 UID 和 GID,所有其他加密密鑰都由系統的隨機數生成器 (RNG) 使用基於 CTR_DRBG 的演算法創建。系統熵是在啟動期間從時間變化以及設備啟動後從中斷計時中生成的。在 Secure Enclave 內部生成的密鑰使用真正的硬體隨機數生成器,通過基於 CTR_DRBG 處理的多個環形振蕩器創建而成。

安全抹掉存儲的密鑰與生成它們一樣重要。在快閃記憶體上執行這項操作尤其具有挑戰性,因為損耗均衡

(wear-leveling) 可能意味著需要抹掉多份數據副本。為了解決該問題,iOS 設備加入了一種專用

於安全擦除數據的功能,稱為可擦除存儲器。此功能利用基礎存儲技術(例如 NAND)直接進行非

常低級別的定址並抹掉少量數據塊。

文件數據保護

除了 iOS 設備內置的硬體加密功能,Apple 還使用稱為數據保護的技術,進一步保護儲存於設備快閃記憶體中的數據。數據保護使設備不但可以響應來電等常見事件,還可以針對用戶數據實現高級加密。諸如「信息」、「郵件」、「日曆」、「通訊錄」、「照片」和「健康」數據值等主要系統應用在

默認情況下使用數據保護,而 iOS 7 或更高版本上安裝的第三方應用則可以自動獲得此保護。

數據保護是通過構建和管理密鑰層次結構來實現的,並建立在每台 iOS 設備的硬體加密技術基礎上。它通過將某個類分配給每個文件來實現對文件的逐個控制;可訪問性取決於該類密鑰是否已解鎖。

架構概覽

每次在數據分區中創建文件時,數據保護都會創建一個新的 256 位密鑰(「文件獨有」密鑰),

並將其提供給硬體 AES 引擎,此引擎會使用該密鑰並採用 AES CBC 模式對寫入快閃記憶體的文件進行加密。(在配備 A8 處理器的設備上,使用了 AES-XTS。)初始化向量 (IV) 使用文件塊偏移量進行計算,它使用文件獨有密鑰的 SHA-1 哈希值進行加密。

根據每個文件的可訪問性,文件獨有密鑰使用其中一個類密鑰進行封裝。像所有其他封裝一樣,根據每個文件的可訪問性,文件獨有密鑰使用其中一個類密鑰進行封裝。像所有其他封裝一樣,這是使用NIST AES 密鑰封裝根據 RFC 3394 來執行的。封裝的文件獨有密鑰儲存在文件的元數據中。

當打開一個文件時,系統會使用文件系統密鑰解密文件的元數據,以顯露出封裝的文件獨有密鑰和表示它受哪個類保護的記號。文件獨有密鑰使用類密鑰解封,然後提供給硬體 AES 引擎,該引擎會在從快閃記憶體中讀取文件時對文件進行解密。所有封裝文件密鑰的處理髮生在 Secure Enclave 中;文件密鑰絕不會直接透露給應用程序處理器。啟動時,Secure Enclave 與 AES 引擎協商得到一個臨時密鑰。當 Secure Enclave 解開文件密鑰時,它們又通過該臨時密鑰再次封裝,然後發送回應用程序處理器。

文件系統中所有文件的元數據都使用隨機密鑰進行加密,該密鑰在首次安裝 iOS 或用戶擦除設備時創建。文件系統密鑰儲存在可擦除存儲器中。因為該密鑰儲存在設備上,因此它不是用於保持數據的機密性,而是可以根據需要快速抹掉(由用戶使用「抹掉所有內容和設置」選項來抹掉,或者由用戶或管理員通過從移動設備管理 (MDM) 伺服器、Exchange ActiveSync 或 iCloud 發出遠程擦除命令來抹掉)。以這種方式抹掉密鑰將通過加密方式使設備上的所有文件不可訪問。

文件的內容使用文件獨有密鑰進行加密,該密鑰使用類密鑰封裝並儲存在文件的元數據中,文件元數據又使用文件系統密鑰進行加密。類密鑰通過硬體 UID 獲得保護,而某些類則通過用戶密碼獲得保護。此層次結構既可提供靈活性,又可保證性能。例如,更改文件的類只需重新封裝其文件獨有密鑰,更改密碼只需重新封裝類密鑰。

密碼

通過設置一個設備密碼,用戶便自動啟用了數據保護。iOS 支持 6 位數、4 位數和任意長度的字母數字密碼。除了用於給設備解鎖,密碼還為特定的加密密鑰提供熵。這意味著攻擊者即使拿到設備,在沒有密碼的情況下也無法訪問某些特定保護類的數據。

密碼與設備的 UID 配合使用,因此暴力嘗試只能是在受到攻擊的設備上進行的。為此,iOS 系統使用較大的迭代次數來延緩每次嘗試。迭代次數已經校準過以使每次嘗試約耗時 80 毫秒。這意味著嘗試 6 位字元的字母(小寫)數字密碼的全部組合將耗時 5 年半時間。

用戶密碼的強度越大,加密密鑰強度就越高。Touch ID 可用於增強這樣的因果關係,因為它可以讓用戶創建一個要比實用密碼安全性高很多的密碼。這增加了對用於數據保護的加密密鑰進行保護的密碼強度,而且不會對一天中多次解鎖 iOS 設備的用戶體驗產生負面影響。

為了進一步阻止暴力破解,在鎖定屏幕上輸入無效密碼後的延遲時間會逐步增加。如果「設置」>「Touch ID 與密碼」>「抹掉數據」已打開,則當連續 10 次嘗試輸入錯誤的密碼後,設備會自動擦除。此設置還可作為管理策略通過移動設備管理 (MDM) 和 Exchange ActiveSync 提供,而且可設置為較低的閾值。

在配備 A7 或更高版本 A 系列處理器的設備上,延遲由 Secure Enclave 執行。如果設備在定時延遲期間重新啟動,延遲仍然執行,且定時器從當期重新計時。

數據保護類

在 iOS 設備上創建新文件時,創建它的應用會為其分配一個類。每個類使用不同的策略來確定數據何時可被訪問。基本類和策略會在以下部分進行描述。

全面保護

(NSFileProtectionComplete):該類密鑰通過從用戶密碼和設備 UID 派生的密鑰得到

保護。用戶鎖定設備不久後(如果「需要密碼」設置為「立即」,則為 10 秒鐘後),已解密的

類密鑰會被丟棄,使得此類中的所有數據只有在用戶再次輸入密碼或使用 Touch ID 解鎖設備時才可被訪問。

未打開文件的保護

(NSFileProtectionCompleteUnlessOpen):某些文件可能需要在設備鎖定時寫入,

如郵件附件在後台下載。此行為是通過使用非對稱橢圓曲線加密技術(基於 Curve25519 的

ECDH)實現的。普通的文件獨有密鑰是通過使用一次性迪菲-赫爾曼密鑰交換協議(One-Pass

Diffie-Hellman Key Agreement,如 NIST SP 800-56A 中所述)派生的密鑰進行保護。

該協議的臨時公鑰與封裝的文件獨有密鑰一起儲存。KDF 是串聯密鑰導出函數 (Approved

Alternative 1),如 NIST SP 800-56A 中 5.8.1 所述。AlgorithmID 已忽略。PartyUInfo 和

PartyVInfo 是獨立的臨時靜態公鑰。SHA-256 被用作哈希函數。一旦文件關閉,文件獨有密鑰會從內存中擦除。要再次打開該文件,系統會使用「未打開文件的保護」類的私鑰和文件的臨時公鑰重新創建共享密鑰,用來解開文件獨有密鑰的封裝,然後用文件獨有密鑰來解密文件。

首次用戶認證前保護

(NSFileProtectionCompleteUntilFirstUserAuthentication):此類和

「全面保護」類的行為方式相同,只不過鎖定設備時已解密的類密鑰不會從內存中刪除。此類中的保護與桌面電腦全宗卷加密有類似的屬性,可防止數據受到涉及重新啟動的攻擊。這是未分配給數據保護類的所有第三方應用數據的默認類。

無保護

(NSFileProtectionNone):此類密鑰僅受 UID 的保護,並且存儲在可擦除存儲器中。

由於解密該類中的文件所需的所有密鑰都儲存在設備上,因此採用該類加密的唯一好處就是可以進行快速遠程擦除。即使未向文件分配數據保護類,此文件仍會以加密形式儲存(就像 iOS 設備上的所有數據那樣)。

鑰匙串數據保護

許多應用都需要處理密碼和其他一些簡短但比較敏感的數據,如密鑰和登錄令牌。iOS 鑰匙串提供了儲存這些項的安全方式。

鑰匙串以儲存在文件系統中的 SQLite 資料庫的形式實現,且資料庫只有一個;securityd 監控程序決定哪些鑰匙串項可被每個進程或應用所訪問。鑰匙串訪問 API 將生成對監控程序的調用,從而查詢應用的「keychain-access-groups」、「application-identifier」和「application-group」許可權。訪問組允許在應用之間共享鑰匙串項,而非將訪問許可權限制於單個進程。

鑰匙串項只能在來自同一開發者的應用之間共享。管理它的方法是,要求第三方應用使用包含前綴的訪問組,並且該前綴由應用程序組通過 Apple Developer Program(Apple 開發者計劃)分配。通過代碼簽名、預置描述文件和 Apple Developer Program(Apple 開發者計劃)來強制實施對前綴的要求和應用程序組唯一性。

鑰匙串訪問控制

鑰匙串可以使用訪問控制列表 (ACL) 以設定可訪問性和認證要求的策略。鑰匙串項可以設立條件,要求用戶指定使用 Touch ID 或輸入設備密碼進行認證,否則不能訪問。對鑰匙串項的訪問也可以限制為在該鑰匙串項添加以後,Touch ID 註冊未發生更改。此限制有助於防止攻擊者通過添加自己的指紋來訪問鑰匙串項。ACL 在 Secure Enclave 內部進行評估,只有符合其指定的限制條件時,才會釋放到內核。


推薦閱讀:

AR VS 安全 誰會被誰拍死在沙灘上?
拔掉網線就安全?有人聽你電腦風扇聲音就能黑掉你!
黑客是怎麼一步步解鎖你被盜的iphone

TAG:信息安全 | 苹果公司AppleInc |