首页 > 汽车技术 > 正文

安全启动- 云驰未来

2023-02-03 19:53:34·  来源:汽车测试网  
 
背景描述随着车联网的广泛普及,对于车联网类型的嵌入式系统划定安全优先顺序的需求日益迫切。确保安全的启动过程是保护任何嵌入式系统的首要步骤,也是在应用中预防恶意软件壁垒的必要部分。“安全启动” (Secure Boot) 是指操作系统在启动镜像与软件之前必

背景描述

随着车联网的广泛普及,对于车联网类型的嵌入式系统划定安全优先顺序的需求日益迫切。确保安全的启动过程是保护任何嵌入式系统的首要步骤,也是在应用中预防恶意软件壁垒的必要部分。“安全启动” (Secure Boot) 是指操作系统在启动镜像与软件之前必须先根据硬件信任根进行认证, 才能使其用于启动的过程。硬件信任根必须以此方式提前作好准备:它只认证使用受信任的安全凭证所 产生的程序。总之,它确保开机启动和 OS 软件是预期的制造商版本,而不至于被恶意软件或恶意的第三方篡改过。

实现概要

Secure Boot 的基本思想是从 Preloader 到启动末尾 Image 的多层链式校验机制(如下图所示)。Preloader 利用 Hash 函数来验证 LK 的完整性;然后 LK 将会验证 Linux Kernel;最后 Linux Kernel 来验证 Android Image,所有的 Boot Images 会通过 RSA 算法的私钥加密并在生产阶段载入控制器,每个Image 文件的 RSA 公钥保存在前一级用私钥签名的 image 当中,而计算得到 LK 的 Hash 值和第一级的公钥则保存在芯片的一次可编程模块中,以防止其被修改。需要注意的是,RSA 私钥是 Secure boot 的保障,需要被小心的保存起来。

图片

图7.2-1 基于信任链的启动流程分区说明:

Preloader

Preloader 位于芯片的 ROM 内,芯片出厂后不能修改,它包含了 SHA1 和 RSA 算法,且 Preloader 的 Hash 值也保存在芯片的一次性可编程模块(efuse)中,Preloader 在下载或启动会比较 efuse 和 LK 的 Hash 值。

LK

Bootloader 的一部分,它会被加载到芯片的内部 RAM 中,所以其大小受芯片内部 RAM 大小的限制, LK 的主要作用是初始化外部内存,即我们常说的 DDR。

Linux Kernel

Linux 内核,包含进程管理、内存管理、设备驱动等内核程序。

Android

安卓 System 分区,包含了整个安卓操作系统、用户界面、和所有预装的系统应用程序。

实现详细(签名与验签)

图片

图7.2-2 签名流程

签名流程:

  1. 生成密钥对,即 public key 和 privete key

  2. 使用 SHA256 计算镜像的 hash,并使用私钥对镜像进行 RSA2048 签名;

  3. 使用 SHA256 计算出 public key 的 hash;

  4. 将镜像代码 +2 中签名 +public key 进行打包形成新的镜像;

  5. 使用 eFuse 工具将 3 中的 hash 烧写到 eFuse。

验签流程:

  1. 首先从新的镜像中获取 public key 计算 hash 值;

  2. 从 eFuse 中读取预烧写的 hash 值进行对比,如果相同则继续否则 boot 失败;

  3. 从新的镜像中获取签名,然后使用 RSA2048 计算 hash;

  4. 使用 SHA256 计算镜像 code 段的 hash 值,3 和 4 的结果对比,相同则继续,否则失败。

分享到:
 
反对 0 举报 0 收藏 1 评论 0
沪ICP备11026917号-25