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

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

3天内不再提示

secure boot相关的基本概念和框架

我快闭嘴 来源:嵌入式与Linux那些事 作者:嵌入式与Linux那些 2022-09-13 14:20 次阅读

什么是secure boot

secure boot是指确保在一个平台上运行的程序的完整性的过程或机制。secure boot会在固件和应用程序之间建立一种信任关系。在启用secure boot功能后,未经签名的固件或程序将不能运行在该设备上。

通过这种方式,可以保护操作系统免受恶意攻击。secure boot一般使用公钥/私钥来验证固件和应用程序的签名是否合法。

为什么需要secure boot

嵌入式设备启动一般从bootrom开始,逐级加载spl,uboot,linux,应用程序。

该流程中由bootrom开始,逐级通过spl、uboot以启动linux操作系统。

我们假设spl、uboot和linux镜像都被保存在flash上,则在启动时,各级启动程序都需要从flash中加载下一级启动镜像,其流程示意图如下:

b7b92474-331a-11ed-ba43-dac502259ad0.png

如果以上流程未执行secure boot,则flash中的镜像一旦被恶意攻击者替换掉,那么最终系统上将会运行被攻击者篡改过的固件。

假设linux和rootfs被替换掉以后,那么启动后整个系统都将掌握在攻击者的手里。从而导致在操作系统之上构建的所有安全机制都形同虚设。

secure boot预备知识

安全级别

b7d64ab8-331a-11ed-ba43-dac502259ad0.png

ARMv8分为Secure World和Non-Secure World(Normal World),四种异常级别从高到低分别为EL3,EL2,EL1,EL0。

EL3具有最高管理权限,负责安全监测和Secure World和Normal World之间的切换。

EL2主要提供了对虚拟化的支持。

EL1是一个特权模式,能够执行一些特权指令,用于运行各类操作系统,在Secure World则是secure OS(如TEE)。

EL0是无特权模式,所有APP应用都在EL0。

启动流程

b7f859aa-331a-11ed-ba43-dac502259ad0.png

上图中的BL1,BL2,BL31,BL32,BL33分别对应如下功能:

BL1

BL1是信任链的根所在,一般是固化在芯片内部的一段代码,叫做bootrom,具有最高的执行权限EL3,在 CPU 出厂时就被写死了。

bootrom通常会被映射到它专属的一块内存地址中,但是如果你尝试向这块地址写入内容,一般都会出错。

芯片上电或复位后,bootrom的代码会从固定位置加载BL2来初始化sram,在BL2 验签通过后会跳转到BL2 ,以保证可信任执行。

BL2

BL2和BL1一样,也是运行在EL3特权级别的,不同的是BL2在flash中的一段可信安全启动代码,它的可信建立在BL1对它的验证,主要完成一些平台相关的初始化,比如对ddr的初始化等。

在完成初始化后寻找BL31或者BL33进行执行;如果找到了BL31则不会继续调用BL33,如果没有BL31则BL33必须有。

BL31

BL31作为EL3最后的安全堡垒,它不像BL1和BL2是一次性运行的。如它的runtime名字暗示的那样,它通过SMC指令为Non-Secure持续提供设计安全的服务,在Secure World和Non-Secure World之间进行切换。它的主要任务是找到BL32,验签,并运行BL32。

BL32

BL32是所谓的secure os,在ARM平台下是 ARM 家的 Trusted Execution Environment(TEE)实现。OP-TEE 是基于ARM TrustZone硬件架构所实现的软件Secure OS。

一般在BL32会运行OPTee OS + 安全app,它是一个可信安全的OS运行在EL1并在EL0启动可信任APP(如指纹信息,移动支付的密码等),并在Trust OS运行完成后通过SMC指令返回BL31,BL31切换到Non-Seucre World继续执行BL33。

BL32 在不同的平台有不同的实现,Intel 的叫做 Software Guard Extensions(SGX),AMD 的叫做 Platform Security Processor(PSP)

