安全的 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 顯示名稱和照片,然後他們可以選擇將此資料加入聯絡人中,或是用於「訊息」。