展讯Secure boot方案介绍及实施流程

Secure Boot方案介绍及实施流程

 

Secure Boot方案介绍及实施流程

 

Document
Number:
Document
Version: V3.0
Document
Type:
external
NOTE: ALL MATERIALS INCLUDED HEREIN ARE COPYRIGHTED AND
CONFIDENTIAL UNLESS OTHERWISE INDICATED. The information is
intended only for the person or entity to which it is addressed and maycontain confidential and/or privileged material. Any review,
retransmission, dissemination, or other use of or taking of any action inreliance upon this information by persons or entities other than the
intended recipient is prohibited.
This document is subject to change without notice. Please verify that yourcompany has the most recent specification.
Copyright . 2014 Spreadtrum Communications Inc.
www.spreadtrum.com

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 1 /17

Secure Boot方案介绍及实施流程

 

Table of Contents

Secure Boot方案介绍及实施流程……………………………………………………………………………………………………. 1

 

1. Secure boot概述……………………………………………………………………………………………………………………………… 3
1.1.需求与目的……………………………………………………………………………………………………………………………. 3
1.2.缩写定义………………………………………………………………………………………………………………………………… 3
2.技术方案介绍…………………………………………………………………………………………………………………………………… 4
2.1.文件签名………………………………………………………………………………………………………………………………… 4
2.1.1.签名的原理………………………………………………………………………………………………………………… 4
2.1.2.签名工具……………………………………………………………………………………………………………………. 5
2.2. Secure Boot Process…………………………………………………………………………………………………………….. 6
2.2.1. Secure Boot概貌………………………………………………………………………………………………………. 6
2.2.2.分区介绍……………………………………………………………………………………………………………………. 7
2.3.签名文件下载……………………………………………………………………………………………………………………….. 7
2.3.1. PC Download/Update……………………………………………………………………………………………… 7
2.3.2. Fastboot……………………………………………………………………………………………………………………… 7
2.3.3. Recovery…………………………………………………………………………………………………………………….. 7
3.实施流程……………………………………………………………………………………………………………………………………………. 8
3.1.生成密钥………………………………………………………………………………………………………………………………… 8
3.2. Images签名…………………………………………………………………………………………………………………………… 9
3.3. PAC包生成………………………………………………………………………………………………………………………….. 10
3.4. efuse烧写……………………………………………………………………………………………………………………………. 10
3.2.1.烧写efuse环境需求……………………………………………………………………………………………… 10
3.2.2. efuse烧写流程……………………………………………………………………………………………………….. 11
3.2.3. efuse烧写异常处理………………………………………………………………………………………………. 13
3.3. Recovery升级…………………………………………………………………………………………………………………….. 13
4.常见问题解决…………………………………………………………………………………………………………………………………. 16
5.如何编译使能secureboot的版本………………………………………………………………………………………………. 16
5.1. chipram部分………………………………………………………………………………………………………………………. 16
5.2. u-boot64部分…………………………………………………………………………………………………………………….. 17
5.3. device/sprd部分(OTA升级)……………………………………………………………………………………… 17
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 2 /17

Secure Boot方案介绍及实施流程

 

1. Secure boot概述
本文档主要是 secure boot方案的介绍和说明,其内容会涵盖以下方面: secure
boot的目的和介绍、技术方案的描述、签名工具和 Image download&update工具的
使用以及产线实施所需要做的准备工作和注意事项等。
注意事项:
1、签名的密钥对(公钥和私钥)保存在 key.db中。
2、key.db是随机生成的,要小心保存,建议上库保存。
若丢失,则会导致烧过 efuse的机器报废。
3、烧写 efuse的版本,不能用本地编译的版本(本地的 key.db有丢失可能性),

必须使用服务器编译生成的版本。

