I.MX RT1170加密启动详解(4):OTFAD XIP加密运行代码

news2024/11/17 5:43:48

本节将介绍基于AES加密的OTFAD引擎,它可以在不影响AES-128-CTR性能的情况下实时解密数据。OTFAD包括对AES密钥展开机制的完整硬件支持,它可以解密最多4个唯一的AES上下文。每个上下文都有一个用户定义的128位的Image Encryption Key(IEK)、一个64位的计数器和1个64位的内存区域描述符(决定从哪个地址开始用IEK和计数器解密)。OTFAD key blob从image镜像中提取并被OTFAD解密,然后加载到OTFAD相应的寄存器中。

NXP提供了相关加密工具,通过AES密钥包装算法(RFC3394)将KEK(Key Encryption Key)包装为key blob。KEK可以保存在eFuse中(USER_KEY5),也可以由PUF(Physically Unclonable Function)保存。

密钥加密(key scrambling)

密钥加密是可选的特性,需要通过eFuse相关位使能,若没有使能,则KEK将被直接使用。OTFAD将输入的KEK加密,然后用于打开OTFAD key blobs。NXP工具使用KEK(128bit key)、Key sramble(32bit key)和Key sramble align(8bit key)来加密KEK

OTFAD XIP使能过程

在最终生产时,image需要由NXP工具进行签名,然后根据OTFAD上下文结构和KEK加密过后的OTFAD key blob生成加密image。其中IEKKEK都由用户定义,当打开Key scramble功能后,还需要给NXP工具提供key scramblekey scramble align两个输入。

OTFAD key blob保存在image中,它将被KEKscrambled KEK加密(基于RFC3394算法)。KEK必须写到USER_KEY5保险丝中,它是以大端格式保存的。

BootROM使能Encrypted XiP via OTFAD的条件:

  • eFuse的ENCRYPT_XIP_ENGINE (0x970[12])位被置0,表示使用OTFAD引擎
  • BOOT_CFG_1[1]为1 或 eFuse的The ENCRYPT_XIP_EN (0x940[1])为1

在这里插入图片描述
BootROM和Key Manager通过eFuse的设置来安装KEK以初始化OTFAD。OTFAD解析加密的OTFAD key blob然后根据AES上下文结构来初始化解密引擎,这样CPU和eDMA等系统设备可以获得解密后的数据。

  • PUF保存的方式参考AN13250 2.4.5/2.4.6

相关eFuse位

注意

  • 建议在生产时将eFuse中的USER_KEY5_RLOCK(if used)和OTFAD1/2_KEY_SEL_LOCK(保护OTFAD key)置位
  • eFuse的0xC70地址的0x47字使用了纠错码,所以必须同时设置所有需要的位。ENCRYPT_XIP_EN BOOT_CFG1 fuse的一部分,当它被设置的时候,所有的BOOT_CFG都必须对应设置好

在这里插入图片描述

总结

OTFAD可以解密包含最多4个AES上下文参数的OTFAD key blob,每个上下文都有一个用户定义的128位的IEK(Image Encryption Key)、一个64位的计数器和一个64位的内存区域描述符(从哪个地址开始用IEK和计数器解密)。OTFAD key blob会被KEK加密,KEK必须以大端格式写到USER_KEY5保险丝中。OTFAD key blob将被写入image相关字段中,然后由OTFAD解密并加载到四内存上下文编程模型寄存器中。

签名后的image还需要进行加密处理,根据OTFAD上下文结构和KEK加密的OTFAD key blob生成加密image。IEKKEK都由用户定义,如果使能了key scramble(KEK变为scramble KEK),还需提供额外的参数。

image由IEK加密,而IEK、计数器和内存区域描述符将被KEK加密为OTFAD key blob并保存在image的后面,用户需要把KEK以大端格式烧写到eFuse的USER_KEY5字段中。上电后,BootROM从eFuse中读取KEK并交给OTFAD,OTFAD解密OTFAD key blob得到IEK后便使用IEK边运行边解密image。

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

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

相关文章

uniapp的movable-view、movable-area

uniapp的movable-view、movable-area movable-view: 可以在页面中拖拽滑动必须在movable-area组件中,并且必须是直接子节点必须设置width和height属性,不设置默认为10px提供特殊事件:htouchmove和vtouchmove movable-area&#xf…

用于ECharts的全国省市区县乡镇街道级的行政区划边界数据(GeoJSON格式)

https://map.vanbyte.com 提供了免费的省市县3级行政边界数据(GeoJSON格式)、省市县乡4级联动数据。 至于行政区划边界数据的来源,网络上有各种教程。授人以鱼不如授人以渔,下面记录一下各类方法的具体步骤。 来源1:阿里云的数据可视化平台…

听劝 不要盲目的学网络安全。

听劝 不要盲目的学网络安全。 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发. 3.有时多 google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答. 4.遇到实在搞不懂的,可…

webpack-dev-server 不是内部或外部命令,也不是可运行的程序 或批处理文件

