完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
介绍 R128 下安全方案的功能。安全完整的方案基于标准方案扩展,覆盖硬件安全、硬件加解密引擎、安全启动、安全系统、安全存储等方面。
配置文件相关本文涉及到一些配置文件,在此进行说明。 env*.cfg配置文件路径: code">board///configs/env*.cfgsys_config.fex路径: code">board///configs/sys_config.feximage_header.cfg路径: code">board///configs/image_header.template.cfgsys_partition*.fex路径: code">board///configs/sys_partition.fex功能介绍R128 FreeRTOS 系统上支持如下安全功能 安全硬件下图是 ARM 为 M33 Star 提供的一种基于 TrustZone 的 SoC 架构参考实现 当 CPU 取指或者访问数据时,经过 SAU 与 IDAU 审查之后,携带安全属性,进入 AHB 总线。 由于 SAU/IDAU 机制只适用于 Arm M33 Star 处理器,那么 AHB 设备使用下列两种方法识别与应答这些携带安全属性的访问
Arm M33 Star TrustZone 简介Arm M33 Star TrustZone 与 Arm A 系列的 TrustZone 类似,在设计上,处理器都具有安全与非安全状态,非安全软件只能访问非安全内存。与 Arm A 处理器中的 TrustZone 技术不同, Arm M33 Star 的 Secure 和 Normal 世界是基于内存映射的,转换在异常处理中自动发生。 安全扩展功能除了 ARM TrustZone 安全扩展功能外,R128 在 SoC 设计上还实现了一些安全硬件来保障完整的安全特性。
模块大小 TZMA0128KB TZMA1128KB TZMA2256KB TZMA3256KB DSP_TZMA0256KB EXPSRAM_TZMA64KB LPSRAM_TZMA8MB FLASH_TZMA192MB
Secure ID,控制 efuse 的访问。efuse 的访问只能通过 sid 模块进行。sid 本身非安全,安全非安全均可访问。但通过 sid 访问 efuse 时,安全的 efuse 只有安全世界才可以访问,非安全世界访问的结果为 0。
硬件加解密引擎CE:Crypto Engine,是 AW SoC 中一个硬件加解密模块,支持多种对称、非对称、摘要生成算法。包含安全/非安全两套接口。 CE 驱动支持算法如下,但 CE 硬件加密模块支持的加密算法不仅限下列算法。 算法支持 AES‑ECB‑128/192/256√ AES‑CBC‑128/192/256√ AES‑CTR‑128/192/256√ AES‑OFB‑128/192/256√ AES‑CFB8‑128/192/256√ HASH‑MD5√ HASH‑SHA1√ HASH‑SHA224√ HASH‑SHA256√ HASH‑SHA384√ HASH‑SHA512√ RSA‑512√ RSA‑1024√ RSA‑2048√ CE具体接口可以在 CE | R128 Documents 找到,TRNG可以在 TRNG | R128 Documents 找到,这里不过多赘述。 安全启动安全固件构建安全固件与非安全固件打包过程、封装格式类似,仅在原本非安全打包方式基础上,对每个镜像加入签名信息。 code">source envsetup.shlunch_rtos R128_xxx_m33mrtos cleanmrtos_menuconfig # 开启CONFIG_COMPONENTS_TFM。注:非安全固件需关闭mrtoscreatekeys # 创建签名密钥,无需每次执行pack ‑s # 打包安全固件pack ‑s 打包完成后,生成安全固件,固件位于 out 目录下,文件名为rtos_freertos_{BOARD}_uart0_secure_[8|16]Mnor_v[NUM].img。其中 v[NUM] 表示固件的版本信息,NUM 为版本号,由安全固件版本号(见4.7 节)决定。 在首次进行安全固件打包之前,必须运行一次 createkeys 创建自己的签名密钥,并将创建的秘钥妥善保存。每次执行 createkeys 后都会生成新的密钥,因此不用每次都执行,除非需要更换密钥。 安全固件配置打包生成安全固件前,需确保 TFM 打开,在 M33 核执行 mrtos menuconfig 进入配置主界面,进行如下配置: code">System components ‑‑‑> aw components ‑‑‑> TFM Support ‑‑‑> 只有安全固件需要开始 TFM,非安全固件需要关闭,且仅有 M33 支持 TFM。启动流程R128 包含三个处理器,分别为 M33(ARM)、C906(RISC‑V)、HIFI5(DSP),仅 M33 支持安全隔离。 从安全性考虑,Brom 启动时,系统必须处于安全状态,因此,选择 M33 作为启动核。 R128 对于 nor 和 nand 方案采用不同的启动流程。对于 nor 方案,安全启动流程如下图所示。启动过程没有 uboot,由 boot0 直接启动安全和非安全 OS,其中 brom、boot0、S‑OS 位于安全域,M33 N‑OS、DSP OS、RISC‑V OS 位于非安全域。 对于 nand 方案,由于 nand 需要完整的 nand 驱动才能加载位于逻辑分区的数据,而 boot0 目前只有简单驱动,只能读取物理数据,uboot 有完整的驱动,才能读取逻辑数据。因此 nand 方案启动过程是由 boot0 启动 M33 S‑OS,再由 M33 S‑OS 启动 uboot,启动流程如下图所示。 校验流程对于 Nor 方案来说,Brom 加载并校验 sboot,通过后,sboot 加载 M33 S‑OS、M33 N‑OS、RISC‑V OS、DSP OS,并对他们进行校验。所有校验处理都在安全域进行,保障了校验过程的安全性。 对于 nand 方案来说,Brom 加载并校验 Sboot,再由 Sboot 加载和校验 M33 S‑OS,最后 Uboot 对 M33 N‑OS、RISC‑V OS、DSP OS 进行加载和校验 签名校验R128 支持两种签名校验,一种是软件 ECC‑256 算法,一种是硬件 SHA256‑RSA2048 算法,默认使用 SHA256‑RSA2048 算法。具体的签名校验方法配置在board/R128s2/pro/configs/image_header.template.cfg配置文件中,如下所示选择具体的签名校验算法: code">"magic" : "AWIH","hversion" : "0.5","pversion" : "0","key_type" : "rsa", #rsa/ecc"image" : {"max_size": "16384K"},配置完签名算法 key_type 后,在创建密钥执行 createkeys 时会自动根据配置文件生成对应的密钥,并在执行打包命令的时候会采用对应的签名校验算法进行固件打包签名。 信任链R128 整个安全启动过程中,以 efuse 中的根公钥 hash 为起点,通过层层校验,保障每一层固件在没有篡改的情况下正常运行。 在实现过程中,每一层可使用不同的签名密钥,充分保障了安全性。 烧写 rotpk.bin 与 secure enable bit烧写 rotpk.bin 与 secure enable bit,主要包括以下几种方式:
efuse 的硬件特性决定了 efuse 中每个 bit 仅能烧写一次。此外,efuse 中会划分出很多区域,大部分区域也只能烧写一次。详细请参考芯片 SID 规范。防回退R128 支持防止固件版本回退,打包过程中会根据配置文件image_header.template.cfg中的pversion 对应的版本信息加入到镜像的 Image Header 中。 在启动过程中,brom 在 sboot 校验之前,会读取 sboot 镜像 Image Header 中的版本信息,将该版本信息与 efuse 中 NV 区域保存的版本信息进行对比:
安全固件最多支持更新 32 个版本。安全量产方法支持三种量产方式:
TFMM33 Star 安全 OS 我们采用的 Arm 官方推出的 TF‑M(Trusted Firmware‑M),TF‑M 实现了ARMv8‑M 架构的 SPE(Secure Porcessing Environment),它是一种对标 PSA 认证的平台安全架构参考实现,方便 Chip、RTOS 与 Device 通过 PSA 认证。其软件框架如下图所示。 TF‑M 包含:
TFM 接口非安全端调用传入的非安全端 API 接口指针 pxCallback函数原型 code">uint32_t tfm_sunxi_nsc_func(Callback_t pxCallback);参数:
调用说明: 该函数用于安全非安全交互测试,在非安全端调用该函数之后,会切换到安全端,该函数在安全端会调用传入的非安全端 API 接口指针。按照给定的 key_name 将长度为 key_bit_len 的 key_data 烧写到对应的安全 efuse 区域函数原型 code">int tfm_sunxi_efuse_write(char key_name, unsigned char key_data, unsigned int key_bit_len);参数:
code">int tfm_sunxi_aes_with_hardware(crypto_aes_req_ctx_t *aes_ctx);参数:
调用说明: 调用之前,请注意对待加解密所需的数据密钥进行对应的 cache 操作在安全端设置 flashenc 所需的 nonce 值函数原型 code">void tfm_sunxi_flashenc_set_nonce(uint8_t *nonce);参数:
code">void tfm_sunxi_flashenc_enable(uint8_t id)/tfm_sunxi_flashenc_disable(uint8_t id);参数:
code">void tfm_sunxi_flashenc_config(uint8_t id, uint32_t saddr, uint32_t eaddr, uint32_t *key);参数:
code">void tfm_sunxi_flashenc_set_key(uint8_t id,uint32_t *key);参数:
code">void tfm_sunxi_flashenc_set_region(uint8_t id, uint32_t saddr, uint32_t eaddr);参数:
code">void tfm_sunxi_flashenc_set_ssk_key(uint8_t id);参数:
code">void tfm_sunxi_aes_encrypt_with_hardware_ssk(uint8_t dst_addr, uint8_t src_addr, int len);参数:
code">void tfm_sunxi_hexdump(const uint32_t *addr, uint32_t num);参数:
code"> void tfm_sunxi_sau_info_printf(void);参数:
code"> uint32_t tfm_sunxi_readl(uint32_t reg);参数:
code">void tfm_sunxi_writel(uint32_t reg, uint32_t value);参数:
code">int tfm_sunxi_efuse_read(char key_name, unsigned char key_data, size_t key_bit_len);参数:
code">System components ‑‑‑> aw components ‑‑‑> TFM Support ‑‑‑> code">c906>rpccli arm tfm_demosecure call 1 time, non‑secure call 1 time.secure call 2 time, non‑secure call 2 time.secure call 3 time, non‑secure call 3 time.secure call 4 time, non‑secure call 4 time.secure call 5 time, non‑secure call 5 time.secure call 6 time, non‑secure call 6 time.secure call 7 time, non‑secure call 7 time.secure call 8 time, non‑secure call 8 time.secure call 9 time, non‑secure call 9 time.secure call 10 time, non‑secure call 10 time.c906>rpccli arm tfm_crypto_demotfm aes ecb test success!c906>rpccli arm tfm_efuse_write rotpk E2990EC8B001F2732EE5517739F52F6177E80AAEE220B5DBDA928BC5940FD025#efuse中写入rotpkkey_hex_string: E2990EC8B001F2732EE5517739F52F6177E80AAEE220B5DBDA928BC5940FD025, buf_len: 64c906>rpccli arm tfm_efuse_read rotpk #efuse中读取rotpkefuse [rotpk] data:0x08133AA0: E2 99 0E C8 B0 01 F2 73 2E E5 51 77 39 F5 2F 61 |.......s..Qw9./a|0x08133AB0: 77 E8 0A AE E2 20 B5 DB DA 92 8B C5 94 0F D0 25 |w.... .........%|中提供的 TFM 接口和测试 demo 位于 lichee/rtos/components/aw/tfm 目录下。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
377 浏览 0 评论
543 浏览 0 评论
686 浏览 0 评论
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS系统定制开发
1348 浏览 0 评论
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明
695 浏览 0 评论
全志V85x硬件设计大赛作品精选第二期,快来Pick你心目中的最佳方案
91502浏览 3评论
2831浏览 1评论
5101浏览 1评论
Yuzuki Lizard 全志V851S开发板 –移植 QT5.12.9教程
16383浏览 1评论
关于全志T113开发板接7寸LCD屏幕显示异常问题的解决方案
1115浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:30 , Processed in 0.796033 second(s), Total 56, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号