【FAQ】全志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的芯片上进行功能验证与测试。
-
-
-
-
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号