本文主要介绍基于ARM架构的
Android 11.0平台的Secureboot方案,主要介绍了功能设计实现、配置及调试指导。
1、安全启动介绍
Android 采用业界领先的安全功能,并与开发者和设备实现人员密切合作,确保 Android 平台和生态系统的安全。
验证启动会尽力确保所有已执行的代码均来自可信的来源(通常是设备的 OEM),以防受到攻击或者损坏。它建立了一个完整的信任链,该信任链从硬件保护的信任根开始,延伸到引导加载程序,再延伸到启动分区及其它验证分区。 除确保设备运行的是安全的 Android 版本外,验证启动还会检查 Android 版本是否存在内置回滚保护。回滚保护可确保设备只会更新到更高的 Android 版本,避免可能的漏洞持续存在。
OEM厂商确保用户设备不应该用于和设计不同的目的,不能运行未经允许的软件,保护用户的资产价 值;终端用户需要确保自己的设备没有被篡改,是值得被信赖的。
1.1 密码学原理
信息安全需要解决以下三个问题:
●保密性(Confidentiality):信息在传输时不被泄露
●完整性(Integrity):信息在传输时不被篡改
●有效性(Availability):信息的使用者是合法的保密性、完整性和有效性统称为 CIA Triad。公钥密码解决保密性问题,数字签名解决完整性问题和有效性问题。
数字签名是通过一些密码算法对数据进行签名,以保护源数据的做法。
典型的数字签名方案包括以下三个算法:
●密钥生成算法:用来输出公钥和私钥。
●签名算法:用私钥对给定数据进行加密来生成签名。
●签名验证算法:用公钥对加密过的消息进行解密验证。
数字签名和验证过程:
Secureboot中数字签名由哈希算法和RSA算法组成。PC端生成、部署密钥并对镜像进行签名,终端在启动时对镜像进行签名验证。RSA私钥是Secureboot的保障,需要小心保存。
1.2 TEE 介绍
Trusty是一种安全的操作系统(OS),可为Android提供可信执行环境(TEE)。Trusty操作系统与Android操作系统在同一处理器上运行,但Trusty通过硬件和软件与系统的其余组件隔离开来。Trusty与Android彼此并行运行。Trusty可以访问设备主处理器和内存的全部功能,但完全隔离。隔离可以保护Trusty免受用户安装的恶意应用以及可能在Android中发现的潜在漏洞的侵害。
Trusty与ARM和Intel处理器兼容。在ARM系统中,Trusty使用ARM的Trustzone™虚拟化主处理器,并创建安全的可信执行环境。
Trusty 包含以下组件:
●Little
kernel 衍生的小型操作系统内核 TOS
●Linux 内核驱动程序,用于在安全环境和 Android 之间传输数据。
●Android 用户空间库,用于通过内核驱动程序与可信应用(即安全任务/服务)通信。
2、镜像签名
针对需要保护的镜像的不同特点,采取不同的签名和验证方案。不同签名和验证方案的原理基本相似,区别在于签名算法及验证签名的元数据的组织方式存在不同。
2.1 镜像签名介绍
在引导阶段加载启动的镜像,采用展锐自己的签名验签方案。这些镜像有 fdl1.bin、fdl2.bin、u-boot-spl-16k.bin、sml.bin、tos.bin、u-boot.bin、teecfg.bin。这些镜像的执行处于系统早期的引导阶段,一般都运行在安全级别较高的模式。
Uboot 启动后,会逐步加载和校验内核及Android系统和modem系统镜像,这些系统镜像均采用 Avb2.0方案进行签名和验证。对仅读取一次的小分区(例如 boot、dtbo、recovery和 modem bins)通常是通过将整个内容计算哈希并签名;对于内存装不下的较大分区(如文件系统 system、vendor、
product、socko 及 odmko 分区)可以使用哈希树的方式签名;启动时,验证流程会在将数据加载到内存时持续进行。
2.2 安全相关配置
安全启动默认开启,MD 组态编译系统可以根据启动
芯片让它跑起来或其它产品需要,使能或禁用安全相关的配置,如果想关闭安全启动,以
UMS512 为例,需作以下修改: 在 device/sprd/sharkl5Pro/ums512_1h10/product/var.mk 中增加
$(call md-set, BOARD_SECBOOT_CONFIG, false) //false will close
在 BSP 板级配置中同步导出如下配置:
Bsp/device/sharkl5Pro/androidr/ums512_1h10/ums512_1h10_base/common.cfg
//secureboot
export BSP_PRODUCT_SECURE_BOOT=”SPRD” //”NONE” for close
export BSP_PRODUCT_VBOOT=”V2” //“” for close
//firewall
export BSP_CONFIG_TEE_FIREWALL=”true”
export BSP_BOARD_TEE_CONFIG=”trusty”
export BSP_BOARD_ATF_CONFIG=”true”
export BSP_BOARD_ATF_BOOT_TOS_CONFIG=”true”
2.3 生成签名密钥对
安全启动方案需要配置如下的密钥来完成所有系统镜像的签名和校验。
2.3.1 BSP 签名密钥 BSP 相关镜像签名密钥文件的路径如下: bsp/build/packimage_scripts/configs/
主要有以下几对:
●rsa2048_0.pem & rsa2048_0_pub.pem
●rsa2048_1.pem & rsa2048_1_pub.pem
●rsa4096_vb
META.pem & Rsa4096_vbmeta.pem
下述命令生成 RSA 密钥对:
生成 RSA 私钥
$ open
SSL genrsa -out rsa2048_0.pem 2048
Generating RSA private key, 2048 bit long modulus
...................+++
.....+++
e is 65537 (0
x10001)
生成 RSA 公钥
$ openssl rsa -in rsa2048_0.pem -pubout -out rsa2048_0_pub.pem
writing RSA key
$ls -al *.pem
-rw-r--r-- 1 user group 1679 Feb 26 20:46 rsa2048_0.pem
-rw-r--r-- 1 user group 451 Feb 26 20:48 rsa2048_0_pub.pem BSP 签名是在 chipram、bootloader 及 trusty 等目标的编译过程中自动进行。
......
更多详细内容请下载附件查看
Android11.0Secureboot使用指南V1.0_nowatermark.pdf
(2.03 MB, 下载次数: 23)