0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HAB boot的启动流程与实现步骤

我快闭嘴 来源:MCU频道 作者:MCU频道 2022-08-12 09:39 次阅读

问题简介

在《深扒HAB boot 启动安全性》中,小编介绍了HAB boot的启动流程(如图1所示),其中的1、2、3验证步骤本质上就是验签过程。

2ac58412-1971-11ed-ba43-dac502259ad0.png图1

验签过程在公钥可信的情况下,可用于检测数据的完整性(Integrity),身份认证(Authentication)和不可否认(Non-repudiation/Undeniable),而hab4_pki_tree.sh和hab4_pki_tree.bat脚本又保证生成的公钥与私钥对,证书是可信的,所以能“完美闭环”,使得HAB boot的安全性得到保证。

在应用手册AN12079中,介绍了实现HAB boot的步骤,大致可分为:

  • 生成证书与密钥
  • 对bootable image进行签名
  • 打包签名后的bootable image生成SB文件

签名过程需借助elftosb工具和BD文件,其中BD文件包含了实现签名的命令,

options{
flags=0x08;
startAddress=0x60000000;
ivtOffset=0x1000;
initialLoadSize=0x2000;

entryPointAddress=0x60004645;
}

sources{
elfFile=extern(0);
}

constants{
SEC_CSF_HEADER=20;
SEC_CSF_INSTALL_SRK=21;
SEC_CSF_INSTALL_CSFK=22;
SEC_CSF_INSTALL_NOCAK=23;
SEC_CSF_AUTHENTICATE_CSF=24;
SEC_CSF_INSTALL_KEY=25;
SEC_CSF_AUTHENTICATE_DATA=26;
SEC_CSF_INSTALL_SECRET_KEY=27;
SEC_CSF_DECRYPT_DATA=28;
SEC_NOP=29;
SEC_SET_MID=30;
SEC_SET_ENGINE=31;
SEC_INIT=32;
SEC_UNLOCK=33;
}

section(SEC_CSF_HEADER;
Header_Version="4.2",
Header_HashAlgorithm="sha256",
Header_Engine="DCP",
Header_EngineConfiguration=0,
Header_CertificateFormat="x509",
Header_SignatureFormat="CMS"
)
{
}

section(SEC_CSF_INSTALL_SRK;
InstallSRK_Table="............Users
xa07025secure_provisioning000000000000000000000000000gen_hab_certsSRK_hash.bin",
InstallSRK_SourceIndex=0
)
{
}

section(SEC_CSF_INSTALL_CSFK;
InstallCSFK_File="............Users
xa07025secure_provisioning000000000000000000000000000crtsCSF1_1_sha256_2048_65537_v3_usr_crt.pem",
InstallCSFK_CertificateFormat="x509"
)
{
}

section(SEC_CSF_AUTHENTICATE_CSF)
{
}

section(SEC_CSF_INSTALL_KEY;
InstallKey_File="............Users
xa07025secure_provisioning000000000000000000000000000crtsIMG1_1_sha256_2048_65537_v3_usr_crt.pem",
InstallKey_VerificationIndex=0,
InstallKey_TargetIndex=2)
{
}

section(SEC_CSF_AUTHENTICATE_DATA;
AuthenticateData_VerificationIndex=2,
AuthenticateData_Engine="DCP",
AuthenticateData_EngineConfiguration=0)
{
}


section(SEC_SET_ENGINE;
SetEngine_HashAlgorithm="sha256",
SetEngine_Engine="DCP",
SetEngine_EngineConfiguration="0")
{
}

section(SEC_UNLOCK;
Unlock_Engine="SNVS",
Unlock_features="ZMKWRITE"
)
{
}


在运行类似下面的命令后,bootable image的组成会有如图2所示的变化。

./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec
2aeb1498-1971-11ed-ba43-dac502259ad0.jpg图2

在仔细查看BD文件后,我们会发现里面有加载SRK公钥,IMG1和CSF1证书等命令,却没有了关于私钥的相关命令?那么私钥是如何参与bootable image的签名过程的呢?

私钥在哪里?

图3的左边部分表示elftosb.exe执行如下命令后,首先application和CSF(Command Sequence File)会进行Hash运算生成摘要,跟着私钥会对其加密生成签名。

./elftosb.exe-fimx-V-cimx-flexspinor-normal-signed.bd-oivt_application_signed.binled_demo_evk_flexspi_nor_0x60002000.srec
2b10134c-1971-11ed-ba43-dac502259ad0.jpg图3

那么elftosb.exe是从哪里加载私钥的呢?答案就是在与证书所处文件夹crts同一层目录下的keys文件夹中,且elftosb.exe会加载与BD文件中的公钥证书所对应的私钥文件,比如上述BD文件的公钥证书是CSF1_1_sha256_2048_65537_v3_usr_crt.pem和IMG1_1_sha256_2048_65537_v3_usr_crt.pem,那么对应的私钥文件就是CSF1_1_sha256_2048_65537_v3_usr_key.pem和IMG1_1_sha256_2048_65537_v3_usr_key.pem,当然,你也可以移除keys文件夹来进行验证。

