潮声隔雨深 · 2022年01月04日

全志R329如何在Tina在不烧写secure bit下开发OPTEE安全应用?

请问全志R329如何在Tina在不烧写secure bit下开发OPTEE安全应用?

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2022年01月04日
本回答来源全志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的芯片上进行功能验证与测试。

你的回答
关注数
1
收藏数
0
浏览数
3821
极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息