[RT-117x]Signing image with the HSM (SignServer)

在本文档中介绍如何使用sign server来对X-NAV的image进行签名。

1. PKI 体系

根据NXP-RT1176的secure boot的文档,https://app.gitbook.com/o/eTBeA3vhkOtihTJASkhd/s/tqiX1ZbXhRorHX3bwk1r/~/changes/13/rt1170_documents/rt-117x-i.mx-rt1170s-secure-boot

需要角色为:

  • root CA (用于公钥的认证) 对应PKI体系图中的CA

  • Level 1:Sign Server (在NXP中叫做SRK, super root key,二级证书)对应SRK1

  • Level 2: CSF signer(用于对CSF header签名)

  • Level2: IMAGE signer(用于对IMAGE签名)

需要给到车端的证书:

  • ca.crt文件 (1个)

  • srk.crt文件 (4个)

  • csf.crt文件(4个)

  • img.crt文件(4个)

其中4个srk.crt文件要组成列表计算hash放入eFUSE中,其中csf.crt和img.crt文件需要放入boot image的header中,其中ca.crt和srk.crt需要组成证书链用于image和csf的验签过程。

关于Key和Cert的生成要求,参见:https://github.com/carloscn/rt117x-bsp/blob/master/tools/flashprog/gen_ca_cert.sh

2. 签名要求

签名使用CMS_sign,参考:https://www.openssl.org/docs/man3.1/man3/CMS_sign.html

2.1 接口要求

使用SHA2_256作为digest,接口要求(抽象为下面的伪代码接口):

sign_request(srk_number, csf_or_img_signer, origin_sign_data):

输入参数:

  • srk_number: srk序列号(只有4个),在PKI体系图中对应SRK1-4

  • csf_or_img_signer:signer选择(只有2种),CSF signer或者IMAGE signer

  • original_sign_data:签名的二进制数据的原始数据,几个字节到几十兆不等,通常低于1MB。

输出参数:

注意CMS生成的二进制flags:

CMS_DETACHED | CMS_NOCERTS | CMS_NOSMIMECAP | CMS_BINARY;

这里有个sign的示例可以在这个工具中:

Not found

如何运行?

make

make sign

这里面分别有sign之前的数据和sign之后的数据。

2.2 签名验证

提供签名的验证工具,可以帮助你初步的快速的验证签名的数据。

make verify

3. NXP签名格式测试用例

以下为使用openssl命令行模拟NXP签名格式的测试用例(请注意参数):

最后更新于