一、问题描述 webpack-dev-server 不是内部或外部命令,也不是可运行的程序 或批处理文件 出现上述问题 一般是node.js的版本不一致造成。 二、解决方法:换成低版本的node.js node.js换成12或11版本即可 2.1.先卸载高版本node.js 在控制面板中卸载node.js,并删除安…

【算法】常见的加密算法及实现

文章目录 前言1. 数字签名2. 加密和解密2.1. 加密2.2. 解密 3. 对称加密和非对称加密3.1. 对称加密3.2. 非对称加密 4. 常见的签名加密算法4.1. MD5算法4.2. SHA1算法4.3. HMAC算法4.4. AES/DES/3DES算法4.4.1. DES算法4.4.2. 3DES算法4.4.3. AES算法 4.5. RSA算法4.6. ECC算法…

hbase简介与安装

Hbase简介 HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Had…

安装Linux-SUSE操作系统

文章目录 一、安装Linux-SUSE系统1、环境准备2、SUSE 镜像的下载2.1、下载企业服务器2.2、ARM和桌面的ISO 3、安装SUSE4、配置本地 yum 源5、SUSE常用安装命令6、在 SUSE系统上安装mysql数据库步骤:7、破解SUSE系统root密码 一、安装Linux-SUSE系统 1、环境准备 操…

7月蓄势待发,2023上海内部物流展,预登记全面启动!

观众预登记通道现已全面开放 展会时间 2023年7月5日 9:00-17:00 2023年7月6日 9:00-17:00 2023年7月7日 9:00-15:00 展会地点 上海新国际博览中心(浦东新区龙阳路2345号) 同期展会 2023上海国际AGV机器人产业展 2023上海国际电商物流包装产业展 2…

外包干了4年,今天分手了...

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

gcc-g++使用编译链接理解

在讲gcc/g使用之前我们先讲一下背景,编译链接 编译链接我们之前讲过一次,但是这里在深入理解一下编译链接,以及我们看一下现象 编译链接 首先,编译链接可以分为四步: 1.预处理 2.编译 3.汇编 4.链接 预处理 我…

java Stream流

体验Stream流 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素把集合中所有以"张"开头的元素存储到一个新的集合把"张"开头的集合中的长度为3的元素存储到一个新的集合遍历上一步得到的集合 public class MyS…

NDK环境变量配置及Jni生成so文件

1、通过AndroidStudio下载NDK和Cmake之后,需要在系统环境变量中进行NDK的配置,如下 (1)、NDK_HOME : D:\SDK\Sdk\ndk\22.1.7171670 (2)、将%NDK_HOME%同时添加到Path中 2、在AndroidStudio的File->Project Structure->SDK Location中选择ndk&…

Linux Shell_cut命令(按列提取文本字符)

linux cut命令(按列提取文本字符) cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的 语法格式 cut [-bn] [file] 或 cu…

2023届-SLAM算法校招面经

23年6月初终于尘埃落定,今年受大环境影响,这一路可以说是步履维艰,我的投递的行业主要面向机器人和自动驾驶,投递岗位大部分是算法工程师,其中也包括C开发和少量的测试岗,在面试过程中加深了对车企、自动驾…

15天学会EasyX 第1天:EasyX的下载与配置安装

本文为山城瑞宝创作,转载请标注版权! 本文所指的编译器为Dev-c,如果有任何问题请私信我。 如果是使用VS的伙伴,直接去官网一键安装就可以了(会略讲)。 EasyX官网地址:https://easyx.cn/ 目录 …

【模块七----面向对象基础部分】

面向对象基础部分 面向对象的编程思想介绍: 一 、类和对象:1.1类:创建对象前必须先有类的存在类和对象的关系:类的组成:属性行为类的创建实例: 1.2 对象:对象的创建格式:使用对象的成…

新来的00后这么猛,这薪资我看了都吓一跳,这是正常人吗?

2023年很卷吗?不,只能说你还得学! 都说00后已经躺平了,但是有一说一,该卷的还是卷! 这不,前段时间我们公司新招来了一个00后小伙,工作都没2年,跳槽到我们公司就起薪18K&…

MarkDown的基本使用方法

为了给官方的文档知识总结:Markdown 基本语法 | Markdown 官方教程 #空格内容:‘#’表示标题的等级,越少表示标题级别越高(字越大) 在一行的末尾加两个或多个空格再回车,就是我们普通的文本回车。【还有一…

FreeRTOS基础学习

一、学习资源: 1、正点原子免费教学视频: 原子哥,专注电子技术教学 2、FreeRTOS官方网站: FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions 3、PPT与源码…

Node.js+vue多用户个人博客网站i03nz

基于nodejs语言设计并实现了个人博客。该系统基于B/S即所谓浏览器/服务器模式,应用Vue框架,选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、文章分类管理、博客文章管理、留言板管理、系统管理等功能模块。要循序渐进,心急…