请问全志R329如何在Tina在不烧写secure bit下开发OPTEE安全应用?
请问全志R329如何在Tina在不烧写secure bit下开发OPTEE安全应用?
本回答来源全志R329如何在Tina在不烧写secure bit下开发OPTEE安全应用?
问题描述
正常情况下,需要在安全环境下开发安全相关功能。但是一旦开启安全功能就烧写掉efuse中的secure bit,以后芯片就只能启动安全固件。
客户处于功能开发阶段,如果把很多芯片烧写成安全,会造成一定的浪费,客户希望在不开启安全的情况下,也能正常的开发OPTEE的TA/NA。
问题分析
处理之前,我们简单了解下TrustZone与Secure bit之间的关系。
TrustZone的作用范围是CPU(处理器、gic、cache、总线等)。Secure bit是一个开关,开启后,TZMA/SMC/SPC/EFUSE/CE等模块,其作用范围是外设。
正常使用时,需要TrustZone与Secure bit一起协同工作,才能保障整个系统的安全。
这里需要说明的是,在Secure bit没有烧写时,TrustZone依旧是起作用的,CPU依旧有安全态与非安全态,但是外设、存储等是没有安全属性的,所以CPU在非安全态也可以访问所有的外设、内存。
回到客户问题,OPTEE的安全应用TA与非安全应用NA交互是基于TrustZone硬件基础,所以是可以在Secure bit没有烧写时进行OPTEE TA/NA的开发。
解决办法
arm方案
对于arm32方案来说,非安全固件中默认就包含了OPTEE,可以直接参考《TinaLinux_安全开发指南》进行开发。
aarch64方案
对于aarch64方案来说,非安全固件中默认没有包含OPTEE,在tina/device/config/chips/<chip>目录加入如下补丁后,非安全固件中就会包含OPTEE。
diff --git a/configs/default/boot_package.cfg b/configs/default/boot_package.cfg
index 5b38539..2152e6e 100644
--- a/configs/default/boot_package.cfg
+++ b/configs/default/boot_package.cfg
@@ -2,6 +2,7 @@
;item=Item_TOC_name, Item_filename,
item=u-boot, u-boot.fex
item=monitor, monitor.fex
+item=optee, optee.fex
;item=logo, bootlogo.bmp.lzma
;item=shutdowncharge, bempty.bmp.lzma
;item=androidcharge, battery_charge.bmp.lzma
打包脚本修改
在tina/scripts加入如下补丁,其作用是在非安全情况下也对OPTEE中的公钥进行更新。如不更新,运行TA时对TA的校验将会失败,导致TA运行不了。
diff --git a/pack_img.sh b/pack_img.sh
index f8b11fa..78ced4f 100755
--- a/pack_img.sh
+++ b/pack_img.sh
@@ -1749,19 +1749,6 @@ function do_signature()
fi
fi
- # update optee pubkey
- if [ -f ${ROOT_DIR}/staging_dir/target/usr/dev_kit/arm-plat-${PACK_CHIP}/export-ta_arm32/keys/default_ta.pem ]; then
- ${PACK_TOPDIR}/scripts/update_optee_pubkey.py \
- --in_file optee.fex --out_file optee-new.fex \
- --key ${ROOT_DIR}/staging_dir/target/usr/dev_kit/arm-plat-${PACK_CHIP}/export-ta_arm32/keys/default_ta.pem
- if [ $? -eq 0 ]; then
- mv optee-new.fex optee.fex
- else
- pack_error "update optee pubkey error!"
- exit 1
- fi
- fi
-
if [ -f ${LONGAN_COMMON_DIR}/sign_config/cnf_base.cnf ] ; then
CNF_BASE_FILE=${LONGAN_COMMON_DIR}/sign_config/cnf_base.cnf
else
@@ -1907,6 +1894,18 @@ function do_pack_tina()
fi
fi
+ if [ -f ${ROOT_DIR}/staging_dir/target/usr/dev_kit/arm-plat-${PACK_CHIP}/export-ta_arm32/keys/default_ta.pem ]; then
+ ${PACK_TOPDIR}/scripts/update_optee_pubkey.py \
+ --in_file optee.fex --out_file optee-new.fex \
+ --key ${ROOT_DIR}/staging_dir/target/usr/dev_kit/arm-plat-${PACK_CHIP}/export-ta_arm32/keys/default_ta.pem
+ if [ $? -eq 0 ]; then
+ mv optee-new.fex optee.fex
+ else
+ pack_error "update optee pubkey error!"
+ exit 1
+ fi
+ fi
+
if [ "x${PACK_SIG}" = "xsecure" ] ; then
echo "secure"
do_signature
注意事项
按照上述办法可以进行在不烧写seucre bit情况下开发OPTEE的安全应用,但是由于外设、内存等资源的安全属性没有进行设置,因此务必在烧写secure bit的芯片上进行功能验证与测试。