BL33

到了BL33这里就是Normal Wrold了,运行的都是非安全固件,也就是我们常见的UEFI firmware或者u-boot,也可能是直接启动Linux kernel。

启动BL1,BL2,BL31,BL32则是一个完整的ATF信任链建立流程(ARM Trusted Firmware),像常见的PSCI(Power State Coordination Interface)功能则是在ATF的BL31上实现。

最后一张图完整展示整个调用流程:

b82235c2-331a-11ed-ba43-dac502259ad0.png

消息摘要算法和加密算法

消息摘要算法

消息摘要又称为数字摘要。它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生。

如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性

消息摘要采用单向Hash函数,将需加密的明文"摘要"成一串固定位数(如128bit)的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长度,且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致

这样这串摘要便可成为验证明文是否是“真身”的“指纹”了。

消息摘要具有不可逆性,在消息摘要生成过程中,会丢失很多原文的信息,而且无法找回。一个好的摘要算法,是极难产生Hash碰撞的,也就是找到另一段明文经计算后产生相同的摘要。

常用的消息摘要算法有MD5,SHA,MAC等。在secure boot中,一般使用sha128,sha256、sha512等算法作为完整性算法。

对于任意长度的消息,sha256都会产生一个256位的哈希值,称作消息摘要。这个摘要相当于是个长度为32个字节的数组,通常有一个长度为64的十六进制字符串来表示,其中1个字节=8位,一个十六进制的字符的长度为4位。

来看一个具体的例子:

TrustChain

这句话经过哈希函数sha256后得到的哈希值为:

3a6fed5fc11392b3ee9f81caf017b48640d7458766a8eb0382899a605b41f2b9

总体上,sha256与MD4、MD5以及HSA-1等哈希函数的操作流程类似,有了消息摘要算法后,我们就可以通过它验证镜像的完整性,从而很容易地就能把被篡改的镜像给识别出来。

加解密算法-RSA

RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。

RSA算法是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理就是对一极大整数做因数分解的困难性来保证安全性。通常个人保存私钥,公钥是公开的(可能同时多人持有)。

下面以一个例子说明RSA签名的过程。

战场上,B要给A传递一条消息,内容为某一指令。

RSA签名的过程如下:

(1)A生成一对密钥(公钥和私钥),私钥不公开,A自己保留。公钥为公开的,任何人可以获取。

(2)A用自己的私钥对消息加签,形成签名,并将加签的消息和消息本身一起传递给B。

(3)B收到消息后,在获取A的公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是A回复的。

在这个过程中,只有2次传递过程,第一次是A传递加签的消息和消息本身给B,第二次是B获取A的公钥。

即使都被敌方截获,也没有危险性,因为只有A的私钥才能对消息进行签名,即使知道了消息内容,也无法伪造带签名的回复给B,防止了消息内容的篡改。

trustzone & ATF & OPTEE

trustzone

TrustZone是ARM针对消费电子设备设计的一种硬件架构,它对ARM的扩展,其实只是增加了一条指令,一个配置状态位(NS位),以及一个新的有别于核心态和用户态的安全态。其目的是为消费电子产品构建一个安全框架来抵御各种可能的攻击。

TrustZone在概念上将SOC的硬件和软件资源划分为安全(Secure World)和非安全(Normal World)两个世界,所有需要保密的操作在安全世界执行(如指纹识别、密码处理、数据加解密、安全认证等),其余操作在非安全世界执行(如用户操作系统、各种应用程序等),安全世界和非安全世界通过一个名为Monitor Mode的模式进行转换,如图1:

b85d4af4-331a-11ed-ba43-dac502259ad0.png

处理器架构上,TrustZone将每个物理核虚拟为两个核,一个非安全核(Non-secure Core, NS Core),运行非安全世界的代码;和另一个安全核(Secure Core),运行安全世界的代码。

