为了更好地保护对器件的访问,电池电量监测计还可用于对主机进行认证(允许电池电量监测计更改安全状态),以及将电池电量监测计解锁(允许主机更新电池电量监测计)。为了执行此功能,主机必须首先对经授权公钥进行编程。当电池电量监测计处于“完全访问”状态时,必须通过将 30 个字节的压缩公钥发送到 MAC 子命令 0x0034 来写入公钥。必须读取该相同的命令,以确认当前编程的公钥用于主机认证。
如果没有编程的公钥,则使用旧的“安全密钥”解封操作。然而,一旦对公钥进行编程,旧的解封命令将被禁用。
注: 确保在编程后读取公钥,以确认该值已正确存储,然后再发送密封 (SEAL) 命令。如果没有相应的私钥,则无法恢复处于已密封 (SEALED) 状态的器件。
必须按照 图 5-1 图(使用 SMBus ManufacturerAccess()(MAC) 命令对电池电量监测计进行认证)执行该操作程序。
整个流程概述如下:
- 主机使用以下数据块之一发送带数据的 MAC 子命令 0x003a:
- 要请求解封 (UNSEAL) 访问操作,请使用数据块 0x14、0x04、0x72、0x36
- 要请求 FULL_ACCESS 访问操作,请使用数据块 0xff、0xff、0xff、0xff
- 主机使用 0x003a 读取 MAC 结果,以接收所生成的 8 字节质询代码。
- 主机将 8 字节质询和命令组合成一条消息,并使用私钥对消息进行签名,生成一个 30 字节 r 和 30 字节 s。
- 例如,如果电池电量监测计生成了质询 0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0,则要为解封 (UNSEAL) 操作签名的完整消息字符串为 0x12、0x34、0x56、0x78、0x9a、0xbc、0xde、0xf0、0x14、0x04、0x72、0x36
- 主机将生成的 r 和 s 写入电池电量监测计。
- ECC_R (0x003c) 子命令接受 30 字节 r 值或完整的 60 字节 r、s 值。
- ECC_S (0x003d) 子命令接受在将 r 值发送到电池电量监测计之后写入的 30 字节 s 值。
- 一旦测量仪同时具有 r 和 s,测量仪就会验证签名。
- 如果签名有效,则执行命令所请求的操作。
更详细的执行流程图如 图 5-2 所示。