1.1.需求与目的
目前,非授权更改甚至替换手机原版操作系统中固有软件或者操作系统的软件技术手
段层出不穷, secure boot方案对系统软件采用签名认证的方式,在手机出厂前对手机
操作系统的 Image文件进行签名认证,并将公钥的 Hash值写入芯片的一次性可编程模
块。由于不同文件计算得到的 Hash值不同,采用 secure boot方案的手机每次启动时
都会先校验系统的 Hash值,即和芯片内的 Hash值进行比较,然后对签名 images的一
级一级校验,实现从手机芯片到系统软件的链式校验过程,很好地避免手机出厂后没有得
到客户签名认证的非授权操作,保护手机中原有的操作系统和软件版本。

1.2.缩写定义
Name

CA
PUK
RSA
SHA

 

Description
Certificate authority
Public key
One public-key cryptosystems
Secure hash algorithm
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 3 /17

Secure Boot方案介绍及实施流程

 

2.技术方案介绍
Secure boot技术方案主要分为三个部分:

1)文件签名Images signature
2) Secure Boot Process
3)签名文件下载Image download/update
2.1.文件签名
2.1.1.签名的原理
数字签名是通过一些密码算法对数据进行签名,以保护源数据的做法。典型的数字签
名方案包括以下三个算法:

1)密钥生成算法,用来输出公钥和私钥。
2)签名算法,用私钥对给定数据进行加密来生成签名。
3)签名验证算法,用公钥对加密过的消息进行解密验证。
Fig.1数字签名和验证过程.

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 4 /17

Secure Boot方案介绍及实施流程

 

Fig.1是数据的数字签名和验证过程。Secure boot方案中的数字签名由SHA和
RSA算法组成,并直接采用PUK替代CA。我们在PC端实现对Images的签名,并在手
机端实现Images的验证,images文件的变化会导致解密过程的失败,从而很好地避免
非授权操作。

2.1.2.签名工具
存放路径如下:vendor/sprd/open-source/tools/sprd_secure_boot_tool

1) RSAKeyGen:用来生成密钥对,存放在key.db中。
2) BscGen:对fdl1.bin和u-boot-spl-16k.bin进行签名。
3) VLRSign:对 U-boot/FDL2;
bootimage,recoveryimage,modem,dsp进行签名。
4) sig_key.ini:生成密钥配置文件。
5) sig_bin.ini: bin签名配置。文件。
6) sig_script.sh:执行脚本。
2.2. Secure Boot Process
2.2.1. Secure Boot概貌
Secure boot的基本思想是从Romcode到Images的多层链式校验机制(如图
Fig.2所示)。Romcode利用Hash函数来验证BSC的完整性,用RSA算法来验证
SPL的完整性;然后SPL将会验证U-boot;最后U-boot来验证
bootimage,recoveryimage,modem,dsp等,所有的boot images会通过RSA
算法的私钥加密并在生产阶段载入手机,每个image文件的RSA公钥保存在前一级用私
钥签名的image当中,而计算得到BSC的Hash值和第一级的公钥则保存在芯片的一次
可编程模块中,以防止其被修改。需要注意的是,RSA私钥是Secure boot的保障,需
要被小心的保存起来。

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 5 /17

Secure Boot方案介绍及实施流程

 

Fig.2 Secure boot概貌.

2.2.2.分区介绍
1) Romcode

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

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

bootloader的另外一部分,其作用是将images加载到RAM,并进行验证。

4) Bootimage,recoveryimage,modem,dsp
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 6 /17

Secure Boot方案介绍及实施流程

 

这些images通过PC工具签名,由U-boot验证、加载。

5) FDL1,FDL2
与SPL和U-boot的作用类似,用于下载模式。
2.3.签名文件下载
2.3.1. PC Download/Update
当 secure boot功能 enable时,对于我们的 SPL/FDL1, Uboot/
FDL2,Bootimage,Recoveryimage等需要签名后才能下载,在下载过程中,
前面所提到过的链式校验的任一个环节验证失败都会导致这些 images不能成功下载到
手机。在手机启动时,同样也会对这些images进行链式校验。

