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.

[参考译文] SK-AM62B-P1:将 KEYREV 从1递增到2

Guru**** 2463330 points
Other Parts Discussed in Thread: SK-AM62B-P1, TCA6424

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1477979/sk-am62b-p1-increment-keyrev-from-1-to-2

器件型号:SK-AM62B-P1
主题中讨论的其他器件: TCA6424

工具与软件:

您好!

我正在尝试将 SK-AM62B-P1开发板上的密钥版本从1递增到2。 器件已使用密钥进行编程(辅助密钥使用 TI 提供的虚拟主密钥、备用密钥由我生成用于测试)、并作为 HS-SE 器件运行。

我正在使用一个将 TCA6424配置为启用1.8V 编程电压的 R5F 程序、经过一段延迟后、我发送一个 TISCI 请求来更新 Keyrev。

我已经按照这里的说明生成了证书: https://software-dl.ti.com/tisci/esd/latest/2_tisci_msgs/security/otp_revision.html#sec-api-wr-keyrev-otp

生成第一个已签名证书、我将 模板用于主证书、并运行以下命令对证书进行签名:

openssl req -new -key SMPK.pem -config primary_cert.cnf -out primary_cert.csr
openssl x509 -req -in primary_cert.csr -signkey SMPK.pem -out primary_cert.pem -days 3650 -extensions v3_ca -extfile primary_cert.cnf

之后、我复制了辅助证书、并使用 shar512sum of primary_cert.pem 修改了 IMAGE_TEST_SHA512字段、并运行以下命令:

openssl req -new -key BMPK.pem -config secondary_cert.cnf -out secondary_cert.csr
openssl x509 -req -in secondary_cert.csr -signkey BMPK.pem -out secondary_cert.pem -days 3650 -extensions v3_ca -extfile secondary_cert.cnf

然后,我连接了两个文件,并使用"xxd -i"转储它们,以生成一个阵列,我可以导入到我的程序。

我使用以下代码来发送 TISCI 请求:

int32_t otp_set_keyrev2(void)
{
    int32_t status = SystemP_SUCCESS;
    Sciclient_ReqPrm_t  reqParam;
    Sciclient_RespPrm_t respParam;

    struct tisci_msg_set_keyrev_req request;
    struct tisci_msg_set_keyrev_resp response;

    request.value = 2;
    request.cert_addr_lo       = (uint32_t)final_certificate_pem;
    request.cert_addr_hi       = (uint32_t)(request.cert_addr_lo + final_certificate_pem_len);

    reqParam.messageType      = (uint16_t) TISCI_MSG_WRITE_KEYREV;
    reqParam.flags            = (uint32_t)TISCI_MSG_FLAG_AOP;
    reqParam.pReqPayload      = (const uint8_t *)&request;
    reqParam.reqPayloadSize   = (uint32_t) sizeof (request);
    reqParam.timeout          = (uint32_t) SystemP_WAIT_FOREVER;

    respParam.flags           = 0U; /* API will populate */
    respParam.pRespPayload    = (uint8_t *)&response;
    respParam.respPayloadSize = (uint32_t) sizeof (response);

    status = Sciclient_service(&reqParam, &respParam);

    if((SystemP_SUCCESS == status) && ((respParam.flags & TISCI_MSG_FLAG_ACK) == TISCI_MSG_FLAG_ACK))
    {
        DebugP_logInfo("Success writing Key REV\r\n");
    }
    else
    {
        DebugP_logError("Error writing Key REV!!! \r\n");
        status = SystemP_FAILURE;
    }

    return status;
}

我注意到 AM64的示例将 cert_addr_hi 设置为0。 我也尝试过、但编程仍然失败。

有人知道我在生成 KEYREV 请求时可能会做什么错误吗?

谢谢!

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

    您好!

    [报价 userid="615134" url="~/support/processors-group/processors/f/processors-forum/1477979/sk-am62b-p1-increment-keyrev-from-1-to-2 "]我注意到 AM64的示例将 cert_addr_hi 设置为0。 我也尝试过这种方法、但编程仍然失败。

    请仅将`cert_addr_hi`保留为0。

    问题可能源自生成的证书。 您能否使用以下脚本生成证书?

    https://github.com/TexasInstruments/tifs-mcu-common/blob/next/tools/boot/signing/dualCertGen.py#L1-L1

    该脚本在 AM64x MCU+ SDK 上下文中用于为 RUNTIME_KEYREV 示例生成双签名证书。

    github.com/.../runtime_keyrev.c

    此致、

    Prashant

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

    您好  Prashant:

    感谢您的答复。

    我成功地根据您的建议使用 dualCertGen 脚本并将 cert_addr_hi 设置为0来递增 keyrev。

    谢谢!