两个虚拟的核以基于时间片的方式运行,根据需要实时占用物理核,并通过Monitor Mode在安全世界和非安全世界之间切换,类似同一CPU下的多应用程序环境。

不同的是多应用程序环境下操作系统实现的是进程间切换,而Trustzone下的Monitor Mode实现了同一CPU上两个操作系统间的切换。

OPTEE

OPTEE是一个通常运行在 Secure World EL1 权限中的内核程序,比较常见的是基于开源的 ARM Trusted Firmware 进行扩展修改的,别的实现还有基于 Little Kernel 的,以及一些芯片厂家自己的实现。

它的主要作用是给 Secure World 中运行的程序提供一个基本的系统内核,实现多任务调度、虚拟内存管理、System Call 回调、硬件驱动、IPC 通讯等等。

ATF

TF(Trusted Firmware)是ARM在Armv8引入的安全解决方案,为安全提供了整体解决方案。它包括启动和运行过程中的特权级划分,对Armv7中的TrustZone(TZ)进行了提高,补充了启动过程信任链的传导,细化了运行过程的特权级区间。

TF实际有两种Profile,对ARM Profile A的CPU应用TF-A,对ARM Profile M的CPU应用TF-M。我们一般接触的都是TF-A,又因为这个概念是ARM提出的,有时候也缩写做ATF(ARM Trusted Firmware)。

ATF带来最大的变化是信任链的建立(Trust Chain),整个启动过程包括从EL3到EL0的信任关系的打通。

ATF的启动流程包括5个单独的启动阶段,在不同的异常级别运行,如下表所示。

b87267a4-331a-11ed-ba43-dac502259ad0.png  

TrustZone,ATF,OPTEE 这三者有什么关系呢?

TrustZone是一种架构,支持ATF的硬件。ATF是软件,包含bl2 + bl31 + bl32 + bl33,bl32=optee-os,bl33=u-boot。

secure boot启动流程

信任链的构建

由于操作系统启动时可能需要多级启动镜像,而只要其中任意一级镜像未执行secure boot流程,则其后的所有镜像实际上都是不可信的。典型的例子如下:

b8988920-331a-11ed-ba43-dac502259ad0.png

以上例子中bootrom验证了spl镜像,若spl未验证uboot镜像,则一旦uboot镜像被替换以后,那么攻击者就可以控制后面所有的启动流程。如被替换的uboot可以从其它位置加载非法的linux镜像,而在该linux镜像中任意植入后门等。

因此,secure boot需要建立安全启动的信任链,在启动流程中,每一级镜像都由其前级镜像执行合法性验证。

这样只要保证第一级镜像是合法的,那么第二级镜像的合法性由第一级镜像保证,第三级镜像的合法性由第二级镜像保证。从而像链条一样将整个启动流程的信任链连接起来,最终保证整个系统是可信的。

由于信任链建立流程中,镜像合法性是由其前级镜像验证的,那么第一级镜像的合法性如何保证呢?既然无法由前级镜像为其背书,那么按照惯例,软件没办法解决的问题自然就需要硬件上马了。

我们知道rom是一种只读存储器,它只能被编程一次且内容在其后不能被再次更改。因此若在SOC内部集成一片ROM,并在芯片生产时就将第一级启动镜像刷到这块ROM中,那么也就保证了它是可信的,这也是现代SOC的普遍做法。一般SOC在出厂时就已经在rom固定区域中集成了bootrom镜像,每次芯片启动时都会从bootrom开始执行。

镜像校验方式

下面我们介绍一种常见的镜像签名和校验方法。

b8b90574-331a-11ed-ba43-dac502259ad0.png
  1. 使用hash算法计算镜像的hash值
  2. 用私钥将hash值签名后,将签名的结果一起打进镜像中,存放在特定位置。
  3. 上电后拿到公钥,将存储在镜像中特定位置的hash解密。
  4. 将解密的hash值与设备中当前计算的hash值做对比,二者一致则校验通过。

总结