2b3281ac-1971-11ed-ba43-dac502259ad0.png图4

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Boot
    +关注

    关注

    0

    文章

    149

    浏览量

    35778
  • 启动流程
    +关注

    关注

    0

    文章

    14

    浏览量

    6466

原文标题:消失的私钥-HAB boot

文章出处:【微信号:MCU频道,微信公众号:MCU频道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    u-boot启动流程分析

    今天给大家全面的分析一下u-boot启动流程。整理这篇文章花费时间较长,中间很长时间未更新,希望这篇文章对大家有所帮助。
    发表于 07-12 15:16 750次阅读
    u-<b class='flag-5'>boot</b><b class='flag-5'>启动</b><b class='flag-5'>流程</b>分析

    U-BOOT启动流程分享

    Bootloader移植(下)U-BOOT 启动流程u-boot启动三个2启动
    发表于 01-18 10:17

    U-boot的完整启动流程是怎样的?

    U-boot的完整启动流程是怎样的?
    发表于 03-03 06:18

    为什么U-boot显示的HAB事件数据不符合HAB的数据表?

    HAB 状态:0x00 u-boot=> hab_status安全启动已禁用HAB 配置:0x00,H
    发表于 03-16 07:42

    i.MX8M Mini安全启动HAB错误怎么解决?

    ,是 imx8mm-evk-qca-wifi 机器)。我已经到达步骤 1.8“验证 HAB 事件”。我执行hab_status命令,但出现 HAB 错误: U-
    发表于 03-28 08:35

    IMX8M没有HAB事件,而SRK_HASH未定义是为什么?

    我正在 IMX8M 上试验 HAB,我正在使用我想在启动时验证的 U-boot 映像。HAB 激活后,hab_status命令会生成 4 个
    发表于 04-03 07:26

    如何在imx6q实现HAB

    大家好, 目前我在 imx6q 板上工作。试图在其中实现 HAB,所以我在 u-boot 的配置文件中总结了 CONFIG_IMX_HAB 。使用 CST 工具创建签名的 u-
    发表于 04-04 08:44

    imx6q安全启动HAB错误的原因?

    大家好, 我正在使用 imx6q 设备来实现安全启动。我已经签署了 u-boot 并按照以下步骤操作。但是出现 6 个错误..安全启动已禁用
    发表于 04-06 06:49

    嵌入式U-BOOT启动流程及移植

    摘要:嵌入式系统一般没有通用的bootloader,u-boot是功能强大的bootloader开发软件,但相对也比较复杂。文中对u-boot启动流程作了介绍,详细给出了u-
    发表于 02-25 16:00 59次下载

    串行SPI Nor Flash启动流程

    关于外部Flash的代码安全问题和代码在外部执行对整个系统性能的影响,RT105x的加密启动HAB)功能和32KB的L1 ICache/DCache是可以解决的,只是本文先从RT105x的启动
    的头像 发表于 03-16 09:32 2.1w次阅读
    串行SPI Nor Flash<b class='flag-5'>启动</b><b class='flag-5'>流程</b>

    AURIX™ TC3xx启动流程详解

    本文首先介绍整个启动流程的概况,接着分别介绍了firmware启动流程boot mode的配置,以及用户程序
    的头像 发表于 06-06 10:31 3513次阅读
    AURIX™ TC3xx<b class='flag-5'>启动</b><b class='flag-5'>流程</b>详解

    Spring Boot启动 Eureka流程

    在上篇中已经说过了 Eureka-Server 本质上是一个 web 应用的项目,今天就来看看 Spring Boot 是怎么启动 Eureka 的。 Spring Boot 启动 E
    的头像 发表于 10-10 11:40 850次阅读
    Spring <b class='flag-5'>Boot</b><b class='flag-5'>启动</b> Eureka<b class='flag-5'>流程</b>

    安全启动Secure Boot流程

    安全启动-Secure Boot 除了NSPE和SPE两个环境的沟通流程之外,secure boot也是Trusted Firmware很重要的设计环节。 Secure
    的头像 发表于 11-02 16:45 1316次阅读
    安全<b class='flag-5'>启动</b>Secure <b class='flag-5'>Boot</b><b class='flag-5'>流程</b>

    启动(Cold boot流程及阶段划分

    restart--冷启动 reset--热启动 ATF冷启动实现分为5个步骤: • BL1 - AP Trusted ROM,一般为Boot
    的头像 发表于 11-07 15:17 2084次阅读
    冷<b class='flag-5'>启动</b>(Cold <b class='flag-5'>boot</b>)<b class='flag-5'>流程</b>及阶段划分

    springboot启动流程

    。 Spring Boot启动流程可以分为以下几个步骤:初始化启动环境、加载自动配置类、创建 Spring 上下文、
    的头像 发表于 11-22 16:04 630次阅读