乐鑫特权隔离机制 #4 | 用户应用程序的安全启动
乐鑫特权隔离机制 系列文章 #4
目录
安全启动 (Secure boot)
受保护应用程序的安全启动 (Secure boot for protected app )
用户应用程序的安全启动 (Secure boot for user app)
基于证书的验证方案 (Certificate-based verification scheme)
- 必要条件
- 验证过程
在上一篇文章中,我们演示了如何在乐鑫特权隔离框架中,独立地更新用户应用程序。简单来说,通过将受保护的应用和用户应用程序相互隔离,即可轻松实现对其中任意程序的独立更新。在这个框架下,为单个受保护的应用程序提供多个用户应用程序也成为可能,类似于应用程序的“应用程序商店”。然而,随着这些应用程序功能的日益丰富,提高其安全性的需求也随之增加。
本文中,我们将介绍“用户应用程序的安全启动机制”,该机制确保只有受信任和授权的用户应用程序,才能在设备上执行。
安全启动 (Secure boot)
安全启动流程可以确保仅有授权和受信任代码才能在设备上执行,常见的实现方法是通过构建“信任链”,即通过从一个受信任且无法更改的实体开始(例如硬件中的一次性可编程存储器),一步步构建完全值得信任的完整信任链。
使用乐鑫特权隔离框架的项目具有两类相互独立的应用程序二进制文件:受保护应用程序 (protected_app) 和用户应用程序 (user_app) ,可以独立完成更新。
乐鑫特权隔离框架可以为这两类应用程序提供安全启动流程,通过基于信任根的信任链,验证受保护应用和用户应用程序文件。
受保护应用程序的安全启动 (Secure boot for protected app )
受保护应用程序的安全启动遵循 ESP-IDF 中传统应用安全启动方案。

传统安全启动过程概述如下:
1. 芯片上电/复位时,ROM 引导加载程序开始执行。注意,这里的 ROM引导加载程序已经烧录在芯片中,无法改变,因此是可信的,将作为信任链的信任根。
2. ROM 引导加载程序在 flash 中查找有效的二级引导加载程序,如果找到,则使用 eFuse 中烧录的公钥哈希值,验证文件附加 RSA-3072 公钥。
3. 公钥验证完成后,继续使用经过验证的公钥验证整个二级引导加载程序文件的数字签名。如果数字签名验证成功,ROM 引导加载程序将二级引导加载程序加载到内存中,并开始执行。
4. 一旦二级引导加载程序开始执行,它就被视为受信任的实体。然后,二级引导加载程序将初始化系统,并尝试以类似的方式使用 eFuse 验证和加载受保护的应用程序。
更多详情,您可以查看 ESP-IDF 编程指南中的安全启动章节。
用户应用程序的安全启动 (Secure boot for user app)
如前所述,受保护应用程序和用户应用程序都可以独立开发,因此这两类应用程序的所有权可以属于不同单位,也就是说它们可能都需要单独的签名密钥。为了验证受保护应用程序,我们会在 eFuse 中烧录受保护应用程序公钥的哈希值,但出于节省 eFuse 内存的目的,并没有同样地烧录用户应用程序公钥的哈希值。
对此,我们特别为用户应用程序的安全启动设计了基于证书的验证机制。
基于证书的验证方案 (Certificate-based verification scheme)
在此方案中,受保护应用程序被视为受信任的应用程序,因此可以在受保护应用程序的固件中烧录一些信息,用于后续验证用户应用程序的真实性。
-
必要条件
采用该方案的受保护应用程序和用户应用程序必须满足一些条件。
受保护应用程序:
1. 受保护应用程序的所有者必须维护两组单独的 RSA-3072 私钥。一组用于对受保护的应用程序的固件进行签名,另一个用于创建 CA 证书。
2. 必须提供某种途径,允许用户应用程序开发人员获取签名证书。
3. 必须在其固件中嵌入 CA 证书。
用户应用程序:
1. 用户应用程序的所有者需要生成 RSA-3072 私钥,用于对用户应用固件进行签名,还用于生成证书签名请求(CSR)。
2. 必须将此 CSR 发送到受保护的应用程序 CA,并获取已签名的用户应用证书 (UAC)。
3. 必须使用 RSA-3072 私钥对固件签名。签名和用户应用证书必须随附在应用程序文件的末尾。
-
验证过程
该方案的验证流程如下:

