要对映像签名,必须首先生成几个证书(每个证书都有自己的私钥)。这是一个手动过程,在配置Digi Embedded Yocto项目进行安全启动之前,必须先准备好PKI树。

每个证书都有不同的用途和名称:

  • CA(核证机关):该证书用于对SRK密钥进行签名,并确定其他密钥的作者。每棵PKI树只能有一个CA证书。此证书永远不会在目标上使用,并且没有要求。在生成所有这些密钥期间,可以使用现有证书作为CA。其余的密钥和证书总是生成,并且具有特殊要求,因为它们直接用于目标。

  • SRK(超级根密钥):用于对CSF证书和IMG证书进行签名。每个PKI树最多有四个SRK证书(每个证书用于签名一个CSF和一个IMG证书)。看到撤销密钥以获取有关拥有多个SRK证书的更多信息。

  • CSF(命令序列文件):此证书用于验证CSF区域。

    CSF区域是一个二进制blob,其中包含在签名过程中附加到二进制文件中的有关签名的技术信息(密钥大小、使用的算法等)。

  • IMG:该证书用于验证固件镜像本身。

    此证书也用于验证安全固件更新包(。swu文件)。

生成PKI (Public Key Infrastructure)树

  1. 下载并提取NXP代码签名工具(CST),并将其放在您的Digi Embedded Yocto安装目录下(默认情况下)/usr/local/dey - 3.2).请注意,您需要在恩智浦网站上注册。

  2. 如果您已经拥有想要用作CA的证书,请跳过此步骤。否则,创建一个纯文本文件serial.txt< CST_path > /钥匙文件夹中。该文件的内容必须是一个32位正数,唯一标识每个证书颁发机构的证书。

    < CST_path > /键/串行
    1234

    另外,创建一个纯文本文件key_pass.txt< CST_path > /钥匙文件夹中。该文件定义用于保护所有生成的私钥的密码(至少四个字符长)。该文件的内容是重复两次的密码:

    < CST_path > /键/ key_pass.txt
    my_pass_phrase my_pass_phrase
    用户负责保护私钥的密码短语以及私钥本身。丢失密码短语或私钥将导致无法使用受影响的密钥对代码进行签名。

    要自定义证书信息(公司名称、国家、电子邮件等),请编辑ca文件夹中。有关这些文件的更多信息,请参阅OpenSSL文档。

  3. 使用hab4_pki_tree生成PKI树。您将被问及以下参数:

    美元cd /usr/local/dey - 3.2 / -中科3.3.1/keys美元。/ hab4_pki_tree.sh(…)是否要使用现有的CA密钥(y/n)?:n Do you want to use Elliptic Curve Cryptography (ECC) (y/n)?: n Enter key length in bits for PKI tree: 4096 Enter PKI tree duration (years): 10 How many Super Root Keys should be generated? 4 Do you want the SRK certificates to have the CA flag set? (y/n)?:
    • 您可以使用现有的密钥作为CA密钥,方法是在第一个问题中回答“y”,然后提供不扩展证书的路径和用于CA的证书的密钥。

    • 如果被问及是否使用ECC加密,请回答“n”,因为签名使用的是RSA。

    • 密钥大小支持1024、2048和4096。

    • PKI的持续时间用于计算证书的截止日期。

      HAB没有考虑到期日。经过签名的U-Boot映像在其证书过期后仍然有效。
    • 您必须生成四个密钥(用于密钥撤销目的)。

    • 关于SRK中“CA标志”的最后一个问题必须回答为“y”。

此时,脚本创建了完整的PKI树。

有关PKI树和PKI树生成过程的更多信息,请参见医生目录中。

在Digi Embedded Yocto中使用的CST文件夹应该只包含一个PKI树,并且在任何子文件夹中不包含其他与安全相关的文件(密钥,证书,密码等)。尝试使用包含多个PKI树或额外证书或密钥的CST文件夹可能会失败。

把这句话加到你的local.conf文件以使用生成的密钥:

TRUSTFENCE_SIGN_KEYS_PATH=/ /键/路径