I.MX RT1170加密启动详解(3):HAB加密启动原理

上一节使用对镜像进行签名认证,这可以防止镜像被篡改。但我们还是希望Flash中的程序不会被别人看到,所以这就需要加密启动了。

1 HAB加密启动流程

如下图所示就是HAB加密启动的整个流程:

  • HAB加密启动仅适用于non-XIP的情况
    在这里插入图片描述

NXP提供了一个CST(Code Signing Tool)工具,它可以生成一个称为DEK(Data Encryption Key)的随机密钥,实际上DEK就是一个基于AES-CCM 128/192/256bit的对称密钥,它用来加密和解密镜像。

如何保存DEK
DEK用于对镜像进行加解密,所以我们需要将它保存下来供MCU获取,但也不能随便被用户得到。NXP将OTPMK(eFuse中出厂预烧录的每个芯片都唯一的密钥)作为SNVSDEK通过SNVS密钥加密为DEK Blob保存在image镜像最后的DEK blob字段。如下图所示
在这里插入图片描述
在上电之后,BootROM通过SNVS解密DEK Blob来得到DEK,然后通过DEK解密镜像获得原始bin文件,然后拷贝到RAM中运行。所以这种方法仅适用于non-XIP的方案。

2 扩展知识: DCP和SNVS

DCP(Data Co-Processor)即通用数据协处理器,它可以完成CRC32、SHA、AES等算法。对于AES算法来说,实现了明文数据到密文数据的转化,中间的数据迁移由DCP内部集成的memcopy功能实现。

对于加解密而言,一个重要的特性就是密钥管理,DCP的AES-128密钥的来源有四种:
1、SRAM-baser keys:用户自定义的存放于SRAM中的密钥,最终写入DCPKEY_DATA寄存器中,最多4组
2、Payload key:用户自定义的跟加解密数据放在一起的密钥,操作时由DCP解析
3、eFuse SW_GP2 key:烧录到eFuse SW_GP2区域的密钥
4、SNVS Master Key:芯片出厂时预订的唯一密钥,密钥值无法获知,DCP可以通过内置途径获得
SNVS(Secure Non-Volatile Storage)提供一个独特的Master Key给DCP模块,这个Master key的一种产生方式为

OTPMK,即eFuse里出厂预烧录的且每个芯片唯一的OTPMK(256bit),它不可以被软件访问。
DCP模块的驱动在SDK_2_12_1_MIMXRT1170-EVK\middleware\mcu-boot\src\drivers\dcp,分为两个函数:

DCP_AES_EncryptEcb()用于加密、DCP_AES_DecryptEcb()用于解密。

OTFAD加密使用SNVS Master Key的前提条件是设置eFuse SEC_CONFIG[1:0]设为2’b10(Hab Close),且在调试状态下无法获取。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tilblackout

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值