1. 芯片复位时,ROM 引导加载程序将验证二级引导加载程序,然后验证受保护应用程序的RSA-3072 公钥,具体方式为:对比 eFuse 中烧录的 RSA 公钥哈希值与受保护应用程序文件末尾处附加的公钥哈希值。
2. 公钥验证完成后,继续使用经过验证的公钥验证受保护应用程序的 RSA-PSS 签名。如果验证成功,则可以将受保护的应用程序视为受信任的应用程序并允许启动。
3. 受保护应用程序启动后,会在 flash 中搜索有效的用户应用程序,如果找到,则将使用嵌入在受保护应用程序中的 CA 证书,来验证附加至用户应用程序文件末尾的用户应用证书 (UAC)。UAC 由受保护应用程序的 CA 私钥签名,因此可以通过 CA 证书中的 CA 公钥进行验证。
4. UAC 中包括相应用户应用程序签名密钥的公钥,一旦 UAC 通过受保护应用程序的验证,UAC 内部的公钥也可以被视为受信任。此后,受保护的应用程序使用此公钥,验证用户应用程序的 RSA-PSS 签名。
更多详情,您可以查看乐鑫特权隔离文档中的安全启动章节。
如有任何问题或反馈,欢迎随时在 GitHub 仓库中提交 issue。您可点此 乐鑫特权隔离机制 系列文章 查看往期,敬请期待后续的更多内容。
相关文章:
乐鑫特权隔离机制 #4 | 用户应用程序的安全启动
乐鑫特权隔离机制 系列文章 #4 目录 安全启动 (Secure boot) 受保护应用程序的安全启动 (Secure boot for protected app ) 用户应用程序的安全启动 (Secure boot for user app) 基于证书的验证方案 (Certificate-based verification scheme) 必要条件验证过程…...
剑指 Offer 46. 把数字翻译成字符串
摘要 剑指 Offer 46. 把数字翻译成字符串 一、递归算法解析 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。…...
tar命令——归档/压缩和解压缩文件
tar命令的功能是将一个或多个文件归档成一个文件,同时可结合gzip、bzip2和xz等压缩命令实现文件的压缩和解压缩。 tar 命令的语法格式如下: tar [选项] 文件或目录 常用选项如下: 选项作用/含义-c建立归档文件-x从归档文件中解出文件-z通…...
Softing smartLink网关——推进过程工业数字化转型
虽然在过程工业中各工厂所投入的运营时间千差万别,但仍需按照新标准来进行有效控制和管理,而这就需要使用一种能够聚合其异构数据的数字通信架构。对此,Softing提供了两种网关解决方案,可用于将过程工业通信架构集成到现有以太网系…...
Spark的常用算子
Spark的常用算子 目录内容Spark的常用算子一、转换算子(Transformation)二、行动算子(Action)三、键值对算子(PairRDDFunctions)四、文件系统算子(File System)Spark 内置算子是指 S…...
Unity Avatar Cover System - 如何实现一个Avatar角色的智能掩体系统
文章目录简介变量说明实现动画准备动画状态机State 状态NoneStand To CoverIs CoveringCover To Stand高度适配高度检测脚部IK简介 本文介绍如何在Unity中实现一个Avatar角色的智能掩体系统,效果如图所示: 初版1.0.0代码已上传至SKFramework框架Package…...
steam/csgo搬砖项目到底真的假的?
搬砖是从国外steam市场置办游戏装备回来,在国内网易buff售卖,低买高卖,产生利润的一个项目。 但我真正上手后,才知道steam是面向全球的游戏平台,用户真的大的夸张!!市场非常巨大,一…...
【Python笔记20230307】
基础 编码、解码 str.encode(utf-8) # 编码 str.decode(utf-8) # 解码关键字 import keyword keyword.kwlist格式化输出 % 占位符:%s 字符串%d 整数%f 浮点数Hello, %s % world Hi, %s, you have $%d. % (Michael, 1000000) 占位符的修饰符 -左对齐 .小数点后位数 0左边补零…...
SBOM应该是软件供应链中的安全主食
当谈到软件材料清单(SBOM)时,通常的类比是食品包装上的成分列表,它让消费者知道他们将要吃的薯片中有什么。 美国机构有90天时间创建所有软件的清单 同样,SBOM是一个软件中组件的清单,在应用程序是来自多个来源的代码的集合的时…...
[计算机组成原理(唐朔飞 第2版)]第一章 计算机系统概论 第二章 计算机的发展及应用(学习复习笔记)
第1章 计算机系统概论 1.1 计算机系统简介 1.1.1 计算机的软硬件概念 计算机系统由“硬件”和“软件”两大部分组成。 硬件 是指计算机的实体部分,它由看得见摸得着的各种电子元器件,各类光、电、机设备的实物组成如主机、外部设备等 软件 软件看不见…...
Python的数据分析相关的框架
Python特别强大,也是一款可以实现可数据分析语言,它有很多开源的库和工具,可以帮助数据科学家处理和分析数据。 以下是一些常用的Python库和工具: NumPy:NumPy是一个Python库,用于处理大型多维数组和矩阵&…...
为什么会出现植物神经紊乱 总是检查不出来该怎么办
植物神经紊乱是一种很多人都害怕的疾病,你们知道是为什么吗? 植物神经紊乱是一种神经系统失调导致的多种症状的总称,这种疾病是由于社会因素所诱发的脏器功能的失调,是一种非常复杂的疾病。而这种疾病是可能会发生在任何年龄阶段的…...
宏任务和微任务
JavaScript 把异步任务又做了进一步的划分,异步任务又分为两类,分别是: ① 宏任务(macrotask) 异步 Ajax 请求setTimeout、setInterval文件操作其它宏任务 ② 微任务(microtask) Promise.then…...
使用WebSocket、SockJS、STOMP实现消息实时通讯功能
客户端 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head><title>websocket client</title><script src"http://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.min.js"></script>…...
C++回顾(十一)—— 动态类型识别和抽象类
11.1 动态类识别 11.1.1 自定义类型 C中的多态根据实际的对象类型调用对应的函数 (1)可以在基类中定义虚函数返回具体的类型信息 (2)所有的派生类都必须实现类型相关的虚函数 (3)每个类中的类型虚函数都需…...
雷电模拟器安卓7以上+Charles抓包APP最新教程
一、工具准备: 证书安装工具全局代理工具下载: https://download.csdn.net/download/weixin_51111267/87536481 二、Charles设置 (一)电脑上证书安装 (二)安卓模拟器上系统证书安装(RooT权限打…...
vsvode 配置sftp,连接远程linux全过程
在本地安装sftp插件,配置参数https://blog.csdn.net/u011119817/article/details/106630599在linux机台安装vscode-service服务https://zhuanlan.zhihu.com/p/294933020连接超时,将配置文件添加超时时间遇到的错误处理:(272条消息) 【vscode插…...
C++类转换为蓝图、打印日志、蓝图关卡、删除C++文件
蓝图宏 UCLASS(Blueprintable)//c脚本可转换为蓝图 UPROPERTY(BlueprintReadWrite)//蓝图中可创建set,get节点 UFUNCTION(BlueprintCallable)//可创建函数节点 UPROPERTY(BlueprintReadWrite,Category”My Variables”)//节点进行分类打印日志 UE_LOG(LogTemp, Lo…...
elasticsearch高级篇:核心概念和实现原理
1.elasticsearch核心概念1.1 索引(index)一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母&#…...
部署安装Nginx服务实例
其他服务: 搭建zabbix4.0监控服务实例 普罗米修斯监控mysql数据库实战 Linux安装MySQL数据库步骤 一. Nginx概念介绍 1.介绍Nginx程序 Nginx (engine x) 是一款开源且高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。主要特点是占用…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
算法—栈系列
一:删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...