2.3.2. Fastboot
如果手机的secure boot功能打开,在Fastboot模式下载images时会先对签名的
image进行验证,认证的签名image才会被下载到手机。

2.3.3. Recovery
Recovery模式下的手机升级和启动过程一样,会对所有的签名 images进行校验。
需要注意的是,升级前后的签名密钥必须相同才能升级成功。

3.实施流程
Secureboot实施流程的具体步骤分为以下几步:

1)
编译secure enable的images,参考第
5步。
2)
用密钥工具生成密钥数据库 key.db(此
key.db是随机生成的密钥,要小心保
存)。
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 7 /17

Secure Boot方案介绍及实施流程

 

3)对编译出来的image文件签名。
4)对签名过的images打包生成PAC包。
5)在相关的校验和测试完成后,最后烧写efuse并开机验证。
6) Recovery升级,需要烧写efuse后,才能进行Recovery升级。
3.1.生成密钥
密钥(公钥和私钥)是存放在 key.db的数据库中,且是随机生成的密钥,要小心
保存 ,建议上库保存,且要备份。

密钥key.db生成方法如下:
进入vendor/sprd/open-source/tools/sprd_ secure_boot_tool/下,删除默认的
key.db文件(注:不删除无法生成新的 key.db),且修改配置文件sig_key.ini,如下
所示:

 

# KEY define
PASSW1=12345678
PASSW2=12345678
PASSW3=12345678
BSCKEY1=key1
BSCKEY2=key2
VLRKEY=key3

 

(注:以上只需要修改蓝色部分的密码,可以自己定义,格式为 8位的数字)
执行脚本文件./sig_script.sh IMAGE_PATH(IMAGE_PATH为待签名镜像所在的路径,
签名后的镜像也会放在此路径下,若只是生成密钥key.db,此路径可以为空),生成新
的key.db(此
key.db是随机生成的密钥,要小心保存 )。

3.2. Images签名
进入
vendor/sprd/open-source/tools/sprd_secure_boot_tool/下,使用上一步
的配置文件
sig_key.ini及生成的key.db,执行脚本文件
./sig_script.sh IMAGE_PATH(IMAGE_PATH为待签名镜像所在的路径,签名后的镜像也会放在此路径下)

由于非授权签名以及采用不同的密钥签名后的 image文件不会成功的下载到手机,
所以若由签名完成的 Images打包生成的 PAC文件下载到手机并开机 OK时,即可认为
images签名过程OK。具体需要签名的文件名及其使用的工具见下表:

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 8 /17

VLRSign
Tshark BOOT/Recovery/Modem_*/DSP
_*/Modem_WCN
T8 BOOT/Recovery/Modem_*/DSP
_*/DFS/SML
sharkl BOOT/Recovery/Modem_*/DSP
_*/DFS
Secure Boot方案介绍及实施流程

 

fdl2/u-boot.bin( VLRSign.exe
需勾选“
insert
public key”)

BscGen
u-boot-spl-16k.bin
fdl1.bin

 

注:

1、红色部分表示从 ResearchDownload工具中解析出来的签名文件所对应的
FileID;

2、*号代表名字中包含其它字符,如 Modem_*文件可以是 Modem_WLTE,具体
名称以ResearchDownload的Download settings的显示为准。

3、目前不支持对system image的校验。

3.3. PAC包生成
在PAC包生成时,要将fdl1地址从0x50000000改成0x50003000,步骤如下:

1)修改版本对应的xml文件内的fdl1的地址
2)并重新打包。
3)加载原始
pac后替换签名的fdl文件,可获取到签名文件的原始文件路径;
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 9 /17

Secure Boot方案介绍及实施流程

 

3.4. efuse烧写
efuse的烧写过程对secure boot来说是至关重要的,错误和失败的烧写都会导致
手机无法开机,所以这个过程需要更为严格的要求。

