I.MX RT1170加密启动详解(1):Encrypted Boot image组成

news2024/9/28 12:38:22

使用RT1170芯片构建的所有平台一般都是高端场合,我们需要考虑软件的安全需求。该芯片集成了一系列安全功能。这些特性中的大多数提供针对特定类型攻击的保护,并且可以根据所需的保护程度配置为不同的级别。这些特性可以协同工作,也可以独立工作。它们还可以与适当的软件集成以创建防御层。此外,该芯片还包括一个通用加速器,可增强选定的工业标准加密算法的性能。

从本篇文章开始,我将介绍RT1170的三种加密方式:Authenticated HABHAB encrypted bootOTFAD XIP的原理。


对于I.MX系列单片机来说,它的芯片内没有内置Flash,这种情况下需要我们外挂Flash。那么在这种情况下,NXP就为I.MX系列单片机设计了一个镜像头,这个镜像头中包含了程序的绝对地址、程序的大小、DCD初始化参数、程序入口地址等信息。

  • 参考文章:RT1170启动详解:Boot配置、Bootable image头的组成

NXP设计了一个ROM Bootloader程序,在每次上电时它将根据镜像头中我们配置的信息完成一些存储外设的初始化、代码的转移和运行等工作,然后跳转执行。在这个镜像头中,有一部分的信息是用来给程序加密启动的。

所以本篇文章以FlexSPI NOR Flash为例,介绍在加密启动时,这个镜像头中的一些加密字段的含义。如下图所示,就是整个加密镜像头的组成:
在这里插入图片描述
其中OTFAD/IEE Key blobs,PUF Key Store,CSFDEK Blob为在安全启动时需要填入的字段。

(1)OTFAD/IEE Key blobs

该字段用来给OTFAD/IEE模块对NOR Flash上的代码进行边解密边执行,包含用于OTFAD/IEE的加密密钥和上下文结构,它仅适用于FlexSPI NOR XIP情形,且该blob必须放置在NOR的0地址处

(2)Firmware Configuration Block(FCB)

包含FlexSPI控制器配置的参数,BootROM中将用低频的时钟和可靠的参数对Flash进行初始化,用户可以将适合自己Flash的FlexSPI配置(主要是LUT表格)按照指定格式放在此字段,BootROM会根据这个字段的配置重新初始化Flash。

(3)Physical Unclonable Function(PUB) key store

包含用于OTFAD key blob解密的KEK(Key Encryption Key) 。

(4)IVTboot data

确定程序的加载地址、运行地址、DCD位置等信息

(5)Device Configuration Data(DCD)

主要用来配置SEMC接口的SDRAM,也可以用来配置FlexSPI接口的HyperRAM。

(6)Command Sequence File(CSF)

由HAB处理的用于代码认证的指令,包括公钥、签名、证书和Auth。

(7)Data Encryption Key blob(DEK)

DEK通过SNVS(Secure Non-Volatile Storage) master key(OTP Master Key)加密后形成的blob

  • DEK为AES128密钥,由HAB加密工具CST随机生成,Flashloader会使用OTPMK加密DEK生成key blob

本文对加密镜像头中的加密部分做了一个简单的介绍,但没有深入进行介绍,不过没关系,我们只要知道在镜像头中有一些有关加密的字段,每个字段的具体含义在后续介绍了各个不同加密方式后再回来看就会恍然大悟。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/586605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python中的区间:什么是区间(Interval),如何使用区间

Python 中的区间:什么是 区间(Interval),如何使用区间 在Python中,区间(Interval)是一个广泛使用的数据结构,用于表示一段连续的数据范围。使用区间可以更方便地处理各种数据类型&a…

本地搭建CFimagehost私人图床【公网远程访问】

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测…

代码随想录算法训练营第四十一天 | 力扣 343. 整数拆分, 96.不同的二叉搜索树

343. 整数拆分 题目 343. 整数拆分 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 解析 1.确定dp数组(dp table)以及下标的…

史上最详细的使用Claude和接入Claude-api教程

是什么(What) Claude 是最近新开放的一款 AI 聊天机器人,是世界上最大的语言模型之一,比之前的一些模型如 GPT-3 要强大得多,因此 Claude 被认为是 ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研…

Java制作520表白代码——爱一个人需要理由吗?

✨博主:命运之光 ✨专栏:Java经典程序设计 520表白日,每个人都期待着浪漫的表白,而作为一名热爱编程的程序员,我决定用程序员的方式来向你表达我的爱意。 在2023年5月20日这个特殊的日子里,我要用一段特别的…

BM1684X-onnx模型转化为bmodel

1:在tpu-mlir目录下进入docker docker run --privileged --name tpu-mlir -v $PWD:/workspace -it sophgo/tpuc_dev:v2.2 原因:该镜像已创建,要么重新创建一个新进程,要么杀死老进程; 解决办法如下: 2:接着…

