安全配置
通用安全配置
安全启动配置主要用于配置 BL1 与 BL2 安全启动相关信息:
secureboot_en
- 可选项,表示安全启动是否使能,默认不使能。
flash_aes_en
- 可选项,表示 FLASH AES 加密是否使能,默认不使能。
flash_aes_key
- 可选项,表示 FLASH AES 加密密钥,当flash_aes_en
使能时,必须配置。
root_key_type
- 可选项。默认使用 ec256。配置 BL1/BL2 签名的公钥类型,可选值为 ec256,rsa2048。
root_pubkey
- 可选项,量产版本必须配置。BL1/BL2 公钥文件。
root_privkey
- 可选项,量产版本必须配置。BL1/BL2 私钥文件。构建工具会使用私钥对 BL2 进行签名。
debug_key_type
- 可选项。默认使用 ec256。配置安全调试签名的公钥类型,可选值为 ec256,rsa2048。
debug_pubkey
- 可选项,量产版本必须配置。安全调试公钥文件。
debug_privkey
- 可选项,量产版本必须配置。安全调试私钥文件。
备注
为简化配置,BL1/BL2 使用同一公钥进行签名。
安全外设配置
安全外设通过 ppc.csv 进行配置,配置示例如下:
Device |
Secure |
Privilege |
---|---|---|
uart0 |
N |
N |
uart1 |
Y |
Y |
gpio0 |
Y |
Y |
gpio1 |
Y |
N |
配置表固定三列:
Device
- 必选项。表示设备名字,支持的设备名字参考 设备名字。
Secure
- 可选项,表示设备是否属于安全外设,安全外设仅能在安全世界访问。不配置时表示非安全外设。
Privilege
- 可选项,表示设备是否属于特权外设,特权外设仅能在处理器特权状态下能访问。不配置时表示非特权外设。
备注
如果可配置设备不在 ppc.csv 中,表示非安全设备,非特权设备。
可配置设备
TBC
代码生成
对于 ppc.csv 中一行,在 security.h 中会生成两个宏用于标识设备安全属性。
Device |
Secure |
Privilege |
---|---|---|
uart0 |
FALSE |
FALSE |
以上表 uart0 配置为例,会生成下述代码:
#define GEN_SECURITY_DEV_UART0_IS_SECURE 0
#define GEN_SECURITY_DEV_UART0_IS_PRIVILEGE 0
另外,还会生成四个对外接口:
#define DEV_IS_PRIVILEGE(dev) GEN_SECURITY_DEV_##dev##_IS_PRIVILEGE
#define DEV_ID_IS_PRIVILEGE(dev, id) GEN_SECURITY_DEV_##dev##id##_IS_PRIVILEGE
#define DEV_IS_SECURE(dev) GEN_SECURITY_DEV_##dev##_IS_SECURE
#define DEV_ID_IS_SECURE(dev, id) GEN_SECURITY_DEV_##dev##id##_IS_SECURE
在 Armino 中,可通过调用上述四个对外接口就可以访问外设安全属性。
安全块外设配置
块外设通过 mpc.csv 进行配置,配置示例如下:
Device |
Offset |
Size |
Secure |
---|---|---|---|
mem0 |
16k |
TRUE |
|
mem0 |
32k |
FALSE |
|
mem0 |
16k |
TRUE |
|
mem1 |
0x10000 |
64k |
TRUE |
配置表固定四列:
Device
- 必选项。设备名字。
Offset
- 可选项。设备内部偏移。
未配置,如果为该设备首个配置块,请 Offset 为 0,否则表示上一块结束地址。
Offset + Size 大小不能超过设备存储总大小。
Offset 同一设备上一块地址不能重叠。
Size
- 必选项。配置块大小。必须按设备块大小对齐。
Secure
- 可选项。配置块安全属性,未配置时值为 False。
关于可配置设备,设备存储空间大小,设备块大小,请参考 块内存安全访问。
备注
设备块未配置时,默认为非安全。
FLASH 数据口安全配置
TODO
DMA 安全配置
TODO