
证明过程安全性
证明过程安全性
当 ACME 配置指定硬件绑定密钥时,或者当设备管理服务请求 DeviceInformation 证明时,设备会执行以下步骤:
操作系统从安全隔区请求硬件绑定密钥,称为已证明密钥。对于 ACME 证明,此密钥属于已颁发证书身份的一部分。对于
DeviceInformation证明,此密钥由操作系统生成并在注册的生命周期内重复用于所有后续的DeviceInformation证明。操作系统从安全隔区请求硬件证明。它指定了已证明密钥、动态刷新码以及待证明属性。
安全隔区生成并返回新硬件证明。
操作系统将硬件证明发送到 Apple 证明服务器。
证明服务器验证请求后,要么拒绝颁发证明证书,要么生成仅包含其可确认属性和值的证明。证明证书的公钥与已证明密钥匹配。
操作系统向设备管理服务或 ACME 解决方案提供生成的证明证书。
有关验证所提供证明证书的更多信息,请参阅 Apple 开发者网站上的 Validating a Managed Device Attestation。
关于硬件证明
安全隔区在生成硬件证明时会包括以下及其他元素:
主板的标识符。
已证明密钥的公钥。
以下软件组件的哈希值(在启动过程中计算得出并储存在硬件寄存器中,类似于密封密钥保护):
安全隔区固件 (sepOS)。
附于 LLB 的 Image4 清单,该清单也包含所有其他系统配对固件的测量值。
操作系统 Image4 清单,该清单包含所有操作系统配对固件的测量值。
其他设备特定值,如 ECID 和 ChipID。
在 Mac 电脑上,LocalPolicy 的详细信息。
动态刷新码。
若安全隔区无法解开已证明密钥,则会拒绝生成硬件证明。这可确保已证明密钥与该特定安全隔区绑定,且所有其他已证明属性与该密钥关联。
所有此类元素均会编译到自定义二元结构并通过 UIK 签名。这会将硬件证明与 Apple 证明可验证的特定身份绑定,使其能够将请求与特定激活记录关联,进而与特定制造记录关联。
生成证明证书
Apple 的证明服务器在收到证明请求时会:
验证硬件证明的用户身份密钥 (UIK) 签名。若签名无效,则不会生成任何证明。
在 Apple 的激活记录中查找
ucrt(对应 UIK 的公钥)。若找不到ucrt,则不会生成任何证明。查找
scrt(对应设备的ucrt)。scrt是 Apple 服务器在制造期间基于芯片身份密钥 (SIK) 颁发的证书。SIK 由安全隔区生成,其公钥在制造期间从设备收集。SIK 在激活期间用于验证激活设备的安全隔区是否拥有私钥。SIK 在设备的生命周期内一直存在,并用作唯一标识符。使用scrt时,设备的制造记录会被检索。若找不到记录,则不会生成任何证明。验证硬件组件的标识符是否与制造记录匹配。若组件标识符与制造记录不匹配,则不会生成任何证明。
将动态刷新码拷贝到证明(若存在)。
若由证明请求:
比较软件组件的计算哈希值与版号记录中的已知哈希值。若有匹配值,官方版本号会插入到证明;否则,OID 会被忽略或其值为空。
构建 LLB、安全隔区或主操作系统的映像时,会计算哈希值并记录到版号记录数据库中,这些映像的官方版本号也会一并记录。
从 ECID 和 ChipID 计算 UDID。
将请求的 OID 值从 LocalPolicy 拷贝到证明中(若设备为 Mac)。
若证明服务器无法将设备识别为正品 Apple 硬件,则这些验证的实际结果不会生成任何证明。仅当证明服务器能够验证属性的值时,证明证书中的各个属性才会包括在内。动态刷新码属于例外情况,无需任何验证也会包括在内。