保護鑰匙圈同步
當使用者第一次為雙重認證帳號開啟「iCloud 鑰匙圈」時,裝置會為自己製作同步身分。同步身分包括非對稱橢圓密鑰(使用 P-384),會儲存在裝置的鑰匙圈中。每部裝置都會各自維護該使用者其他裝置的同步身分列表,並使用其中一個身分密鑰簽署該列表。這些列表會儲存在 CloudKit 中,讓使用者的裝置對於如何在彼此間安全地同步鑰匙圈資料達成共識。
為了與舊版 iCloud 裝置相容,系統會建立類似的同步信任圈,並形成另一個同步身分。同步身分的公用密鑰會置於信任圈中,該信任圈已經過兩次簽署:第一次由同步身分的專用密鑰簽署,第二次由使用者 iCloud 帳號密碼所衍生的非對稱橢圓密鑰(使用 P-256)簽署。連同信任圈一起儲存的還有參數(隨機密鑰和反覆運算次數),用於製作以使用者 iCloud 密碼為基礎的密鑰。
同步信任圈的 iCloud 儲存
對於雙重認證帳號,每部裝置的信任裝置列表會儲存在 CloudKit 中。如果不知道使用者的 iCloud 密碼,就無法讀取這些列表,而如果沒有該持有裝置的專用密鑰,就無法對這些列表進行修改。
同樣地,已簽署的同步信任圈會存放於使用者的 iCloud 鍵值儲存區域,如果不知道使用者的 iCloud 密碼,就無法讀取該同步信任圈,而如果沒有該同步信任圈成員同步身分的專用密鑰,就無法對其進行有效修改。
使用者的其他裝置如何加入到同步信任圈
新裝置在登入 iCloud 時,會透過以下兩種方式之一加入「iCloud 鑰匙圈」的同步信任圈:與現有「iCloud 鑰匙圈」裝置配對並由其贊助,或使用「iCloud 鑰匙圈」復原。
在配對流程中,申請裝置為同步信任圈和同步列表(用於雙重認證帳號)建立新的同步身分,並將其提供給贊助者。贊助者會將新成員的公用密鑰加入到同步信任圈,並使用其同步身分和來自使用者 iCloud 密碼的密鑰再次簽署。新的同步信任圈會置於 iCloud 中,該信任圈的新成員會以類似方式進行簽章。在雙重認證帳號中,贊助者裝置也會向加入的裝置提供由其身分密鑰簽署的憑證,表示應信任申請裝置。然後,其會更新其受信任同步身分的個別列表以納入申請者。
假設簽章信任圈有兩個成員,並且每個成員擁有與其配對的公用密鑰。這時會開始透過 CloudKit 或 iCloud 鍵值儲存空間來交換個別的鑰匙圈項目(以最適用者為主)。如果兩個信任圈成員都對同一個項目進行更新,則選擇其中一個或另一個,都會產生最終的一致性。每個同步的項目都會經過加密,因此只能由使用者信任圈中的裝置進行解密;其他任何裝置或 Apple 均無法解密。
當新裝置加入同步信任圈時,請重複此「加入程序」。例如,當第三個裝置加入時,它可以與現有裝置中的任何一個配對。每當有新的同級裝置加入,每部同級裝置都會與新裝置進行同步。這樣的設計是為了確保所有成員擁有相同的鑰匙圈項目。
只有特定項目會進行同步
部分鑰匙圈項目是用於特定裝置,例如 iMessage 密鑰,因此必須保留在裝置上。若要防止非預期的資料傳輸,每個要同步的項目都必須用 kSecAttrSynchronizable
屬性明確標示。
Apple 已經為 Safari 使用者資料(包括使用者名稱、密碼和信用卡卡號),以及 Wi-Fi 網路密碼、HomeKit 加密密鑰和其他支援端對端 iCloud 加密的鑰匙圈項目設定了此屬性。
此外,依照預設,第三方 App 所加入的鑰匙圈項目不會進行同步。將項目加入到鑰匙圈時,開發者必須設定 kSecAttrSynchronizable
屬性。