3.4.1.烧写 efuse环境需求
1)系统环境:
建议使用Win-XP SP3或者Win7 SP1版本。
2)测试治具、线材及供电仪器等:
测试治具的探针也需要按照一定周期进行替换,以防止与手机通信或供电时的不稳定
现象; USB线材的线阻也要尽可能的做到最小,比如USB线阻如果大于0.1欧姆就很
可能会通信不正常,线材的长度以不超过1.1米为参考。

因为 efuse烧写时所需电压较为精准,供电仪器建议使用精密型的程控电源,如果
使用较为老旧的直流 Power,上下浮动可能会比较大,易导致通讯宕机甚至掉电,这些
都有可能使efuse烧写失败甚至芯片报废。建议电压稳定 4.0V。

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 10 /17

Secure Boot方案介绍及实施流程

 

3.4.2. efuse烧写流程
1、工具设置

 

模式选择选项如上图所示,选择常规写号模式

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 11 /17

Secure Boot方案介绍及实施流程

 

设置选项如上图所示,注意勾选上
program key功能,后面的下拉框选择
Enter WG mode。

 

2、操作流程

 

(1)按上面两幅图设置好工具,并在工具上点击写入按钮。
(2)确保手机处于关机状态,USB线拔出,电池拔出。
(3)手机先插
USB线,再上电池(确保两个动作之间间隔时间短,几乎同时)。全
过程不要按开机键或者音量键。
(4)在PC端的设备管理器上会看到弹出一个USB口,叫做sprd u2s,4秒时间左
右,该口消失,再等15秒左右,该口又会重新弹出。
(5)写号完成,对于第一次写号的手机,工具上会提示绿色窗口,显示pass。对于
异常流程,工具上会提示红色窗口,显示timeout(超时)。
3、如何查询

 

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 12 /17

Secure Boot方案介绍及实施流程

 

可以通过手机中的暗码(*#*#83781#*#*)查询,路径为:HARDWARETEST>
hash value

3.4.3. efuse烧写异常处理
efuse烧写可能出现的问题:

1)
提示烧写失败,手机可开机:可以尝试再重复写efuse,若还是失败,表示
efuse无法写入正常值,也无法再写efuse,但该手机可当一般机器出货。
2)
写入错误的Hash值导致手机无法开机:secure boot功能已经
enable,但写
入的efuse内容是错的,出现这种情况后该手机的芯片无法再使用,须换芯片后
重新烧写。目前新版本中已对这种情况进行处理,在enable之前会读取芯片内
的Hash值并作对比,发现Hash值错误后不会进行enable,从而可以保证手
机正常开机。
3.5. Recovery升级
手机升级时会对所有的签名images进行校验,因此在发布版本和制作升级包时应
使用相同的密钥。具体制作方法如下:

1) 使用make命令先将所有的image编译OK,编译之前需要打开
secureboot
相关宏,具体参考第
5步。
1)将所使用版本的bin文件copy到device/sprd/spXXXX/modem_bins/目录下
(可能需要新建目录),bin文件的文件名有严格要求,根据板子不同而不同,如
dsp.bin;wdsp.bin;tddsp.bin;modem.bin;wmodem.bin;pm_*_arm7.bin for
sharkl/wcnmodem for tshark;tdmodem.bin;nvitem.bin; wnvitem.bin;
tdnvitem.bin; wcnnvitem.bin。具体请参照对应的PAC版本,例如7731ea的对应
目录应包含的文件如下图(注意文件名的要求):
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 13 /17

Secure Boot方案介绍及实施流程

 

Fig.6 modem_bins示图.

2)将之前生成的key.db(此
key.db是随机生成的密钥,要小心保存 )替换目录
vendor/sprd/open-source/tools/sprd_secure_boot_tool/下的key.db。
3)请确保签名工具(BscGen,RSAKeyGen,VLRSign)的权限为可读可写可执
行。
4)将product_name和passwd(要和key.db匹配,且为8位数字)写到配置文
件(格式为:keyN [[[ passwd ]]] product_name,配置文件名称和位置可以自己
定),例如:
配置文件名称和位置参考如下:

