
「資料保護」的 Keybag
系統會收集檔案和鑰匙圈「資料保護」類別的密鑰,並在 iOS、iPadOS、tvOS、watchOS 和 visionOS 的 Keybag 內加以管理。這些作業系統會使用以下的 Keybag:用户、裝置、備份、託管和「iCloud 備份」。
用户 Keybag
用户 Keybag 是裝置一般操作中使用的封裝類別密鑰的儲存位置。例如,輸入密碼後,會從用户 Keybag 中載入 NSFileProtectionComplete 並解除封裝。這是儲存在「無保護」類別的二進位屬性列表(.plist)檔案。
在配備 A9 之前版本 SoC 的裝置上,.plist 檔案內容會以保留在「可抹除儲存空間」的密鑰加密。為了對 Keybag 提供更高的保安,用户每次更改密碼時,系統都會清除並重新產生此密鑰。
在配備 A9 或以上版本 SoC 的裝置上,.plist 檔案中包含一個密鑰,指出 Keybag 儲存在保存庫中,這個保存庫受到「安全隔離區」所控制的反重播值保護。
「安全隔離區」會管理用户 Keybag,並可用於查詢裝置的鎖定狀態。只有當用户 Keybag 中的所有類別密鑰都可存取且已成功解除封裝,「安全隔離區」才會報吿裝置已解鎖。
裝置 Keybag
裝置 Keybag 是用來儲存操作相關裝置特定資料的封裝類別密鑰。使用「共用的 iPad」模式設定的 iPad 裝置有時候需要存取憑證,才能讓用户登入,因此需要未受用户密碼保護的 Keybag。
iOS、iPadOS 和 visionOS 不支援用户專屬檔案系統內容的加密編譯區分,即系統將使用來自裝置 Keybag 的類別密鑰來封裝檔案專屬密鑰。不過,鑰匙圈會使用來自用户 Keybag 的類別密鑰來保護用户鑰匙圈裏的項目。在針對單一用户(預設設定)設定的 iPhone 及 iPad 裝置上,裝置 Keybag 和用户 Keybag 是同一個 Keybag,且受用户的密碼保護。
備份 Keybag
備份 Keybag 是在 Finder(在 macOS 10.15 或較新版本)或 iTunes(在 macOS 10.14 或較早版本)進行加密備份時製作,儲存在為裝置進行備份的電腦中。新 Keybag 是使用一組新的密鑰製作而成,備份的資料會以這些新密鑰來重新加密。如前面所述,不可遷移的鑰匙圈項目仍會使用 UID 衍生的密鑰加以封裝,以使其可以回復到最初用於備份的裝置上,但在其他裝置上則無法存取。
Keybag 受到密碼組保護,且執行了一千萬次密鑰衍生函數 PBKDF2 的反覆運算。雖然反覆運算的次數很多,但 Keybag 並未與特定裝置綁定,因此理論上可嘗試在多部電腦上對備份 Keybag 進行暴力密碼破解攻擊。而保安夠高的密碼可以降低此威脅。
如用户選擇不加密備份,那麼無論檔案屬於哪一種「資料保護」類別,檔案都不會加密,但鑰匙圈仍會使用 UID 衍生的密鑰獲得保護。這就是只有在設定備份密碼時,才能將鑰匙圈項目遷移到新裝置的原因。
託管 Keybag
託管 Keybag 用於透過 USB 和流動裝置管理(MDM)使用 Finder 或 iTunes同步。此 Keybag 允許 Finder 或 iTunes 執行備份和同步,讓用户無須輸入密碼,還允許 MDM 解決方案遙距清除用户密碼。此 Keybag 儲存在用於透過 Finder 或 iTunes 進行同步的電腦,或者遙距管理裝置的 MDM 解決方案上。
託管 Keybag 改善了裝置同步期間的用户體驗,此期間內可能需要存取所有類別的資料。當使用密碼鎖定的裝置首次連接到 Finder 或 iTunes 時,會提示用户輸入密碼。然後,裝置會製作託管 Keybag,其中包含的類別密鑰與裝置上使用的完全相同,該 Keybag 由新產生的密鑰保護。系統會將託管 Keybag 與用於保護它的密鑰分別存放在裝置和主機或伺服器上,其資料則以「首次用户認證前的保護」類別儲存在裝置上。這就是重新啟動後首次使用 Finder 或 iTunes 進行備份之前,必須輸入裝置密碼的原因。
如果是進行無線(OTA)軟件更新,在一開始進行更新時,系統會提示用户輸入密碼。這會用來安全地建立一次性解鎖代號,其會在更新後解鎖用户 Keybag。如未輸入用户的密碼,便無法產生此代號,且如用户密碼有所更改,任何先前產生的代號都會失效。
不同的一次性解鎖代號分別適用於手動和自動軟件更新安裝情形。它們會使用「安全隔離區」中單純計數器目前值所衍生的密鑰、Keybag 的 UUID 和「安全隔離區」UID 來進行加密。
在 A9(或較新版本)SoC 上,一次性鎖定代號不再依賴計數器或「可抹除儲存空間」,而是受到由「安全隔離區」控制的反重播值保護。
手動軟件更新的一次性解鎖代號會在 20 分鐘後過期。在 iOS 13、iPadOS 13.1、visionOS 1.0 或較新版本中,代號儲存在受到「安全隔離區」保護的保存庫中。在 iOS 13 以前,此代號可從「安全隔離區」輸出,並寫入「可抹除儲存空間」中,或受到「安全隔離區」反重播機制保護。如裝置在 20 分鐘內未重新開機,規則計時器會遞增計數器。
當以下其中一種情況發生,而且系統偵測到有可用更新時,軟件更新將會自動執行:
已在 iOS 12 或較新版本中設定自動更新。
用户在收到更新通知時選擇「稍後安裝」。
用户輸入密碼後,系統會產生一次性解鎖代號,在「安全隔離區」中效力長達 16 小時。如果尚未執行更新,每次鎖定裝置時系統便會銷毀此一次性解鎖代號,並在其後每一次解鎖時重新建立。每次解鎖都會重計 16 小時。16 小時過後,規則計時器將會使一次性解鎖代號失效。
「iCloud 備份」Keybag
「iCloud 備份」Keybag 與備份 Keybag 類似。此 Keybag 中的所有類別密鑰皆為非對稱式(與「未開啟檔案的保護」資料保護類別一樣,使用 Curve25519)。非對稱式 Keybag 也用來保護還原「iCloud 鑰匙圈」所需的備份鑰匙圈。