
iMessage 名稱和相片安全分享
iMessage 的「名稱和相片分享」讓用户可使用 iMessage 來分享名稱和相片。用户可選取「我的卡片」資料,或自訂名稱並加入其選擇的任何影像。iMessage 的「名稱和相片分享」使用雙階段系統來分送名稱和相片。
資料分為數個欄位,每個欄位會分別加密和認證,並使用以下程序一起認證。共有三個欄位:
名稱
相片
相片檔案名稱
製作資料的第一個步驟之一是在裝置上隨機產生一個記錄 128 位元密鑰。接着這個記錄密鑰會透過 HKDF-HMAC-SHA256 衍生來建立三個子密鑰:Key 1:Key 2:Key 3 = HKDF(record key, "nicknames")。系統會針對每個欄位產生一個隨機 96 位元初始化向量(IV),並使用 AES-CTR 和密鑰 1 來加密資料。接着使用密鑰 2 透過 HMAC-SHA256 來運算訊息驗證碼(MAC),並覆蓋欄位名稱、欄位 IV 與欄位加密文字。最後,將各欄位 MAC 值集合串連起來,再使用密鑰 3 透過 HMAC-SHA256 運算其 MAC。256 位元的 MAC 會與加密資料一起儲存。此 MAC 的第一個 128 位元作為 RecordID 使用。
然後這個加密資料會儲存在 CloudKit 公用資料庫的 RecordID 底下。此資料永遠不會更改,且每次用户選擇更改其名稱和相片時,都會產生新的加密記錄。當用户 1 選擇與用户 2 分享其名稱和相片時,會傳送記錄密鑰以及 iMessage 承載資料中的 RecordID(已加密)。
當用户 2 的裝置收到這個 iMessage 承載資料時,會注意到承載資料中包含「暱稱和相片」RecordID 及密鑰。接下來用户 2 的裝置會前往公共 CloudKit 資料庫,截取該記錄 ID 的加密名稱和相片,然後透過 iMessage 傳出。
訊息截取完畢後,用户 2 的裝置會解密承載資料並使用 RecordID 本身驗證簽署。如果通過驗證,便會向用户 2 顯示名稱和相片,然後他們可以選擇將此資料加入聯絡人中,或是用於「訊息」。