Secureboot概念

简介: Secureboot概念

1、前言

最近在微信公众号接触到了一个Secureboot这个概念。通过这个认识可以让我们穿起来一些知识,站在稍高一点的位置去看我们所学的东西处在整个系统的位置。

什么是Secureboot?

借用一句广告词:业务安全的基石是APP安全,APP安全的基石是操作系统安全,操作系统安全的基石是SecureBoot安全。

Secure Boot是验证应用域内的一个/多个应用CPU子系统执行的一个/多个应用程序映像的完整性和真实性(多应用核和多内存段),验证策略由用户定义,包括:被验证的内容、验证方式、验证结果分析处理。

是不是有点绕?

来先看看背景:

手机厂商建立了手机内部处理器与手机操作系统的绑定关系(也就是说**开启 SecureBoot 功能的手机是「不能刷非官方系统」**的),一旦刷入第三方系统后,手机则会不开机。这也是利用上文提到的公钥、私钥实现的,来具体看一下:

  • 手机的处理器内部存在一块只能写一次数据的 OTP 区域,出厂时会将厂商的公钥写入。物理上就保证了这部分不可更改。
  • 手机操作系统固件会使用厂商的私钥进行加密。
  • 手机处理器的第一部分启动程序(这部分程序也是固化在处理器内部的不可更改)会使用 OTP 中的公钥对操作系统进行解密,解密成功才可以启动,否则立马变"砖"。

这个过程就叫做「安全启动」,即 SecureBoot 。实际过程中为了加快校验速度也使用了哈希值算法,但此处仅用于说明加密启动的过程,忽略了部分细节。(电脑端 Intel 处理器中其实也存在类似的机制,但一般情况下 PC 都希望能够灵活的安装系统,因此默认没有开启 Intel 芯片中的 SecureBoot 功能。)

有了这个应用背景!!!

继续看

安全启动(SecureBoot)使用非对称加密与数字签名技术提供了一种从硬件到操作系统的安全启动信任链

Secure Boot的目的,是防止恶意软件侵入。它的做法就是采用密钥。UEFI规定,主板出厂的时候,可以内置一些可靠的公钥。然后,任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。也就是说,这些软件必须用对应的私钥签署过,否则主板拒绝加载。由于恶意软件不可能通过认证,因此就没有办法感染Boot。

实际一点:在安全启动中,证书颁发机构 (Ca) 包括 OEM (或其委托) 和 Microsoft。Ca 生成构成信任根的密钥对,然后使用私钥对合法操作(如允许的早期启动 EFI 模块和固件服务请求)进行签名。对应的公钥将嵌入到启用了安全启动的 Pc 上的 UEFI 固件中,并用于验证这些操作。

啰里啰嗦到了现在我们下总结:

  • 1、Secure Boot就是安全启动,我们之前学习的ATF、启动流程、安全操作系统(TEEOS)都是它的子集
  • 2、完整的Secure Boot包含两个部分:
  • 第一部分为Linux的Secureboot,
  • 第二部分为Android特有的AVB(Android Verified Boot)。

开启了Secureboot的设备,会在启动时逐级校验各分区,一旦某一级校验不通过,则设备就无法启动。

Secureboot分为安全性校验与完整性校验。

  • 安全性校验: 为公钥的校验,借助于芯片的一次性可编程安全存储模块(OTP 或 efuse), 在rk3399上称为efuse。该检验流程为从efuse中读取公钥 hash,与计算的公钥 hash 先做对比,如果相同,则再将公钥用于解密固件 hash。(嵌入式设备就是对应的bootrom)
  • 完整性校验: 为校验固件的完整性,计算固件的 hash 与用公钥解密出来的 hash 对比是否一致。

AVB阶段安全性校验和完整性校验需要依赖于vbmeta.img,相关的公钥及描述信息存储在vbmeta.img中。(这个流程可以看看AVB专栏的内容)

2、Secureboot要学习什么?

密码学算法

efuse(OTP)

RPMB

启动流程

secureboot原理

简单的secureboot(不带证书)

官方推荐的secureboot(不带证书)

encrypted_image

efuse不安全

TEE验证TA程序的设计

Android Verified Boot(AVB)


目录
相关文章
|
1月前
|
SQL 存储 安全
什么是编程领域的 sanitization 概念
什么是编程领域的 sanitization 概念
|
10月前
|
存储 Java 数据库连接
串池的概念
串池的概念
64 0
|
算法 C++ Python
01算法的概念
01算法的概念
121 0
01算法的概念
|
微服务
架构的相关概念
同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)
78 0
|
编解码 缓存 NoSQL
7 段话说明 地图切片的概念与原理
7 段话说明 地图切片的概念与原理
187 0
|
存储 弹性计算 资源调度
【k8s】概念、构成
文章目录 前言 一、概念
97 0
【k8s】概念、构成
|
开发框架 安全 .NET
初学C#需要掌握哪些概念
今天给大家带来刚整理好的初学C#需要掌握的概念。
|
自然语言处理 运维 负载均衡
PolarisMesh系列文章——概念系列(一)
北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。虽然,业界已经有些组件可以解决其中一部分问题,但是缺少一个标准的、多语言的、框架无关的实现。
342 0
|
调度 Docker 容器
SwarmKit的概念和架构
SwarmKit是容器集群调度领域新的挑战者,虽然不够成熟,但由于设计理念优秀,并被直接集成在Docker Engine中,大有后发而先至的可能性。对于docker的从业者来说,了解和学习Swamkit是非常必要的,我们会在这里介绍swarmKit的概念和架构,帮助大家学习和研究。
6534 0
|
存储 Kubernetes Linux
k8s重要概念
kubernetes架构图 下图为kubernetes的master架构图 1. Cluster cluster是计算、存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用。
1261 0