iMessage 信息姓名和照片安全共享
iMessage 信息的“姓名和照片共享”允许用户使用 iMessage 信息共享姓名和照片。用户可选择使用其“我的名片”信息,或自定义姓名并包括所选的任何图像。iMessage 信息的“姓名和照片共享”使用二级系统来分发姓名和照片。
数据按栏位细分,每一栏按照以下流程分别加密和认证并且统一认证。具体有以下三栏:
姓名
照片
照片文件名
创建数据的先期步骤之一就是在设备上随机生成一个 128 位的记录密钥。此记录密钥随后通过 HKDF-HMAC-SHA256 派生创建三个子密钥,即Key 1:Key 2:Key 3 = HKDF(record key, “nicknames”)。每一栏都会随机生成一个 96 位初始化向量 (IV),并且数据使用 AES-CTR 和 Key 1 加密。随后会使用 Key 2 并包括栏位名、栏 IV 以及栏位加密文本通过 HMAC-SHA256 来计算信息认证代码 (MAC)。最后,一组单独的栏位 MAC 值会被连在一起,并且其 MAC 使用 Key 3 通过 HMAC-SHA256 计算。256 位 MAC 与加密的数据一起储存。此 MAC 的前 128 位被用作 RecordID。
这个已加密的记录之后会储存在 CloudKit 公用数据库的 RecordID 下方。此记录永不会改变,并且每次当用户选择更改其姓名和照片时,便会生成新的加密记录。当用户 1 选择与用户 2 共享其姓名和照片时,记录密钥以及 recordID 会在加密的 iMessage 信息有效负载中一起发送。
当用户 2 的设备收到此 iMessage 信息有效负载时,它会注意到有效负载中包含“昵称和照片” recordID 及密钥。用户 2 的设备随后前往 CloudKit 公用数据库取回记录 ID 处已加密的姓名和照片并使用 iMessage 信息发送。
取回信息后,用户 2 的设备解密有效负载并使用 recordID 自身验证签名。如果验证通过,则会向用户 2 显示姓名和照片,用户 2 可以选择将此添加到其通讯录,或在“信息”中使用。