以上就介绍了secure boot相关的基本概念和框架,希望大家能对secure boot有更加深刻的理解。secure boot的具体实现方案各个厂家都有所差别,但原理都是相同的。下一篇文章将介绍一种主流的开源的secure boot的实现方案。

审核编辑:汤梓红


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

    关注

    4981

    文章

    18281

    浏览量

    288423
  • Secure
    +关注

    关注

    0

    文章

    7

    浏览量

    11713
  • Boot
    +关注

    关注

    0

    文章

    142

    浏览量

    35240

原文标题:secure boot (二)基本概念和框架

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Proteus涉及的基本概念

    Proteus涉及的基本概念
    发表于 08-01 20:58

    Fpga Cpld的基本概念

    Fpga Cpld的基本概念
    发表于 08-20 17:14

    C语言基本概念

    C语言基本概念
    发表于 08-01 02:00

    C6678芯片是否有带Secure Boot的版本

    请问,C6678芯片是否有带Secure Boot的版本,对应的型号是? 有关于C6678 Secure Boot的介绍资料吗?
    发表于 06-21 01:23

    使用SECURE_BOOTSECURE_SFLASH选项

    / SecureBoot / aec_cbc_128和hmac_sha256命令,他们并没有得到与makefile建成。当我们使用secure_boot = 1和secure_sflash = 1个
    发表于 08-29 14:51

    天线分集技术的基本概念介绍

    基本概念往往有助于理解多变的无线电通信链接品质,一旦理解了这些基本概念,其中许多问题可以通过一种低成本、易实现的被称作天线分集(antenna diversity)的技术来实现。
    发表于 07-02 06:04

    阻抗控制相关基本概念

    阻抗控制部分包括两部分内容:基本概念及阻抗匹配。本篇主要介绍阻抗控制相关的一些基本概念
    发表于 02-25 08:11

    单片机中断的基本概念

    文章目录一.中断的基本概念二.中断相关的寄存器三.中断的实际使用四.中断的优点:一.中断的基本概念1.中断的概念:在单片机中,中断是指:对于CPU来说,当它在正常处理事件A时,突然发生
    发表于 11-25 08:14

    STM32的中断系统基本概念

    STM32 中断系统概述笔记(一)中断概述中断相关基本概念STM32的中断系统基本概念:NVIC 嵌套向量中断控制器中断通道中断优先级优先级分组EXTI 外部中断控制器三种外部中断触发方式引脚分组
    发表于 01-07 07:32

    基于 Rockchip U-boot next-dev 的 secure boot 流程

    资料将详细介绍基于 Rockchip U-boot next-dev 的 secure boot 流程。 Rockchip Secure Boot
    发表于 06-27 15:53

    PPP协议的基本概念

    课程介绍.. . . . 2课程目标.. . . . 2相关资料.. . . . 2第一节 PPP协议基本概念31.1 概述31.2 PPP协议的基本概念 . 31.3 PPP协议的特点. 4小 结. . 4习 题. . 4第二
    发表于 06-24 17:11 16次下载

    基于PID调节相关的15个基本概念详解

    PID入门读此文,必须熟透于心的15个PID基本概念
    的头像 发表于 01-08 09:14 6455次阅读
    基于PID调节<b class='flag-5'>相关</b>的15个<b class='flag-5'>基本概念</b>详解

    第一道防线-Secure Boot安全开机

    第一道防线-Secure Boot安全开机
    的头像 发表于 08-11 14:46 386次阅读
    第一道防线-<b class='flag-5'>Secure</b> <b class='flag-5'>Boot</b>安全开机

    安全启动Secure Boot流程

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

    MMU相关基本概念

    1-MMU相关基本概念 (1)虚拟地址相关基本概念 • 虚拟内存(Virtual Memory,VM):为每个进程提供了一致的、连续的、私有的内存空间,简化了内存管理。将主存看成是一
    的头像 发表于 11-26 16:11 342次阅读