This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] [常见问题解答]对 SHA-1安全密钥进行编程的过程是什么?

Guru**** 2325430 points
Other Parts Discussed in Thread: BQ40Z50-R2
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/1178237/faq-what-is-the-procedure-to-program-the-sha-1-secure-key

主题中讨论的其他器件:BQ40Z50-R2

BQ40Z50-R4、BQ40Z50-R3和 BQ40Z50-R2可选择安全存储器位置进行 SHA-1认证。

要将 SHA-1密钥编程到安全存储器中、需要一个特定的命令序列。 对钥匙进行编程后、器件通过电源复位后无法擦除或重新编程。 如需更多信息、请在技术参考手册(TRM)中搜索 SHA1_SECURE 位。

SHA1安全密钥编程顺序:

  1.  如果器件处于 FW 模式、则发送 cmd 0x00以及数据0x0F00、以使器件进入 ROM 模式
    1. 为了使器件进入 ROM 模式、必须将其解封并处于完全访问模式。
  2. 设置地址0中的0x08位
    1. 设置地址:发送带 cmd 0x09的 SMB 写入字、数据= 0x00
    2. PEEK 数据:使用 cmd 0x0B 读取 SMB 读取字、 使用 LSB、忽略 MSB
    3. 或 LSB 为0x08 (即0x08 | LSB)
    4. POKE 数据:用 cmd 0x0A、data = 0x08 | LSB 发送 SMB 写入字
  3. 用数据0xC7插入地址2
    1. 设置地址:发送带 cmd 0x09的 SMB 写入字、数据= 0x02
    2. POKE 数据:用 cmd 0x0A、data = 0xC7发送 SMB 写入字
  4. 块写入20字节密钥 F 到命令 AuthWriteKeyF()
  5. 块写入20字节密钥 C 到命令 AuthWriteKeyC()
  6. 清除地址0中的0x08位
    1. 设置地址:发送带 cmd 0x09的 SMB 写入字、数据= 0x00
    2. PEEK 数据:使用 cmd 0x0B 读取 SMB 读取字、使用 LSB、忽略 MSB
    3. 从 LSB 清零位0x08
    4. POKE 数据:在清零位0x08后、用 cmd 0x0A 发送 SMB 写入字、DATA = LSB
  7. 用数据0x00来插入地址2
    1. 设置地址:发送带 cmd 0x09的 SMB 写入字、数据= 0x02
    2. POKE 数据:用 cmd 0x0A、data = 0x00发送 SMB 写入字

如果您不确定密钥编程开始时的状态、可按照以下额外步骤进行验证:

  1. 挑战
  2. 读取响应
  3. 如果响应是空白键响应、则继续编程
    1. 空白键响应:0x224FA0DFEEF27CD58F32805A70A3F99C0A902F99
  4. 如果响应是预期的密钥响应、则停止编程、该密钥已编程
  5. 如果响应是任何其他响应、则停止编程、存在另一个密钥、则无法擦除或重新编程该密钥。

要验证密钥:

计算发送到监测计的20字节密钥 F 的 SHA-1哈希值、按发送内容的相反字节顺序。 密钥 F 是最后8个字节。 键 C 使用相同的步骤。 最后一个密钥是附加到密钥 F 的密钥 C

示例:

如果通过 Authcmd WriteKeyF()为 KeyF 发送2309BDC0A9F86B69111CA850B530339111000C47 (小端字节序)

SHA-1哈希输入、用于查找 keyF:470C0011913330B550A81C11696BF8A9C0BD0923 (大端字节序)

SHA-1哈希输出:8877626BD64ABC4843E43F1E42C5413DB9EDBBA2

如果通过 cmd AuthWriteKeyC()为 KeyC 发送330C0014913530B550A81D10696BF8A9C7BD0613 (小端字节序)

SHA-1哈希输入、用于查找 keyC:1306BDC7A9F86B69101DA850B530359114000C33 (大端字节序)

SHA-1哈希输出:1B8689D48F55F5B5F81D30E012DFB96B7440433C

KeyF = 42C5413DB9EDBBA2、KeyC = 12DFB96B7440433C

SHA-1哈希输入可应对全0的挑战:

KeyF + KeyC +质询= 42C5413DB9EDBBA212DFB96B7440433C000000000000000000000000000000000000000000000000000000000000

响应:1625A385F7343679FD693D727BAC6EE47291D0B

第二个散列是附加到键的第一个散列的响应:

 KeyF + KeyC +来自第一个哈希的响应= 42C5413DB9EDBBA212DFB96B7440433C1625A385F7343679FD693D727BAC6EE47291D0B

响应:B0BEF440CAC492FAF09604A46C2C0996512331AF

此响应应与使用全0挑战后从监测计接收到的数据相对应。

 命令:

SMBus 命令

名称

SMBus 协议

说明

0x1b

AuthWriteKeyF

块写入。 块大小为20字节

写入 SHA-1拆分密钥的一半(64位)。 在使用 WritAutheKeyC 对拆分密钥的另一半进行编程之前、必须先对其进行编程。 一旦发出 WritAutheKeyC 并随后发出 POR、此位置就不可写入。

0x1c

AuthWriteKeyC

块写入。 块大小为20字节

写入 SHA-1拆分密钥的一半(64位)。 在使用此命令之后执行 POR 后、此位置不可写。

0x1d

AuthKeyChallenge

块写入。 块大小为20字节

向 SHA-1认证例程发送一个20字节质询代码。 该例程计算与编程的客户身份验证密钥对应的20字节质询响应。 在读取响应 cmd 之前、等待22ms 的时间来完成此命令。

0x21

响应

块读取。 块大小为20字节

返回上一个发出的质询消息的20字节响应代码。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果您对上述主题有任何相关问题、请使用"+提出相关问题"按钮创建新帖子。