产品安全解决方案
安全架构
产品的网络安全是一个系统工程,涉及到整个产品的各个层面。
HiDiTingV100版本可能涉及的威胁如下:
-
开机启动安全:
该部分主要涉及到系统启动过程中每一级镜像的校验机制。HiDiTingV100提供安全启动方案,包含完整的启动信任链校验,信任根是BootRom和eFuse,先通过BootRom校验根公钥,再校验二级签名,之后依次校验SSB签名、SELiteOS签名、APP签名和BT/DSP签名。
-
系统升级安全:
系统升级方案存在的安全威胁是文件本身的合法性和完整性。SSB和Firmware都可升级,采用数字签名方式对升级文件进行校验,SSB和Firmware都有版本防回滚机制,其版本号分别与eFuse中的版本进行认证,认证不通过将无法启动。
-
JTAG(Joint Test Action Group)调试安全:
JTAG调测功能在芯片出厂时默认打开,建议用户在出厂时通过eFuse永久关闭。
设备安全
基于安全性考虑,建议用户在最终产品中执行以下措施:
- 启用安全启动特性。
- 修改lifecycle为End User模式。
- SeLiteOS加密。请参见《安全启动使用指南》中的“快速启用安全启动”章节。
- 应用安装时使能应用完整性校验,避免恶意应用安装。
安全启动
HiDiTingV100支持安全启动。
安全启动开关
安全启动开关请参见《安全启动使用指南》中的“关键参数说明”章节。
关键数据安全存储
用户记录账号、密码等保密信息时,需要保证这些数据的存储安全,所以要求这些数据在存储之前进行加密保护。
使用密钥派生时,派生出的硬件密钥软件不可见,无法直接访问。
驱动安全注意事项
Cipher驱动
Cipher驱动实现了标准的对称加密AES、非对称加密RSA、ECC(Elliptic Curve Cryptography,椭圆曲线密码学)、SM2(商密2椭圆曲线公钥密码算法)签名验签、密钥协商、加解密、大数运算等非对称算法,随机数算法TRNG(True Random Number Generator,真随机数发生器)、摘要算法SHA256、密钥派生算法等,未使用任何私有算法。
使用时请注意:Cipher密钥的长度越长,安全等级越高,因此建议使用AES 128bit及以上的密钥、RSA 2048bit及以上的密钥,详细内容请参见《安全开发指南索引》。
Cipher JSI
OpenHarmony huks部件下crypto_lite模块封装第三方软件Mbedtls的C接口,为JS应用提供AES、RSA加解密、RSA签名验签、ECC密钥生成与协商、ECC签名验签、SHA256、SHA256-HMAC、Base64、MD5等算法接口。其中AES ECB模式以及Base64、MD5属于弱密码算法,不建议用于加解密等安全场景,否则会有安全风险。
其他使用安全注意事项
代码安全注意事项
代码错误引发的网络安全问题,一般都是源于最基本的代码规范问题,例如:指针越界、数组越界、入参不检查等错误。建议通过如下方法检查:
- 使用业界通用的代码健康扫描工具进行全覆盖扫描。
- 使用模糊测试工具,对所有API接口(包括设备驱动接口)进行全范围模糊测试。
- 使用业界通用的漏洞扫描工具对所使用的开源软件进行扫描。
可维可测注意事项
- 可维可测方案仅在调试时打开,Release版本建议用户关闭。
- HSO调试工具目前仅用于SDK问题定位时的调测日志打印。
- 可维可测接口详细使用方法请参见《DFX软件开发指南》。
OpenHarmony认证镜像烧写注意事项
OpenHarmony认证包含HUKS测试,工作密钥经加密后默认保存在“/user/app/user/maindata”中。当设备或单板烧写过旧版本OpenHarmony XTS镜像,则需要在烧写新版XTS镜像前,删除历史OpenHarmony版本在文件系统中创建的旧密钥,避免新版本HUKS使用错误的工作密钥导致XTS用例失败。OpenHarmony XTS认证镜像准备步骤如下:
- 烧写XTS镜像前,检查文件系统中是否有“/user/app/user/maindata”目录。如果已经存在该目录,则手动删除或格式化擦除FS。
- 烧写OpenHarmony XTS镜像。
- 开机执行XTS用例,检查HUKS用例结果是否全部通过。
应用及表盘市场安全注意事项
穿戴应用市场和表盘市场用于完整性验证的根公钥的保护方案由安全启动保障防篡改。当前方案作为参考设计使用,基于网络安全风险考虑,建议厂商最终的安全方案将根公钥预置到安全OS的安全存储或eFuse中。
安全调试
确保支持关闭JTAG/SSI调试接口
确保关闭JTAG/SSI/JLink等调试接口。
高
如不禁止,商用后产品可以通过对应JTAG/SSI/JLink接口调试。
客户商用阶段关闭调试接口,即
swd_soft_debug_en (bit 298):1
swd_en(bit299):1
ssi_en (bit300):1
禁止调试口后,产品无法通过对应JTAG/SSI/JLink接口调试。
禁止调试口,
swd_soft_debug_en (bit 298):1
swd_en(bit299):1
ssi_en (bit300):1
swd_soft_debug_en (bit 298):0、swd_en(bit299):0、 ssi_en (bit300):0
使能(1)禁止(1)
是
否
确保支持关闭USB虚拟串口功能
确保关闭USB虚拟串口功能,不通过USB打印日志或接收AT命令。
中
如不禁止,商用后产品可以通过USB接口打印日志或接收AT。
客户商用阶段关闭USB调试接口,即不定义CFG_DRIVERS_USB_AS_SERIAL。
禁止USB调试口后,产品无法通过USB接口打印日志或接收AT。
不定义CFG_DRIVERS_USB_AS_SERIAL。
不定义CFG_DRIVERS_USB_AS_SERIAL。
通过CFG_DRIVERS_USB_AS_SERIAL宏控制。
是
是
确保支持关闭UART日志接口
确保支持关闭UART日志接口。
中
如不禁止,商用后产品可以通过对应UART接口打印日志。
客户商用阶段关闭调试接口,即不定义SW_UART_DEBUG宏。
禁止调试口后,产品无法通过对应UART接口打印日志,无法响应AT命令。
不定义SW_UART_DEBUG宏。
定义SW_UART_DEBUG宏。
通过SW_UART_DEBUG宏控制。
是
否
安全启动
确保支持安全启动使能配置
确保REE、TEE固件的安全启动特性使能。
高
REE/TEE镜像可被篡改。
商用阶段客户使能该配置,写eFuse对应secure_boot_enable位域(bit715-718)为全FF。
启动时间比禁止安全启动慢百ms量级时间。
使能,对应secure_boot_enable位域(bit715-718)为全F。
禁止,对应secure_boot_enable位域(bit715-718)为0xA。
使能(1)禁止(0)
是
否
结论
HiDiTingV100产品有必要基于安全威胁分析采取相对应的安全措施。以下安全原则供参考:
-
适度的安全:
安全设计是基于特定的安全危险场景分析,考虑到性能、成本、业务影响,决策采用最合适的安全措施。
-
最小授权:
根据职责的需要,给用户、维护人员、网络单元、程序、进程等授予最小的权限和资源。这样能减少潜在的安全风险。
-
主动协同防御:
及时识别恶意攻击源,并在攻击造成显著危害前自动删除恶意用户与网络之间的连接。也可以降低连接的带宽和服务质量,以尽量减少负面影响。
-
纵深防御:
纵深防御原则涉及到对威胁的多重防御。例如,当一个防御层不够时,另一个防御层将防止造成进一步破坏。
免责声明
客户应充分评估自身产品的网络安全要求(包括但不限于:在实际量产产品中,选择安全加解密算法、关闭不需要的调试接口和命令等),并承担最终责任。HiDiTingV100产品提供的本注意事项文档帮助客户对自身产品进行网络安全加固。
HiDiTingV100产品在本文档中所描述的部分功能使用到了密钥来提供安全机制,客户需要妥善生成、烧写、使用并管理密钥(包括但不限于非对称密钥、对称密钥等),否则将自行承担相关风险。