夜深人静学32系列17——OLED

夜深人静学32系列17——OLED OLED简介接口定义OLED驱动原理驱动函数OLED.COLED.HCubeMX配置 实战部分效果展示驱动代码 OLED简介 LED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机激光显示(Organic El…

基于YOLOV5的道路损伤(GRDDC‘2020)检测

1. GRDDC2020 数据集介绍 GRDDC2020 数据集是从印度、日本和捷克收集的道路图像。包括三个部分:Train, Test1, Test2。训练集包括带有 PASCAL VOC 格式 XML 文件标注的道路图像。 缺陷类型:D00、D01、D11、D10、D20、D40、D43、D44、D50、D0w0…

Otsu阈值法原理及实现

文章目录 Otsu算法简介Otsu 算法的逻辑源码实现 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 Otsu算法简介 Otsu阈值法发表于1979年,论文为A threshold selection method from gray level histograms,作者是日本东京大学的…

序列模型基础概念

一、公式定义 在时间 t t t观察到 x t x_{t} xt​,那么得到 T T T个不独立的随机变量 ( x 1 , . . . , x T ) − p ( X ) (x_{1},...,x_{T})-p(X) (x1​,...,xT​)−p(X) 由条件概率公式: p ( a , b ) p ( a ) p ( b ∣ a ) p ( b ) p ( a ∣ b ) p(a,…

chatgpt赋能python:Python中局部变量的介绍

Python中局部变量的介绍 在Python中,局部变量是在函数中定义的变量,其范围限制在该函数内部。每当函数被调用时,局部变量将被创建并且只在函数的执行期间存在。当函数执行结束时,局部变量将被销毁。 局部变量是在函数内部定义的…

代码随想录算法训练营第四十六天 | 力扣 139.单词拆分

139.单词拆分 题目 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 解析 1.确定dp数组以及下标的含义 …

Windows上GIT配置文件的位置

Git作为常见的版本控制系统。在Windows上,我偶尔在CLI上使用官方的版本: Git for Windows 。本文简单介绍Windows下的git配置文件。 系统和全局的gitconfig 配置文件因环境而异(Windows 原生的cmd、Windows shell 或 MSYS2 shell)…

chatgpt赋能python:Python中如何取消列表

Python中如何取消列表 在Python中使用列表是一种非常常见的数据结构,它允许我们在其中存储任意数量的元素,并且可以非常容易地进行遍历和操作。但是,有时候我们需要从列表中删除元素。这个过程并不难,但是有些细节需要注意。本文…

写最好的Docker安装最新版MySQL8(mysql-8.0.31)教程(参考Docker Hub和MySQL官方文档)

一、前言 MySQL官方安装包下载地址:   https://dev.mysql.com/downloads/mysql/   Docker Hub官方网址:   https://hub.docker.com/ 如果需要了解Centos7下MySQL5.7最新版的安装部署,可参考教程【最新MySQL-5.7.40在云服务器Centos7.…

《深入理解计算机系统(CSAPP)》第9章虚拟内存 - 学习笔记

写在前面的话:此系列文章为笔者学习CSAPP时的个人笔记,分享出来与大家学习交流,目录大体与《深入理解计算机系统》书本一致。因是初次预习时写的笔记,在复习回看时发现部分内容存在一些小问题,因时间紧张来不及再次整理…

chatgpt赋能python:Python中对列表求和-一篇全面介绍和使用建议的SEO文章

Python中对列表求和 - 一篇全面介绍和使用建议的SEO文章 什么是Python中的列表? 在Python中,列表(List)是一种非常有用的数据结构,它是一组有序的元素集合。列表能够存储多个元素,每个元素都可以是不同的…

Ubuntu20.04安装VMware player16.2.4,不弹出安装界面的问题

1.先在官网上下载VMware player16.2.4进行下载,Ubuntu20.04对VMware player16.2.4进行安装 2.安装完成后,应该会有如图下的弹窗界面,但是我没有 解决方法: 点击Ubuntu的VMware player的程序图标,弹窗报错:"Comma…

【Leetcode60天带刷】day03链表——203. 移除链表元素,707.设计链表,206. 反转链表

链表基础知识: 链表就像一串小火车,有一节一节的车厢,每个车厢都叫做一个节点。 单链表:每个链表车厢里有两个内容,一个放的是真正的数据,另一个放的是下一节车厢的编号。 双链表:每个链表车厢里有三个内…

chatgpt赋能python:如何在Python中取消换行?

如何在Python中取消换行? 如果你是一名经验丰富的Python工程师,你一定会遇到在输出过程中需要取消换行的情况。在本文中,我将告诉你如何使用Python取消换行。 什么是换行? 在计算机编程中,换行是指在输入文件或者输…