vendor/sprd/open-source/tools/sprd_secure_boot_tool/signkey.txt

文件内容参考如下:

key1 [[[ 12345678 ]]] SC9832
key2 [[[ 12345678 ]]] SC9832
key3 [[[ 12345678 ]]] SC9832

 

(注:蓝色部分的密码要和 sig_key.ini中的密码相同)

并将其路径写入环境变量

 

SPRD_SECURE_BOOT_SIGN_CONFIG(build/tools/releasetools/sprd_secure_boot

 

_sign.py),如下所示:

将None改成配置文件所在路径,如“vendor/sprd/open-source/tools/sprd_
secure_boot_tool/signkey.txt”。

7)使用make otapackage编译升级文件,编译后可以得到整体升级包:
out/target/product/scx*/scx*-ota-*.zip以及target文件:
out/target/product/scx*/obj/PACKAGING/target_files_intermediates/*target_
files-*.zip。注意需保留所发布版本对应的target-files用于制作升级包。
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 14 /17

Secure Boot方案介绍及实施流程

 

同时 out/target/product/scx*/路径下的 image文件是签名后的文件。

8)利用targes文件制作差分升级包,可以使用工具ota_from_target_files执
行一下命令./build/tools/releasetools/ota_from_target_files –i
<prev_target_files> -k build/target/product/security/testkey
<next_target_files> <差分升级包文件>。
3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 15 /17

Secure Boot方案介绍及实施流程

 

4.常见问题解决
1、下载失败:
在secureboot实施过程中经常遇到不能下载问题,要检查以下几步是否正确:

1)检查
secureboot功能是否打开;
2)检查
fdl下载地址是否改成了
0x50003000;
3)只编译chipram和bootloader模块,保证fdl1和fdl2下载正常。
2、制作OTA升级包失败:
根据编译失败信息debug。

5.如何编译使能 secureboot的版本
5.1. chipram部分
5.1.1. chipram\include\configs\sp9838aea_5mod.h
里面打开下面两个宏:

//#define CONFIG_SECURE_BOOT//#define CONFIG_ROM_VERIFY_SPL

=>

#define CONFIG_SECURE_BOOT
#define CONFIG_ROM_VERIFY_SPL

5.1.2. makefile
打开
sp9838aea_5mod_config下的红色那行。
sp9838aea_5mod_config : preconfig@$(MKCONFIG) $@ arm armv7 sp9838a spreadtrum sc9630@echo “CONFIG_SPL_32K = y” >> $(obj)include/config.mk@echo “CONFIG_EMMC_BOOT = y” >> $(obj)include/config.mk@echo “CONFIG_SCX35L64 = y” >> $(obj)include/config.mk@echo “CONFIG_UMCTL_28NM = y” >> $(obj)include/config.mk@echo “CONFIG_SP9630_SPL_BASE = y” >> $(obj)include/config.mk

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 16 /17

Secure Boot方案介绍及实施流程

 

@echo “CONFIG_SECURE_BOOT = y” >> $(obj)include/config.mk

@echo “CONFIG_USE64 = y” >> $(obj)include/config.mk

5.2. u-boot64部分
u-boot64\include\configs\sp9838aea_5mod.h

里面打开下面两个宏:

//#define CONFIG_SECURE_BOOT//#define CONFIG_ROM_VERIFY_SPL

=>

#define CONFIG_SECURE_BOOT
#define CONFIG_ROM_VERIFY_SPL

5.3. device/sprd部分( OTA升级)
device/sprd/scx35l64_sp9838aea_5mod/BoardConfig.mk# secure boot

BOARD_SECURE_BOOT_ENABLE := false

改为:

BOARD_SECURE_BOOT_ENABLE := true

3/28/16 Copyright 2014 Spreadtrum Communications Inc. Confidential and
Proprietary. 17 /17