
LocalPolicy 签名密钥创建和管理
创建
出厂前首次安装 macOS 时,或执行联机抹掉-安装时,Mac 会运行来自临时恢复 RAM 磁盘的代码,以初始化默认状态。在此过程中,恢复环境会创建一对新的公钥和私钥,保存在安全隔区中。私钥称为所有者身份密钥 (OIK)。如果已存在任何 OIK,此过程中会将其销毁。恢复环境还会初始化用于激活锁的密钥,即用户身份密钥 (UIK)。该过程中有一部分是搭载 Apple 芯片的 Mac 所独有:当激活锁需要 UIK 认证时,过程中会包括一系列需要在验证时应用于 LocalPolicy 的限制。如果设备无法获取针对激活锁进行认证的 UIK(例如,由于设备当前与“查找我的 Mac”账户关联且报告为丢失),则无法继续进行 LocalPolicy 创建。如果已为设备颁发了用户身份证书 (ucrt),该 ucrt 中会包含由服务器实施的策略限制以及用户请求的策略限制(位于 X.509 v3 扩展项中)。
激活锁/ucrt
成功获取后,会储存在服务器端的数据库中,同时也会返回给设备。设备有了 ucrt 后,针对与 OIK 对应的公钥的认证请求会发送到基础证明机构 (BAA) 服务器。BAA 会使用来自 ucrt 的公钥来验证 OIK 认证请求,BAA 具有对储存该 ucrt 的数据库的访问权限。如果 BAA 能够验证此认证,它会通过返回由 BAA 签名且包含储存在 ucrt 中的限制的所有者身份证书 (OIC) 来认证该公钥。OIC 会被发送回安全隔区。从此以后,只要安全隔区为新的 LocalPolicy 进行签名,就会将 OIC 附加到 Image4 中。LLB 内建了对 BAA 根证书的信任,因此也会信任该 OIC,从而也会信任整个 LocalPolicy 签名。
RemotePolicy 限制
所有 Image4 文件(不只是 LocalPolicy)都包含 Image4 清单评估限制。这些限制使用叶证书中的特殊对象标识符 (OID) 编码。Image4 验证库在签名评估期间从证书中查找特殊证书限制 OID,然后通过机制评估在其中指定的限制。限制具有以下形式:
X 必须存在
X 必须不存在
X 必须具有特定值
因此,例如对于“定制化”签名,证书限制将包括“ECID 必须存在”;对于“全局”签名,限制将包括“ECID 必须不存在”。这些限制旨在确保给定密钥签名的所有 Image4 文件必须符合特定要求,以避免生成错误的已签名 Image4 清单。
对于每个 LocalPolicy,这些 Image4 证书限制称为 RemotePolicy。不同启动环境的 LocalPolicy 可存在不同的 RemotePolicy。RemotePolicy 用于限制 recoveryOS LocalPolicy,以确保在 recoveryOS 启动时只能像以“完整安全性”启动时一样的方式运行。由于可在 recoveryOS 启动环境中更改策略,这种方式提高了其完整性的可信度。RemotePolicy 会将 LocalPolicy 限制为包含生成 LocalPolicy 的 Mac 的 ECID,以及该 Mac 上安全储存组件中储存的特定远程策略随机数哈希值 (rpnh
)。只有在对“查找我的 Mac”和激活锁执行注册、取消注册、远程锁定和远程擦除等操作时,rpnh
才会发生更改,因此 RemotePolicy 也只能在这些情况下随之更改。RemotePolicy 限制在用户身份密钥 (UIK) 认证时确定和指定,并且登记到已颁发的用户身份证书 (ucrt) 中。某些 RemotePolicy 限制由服务器确定,如 ECID、ChipID 和 BoardID。此设计旨在防止一台设备为另一台设备的 LocalPolicy 文件签名。其他 RemotePolicy 限制可能由设备指定,以帮助防止在未同时提供访问当前 OIK 所需的本地认证以及与设备激活锁关联的账户的远程认证的情况下,对 LocalPolicy 进行安全性降级。