Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

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

    其它全志芯片讨论区
    r329 r328 r818 faq 技术支持
    1
    1
    204
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q1215200171
      budbool LV 8 last edited by

      问题描述

      正常情况下,需要在安全环境下开发安全相关功能。但是一旦开启安全功能就烧写掉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 Reply Last reply Reply Quote Share 0
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • Referenced by  q1215200171 q1215200171 
      • 1 / 1
      • First post
        Last post

      Copyright © 2022 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

      行为准则 | 用户协议 | 隐私权政策