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