HiSpark编程指南

- 调测资料
  - SDK Sample使用指南
    - 前言
    - 概述
    - Sample框架
    - 外设 Sample
    - SLE UART Sample
    - SLE UART DMA Sample
    - SLE Mouse Sample
    - SLE amic vdt with dongle
    - SLE microphone
    - SLE measure dis
    - BLE Lowpower Sample
    - BLE UART Sample
    - BLE Keyboard Sample
    - BLE SLE TAG Sample
    - BLE Mouse Sample
    - USB Keyboard Sample
    - USB Mouse Sample
    - USB AMIC VDT Sample
    - RCU
    - 多连接
    - air mouse
    - SLE MOUSE with Dongle
    - SLE OTA dongle
    - game mouse
    - BLE UUID
    - 缩略语
  - SDK二次开发网络安全注意事项
    - 前言
    - 产品安全解决方案
    - 结论
  - SDK开发环境搭建用户指南
    - 前言
    - 开发环境搭建
    - 编译SDK
    - 新建APP
  - 内存维测指导书
    - 前言
    - 简介
    - 内存维测功能
  - 射频AT测试指南
    - 前言
    - 射频测试AT指令
    - AT指令组包示例
    - 注意事项
  - 维测指导书
    - 前言
    - 概述
    - 日志说明
    - 日志分析
    - 问题定位
    - 典型案例
    - 常见问题FAQ
- 软件资料
  - AT命令使用指南
    - 前言
    - 指令说明
    - 通用AT指令
    - BT业务AT指令
    - 新增AT指令方法
  - DFU升级APK开发指南
    - 前言
    - 功能特性
    - 系统框架
    - 工程文件部署
    - 界面实现
    - 升级界面Fragment实现
    - 关于界面Fragment实现
    - 应用清单AndroidManifest
  - DFX软件开发指南
    - 前言
    - DIAG维测功能
    - 死机诊断
    - Dump解析
  - EFUSE使用指南
    - 前言
    - 概述
    - 使用软件接口读写EFUSE
    - 使用BurnTool烧写EFUSE
  - NFC TAG软件开发指导书
    - 前言
    - 概述
    - 开发指导
  - NV存储用户指南
    - 前言
    - NV简介
    - NV编译预置
    - NV API指南
    - 定制化NV结构使用介绍
    - 通过NV自定义传输数据最大长度
  - Release notes
    - 1.0.18版本描述文件
    - 1.0.17版本描述文件
    - 1.0.16版本描述文件
  - SDK开发指南
    - 前言
    - 概述
    - 系统接口
  - SDK接口变更说明书
    - 前言
    - BLE SDK接口变更说明
  - SP31 SLP使用指南
    - 开源版本
  - USB HID复合设备开发指南
    - 前言
    - 概述
    - 实现方式
  - 代码框架说明
    - 前言
    - SDK模块框架
    - SDK目录结构
    - SDK目录说明
  - 低功耗FAQ
    - 前言
    - 系统无法睡眠
    - IO无法唤醒系统
    - 唤醒后外设异常
    - 低功耗导致OTA升级异常
    - 功耗比预期高
    - 锁中断导致BT业务阻塞
    - 概率性狗超时
    - 供电模式&软件配置
    - 提前唤醒时间问题
  - 低功耗sample使用指南
    - 前言
    - 编译&测试
    - 系统状态管理
    - 用户指南
  - 低功耗开发指南
    - 前言
    - 低功耗概述
    - 低功耗方案
    - 开发指引
    - 功耗优化
    - 常见问题
  - 功率配置说明书
    - 前言
    - 射频功率配置说明
  - 升级方案使用指南
    - 前言
    - 概述
    - 升级包制作
    - 升级包传输
    - 升级包保存
    - 升级包本地升级
    - FAQ
  - 快速入门指南
    - 前言
    - 文档目录
    - 环境搭建
    - 基础功能开发
    - 调优
    - 特性开发
    - 测试报告
  - 星闪应用层SLE-Link协议
    - 前言
    - 概述
    - SLE Frame格式定义
    - 服务接口定义
    - 交互流程示例
  - 星闪软件开发指导书
    - 前言
    - 概述
    - Device Discovery接口
    - Connection Manager接口
    - SSAP Server接口
    - SSAP client接口
    - Low Latency接口
    - Transmission Manager接口
    - SLE Passkey接口
    - SLE Channel Map 接口
  - 红外学习使用指南
    - 前言
    - 红外学习方式
    - 通过比较器进行红外学习
    - 使用指南
  - 蓝牙软件开发指导书
    - 前言
    - 概述
    - GAP接口
    - GATT server接口
    - GATT client接口
  - 设备驱动开发指南
    - 前言
    - Pinctrl
    - GPIO
    - UART
    - SPI
    - I2C
    - ADC
    - DMA
    - PWM
    - WDT
    - Timer
    - Systick
    - TCXO
    - Flash
    - SFC
    - QDEC
    - KEYSCAN
    - PDM
    - USB_HID
    - USB_DFU
    - I2S
    - TRNG
    - 附：MIDDLEWARE
  - 音频编解码开发指导书
    - 前言
    - 概述
    - Audio Encoder
    - Audio Decoder
    - 调试与功能
- 工具资料
  - BurnTool工具使用指导书
    - 前言
    - BurnTool工具简介
    - 操作指南
    - FAQ
  - HiSpark Studio使用指南
    - 前言
    - 工具简介
    - 开发环境搭建
    - 工程管理
    - 工程配置
    - 编译运行
    - 软件包烧录
    - 栈分析和镜像分析
    - 工程调试
    - 串口控制台工具
    - Kconfig配置
    - GUI工程创建与使用
    - 高阶分析功能使用
    - 常见错误

### 该页内容

- 前言
- 产品安全解决方案
  - 免责声明
  - 安全架构
  - 设备安全
  - 安全启动
    - 安全启动开关
    - 安全启动流程
    - 密钥的配置和替换
  - 安全升级
  - 关键数据安全存储
  - 驱动安全注意事项
    - Cipher驱动
  - 其他使用安全注意事项
    - 代码安全注意事项
    - 可维可测注意事项
- 结论

# 前言

概述

BS2XV100交付包为芯片解决方案交付包，主要包括芯片资料、硬件资料、SDK软件包、软件参考设计以及软件资料等。用户可基于此芯片解决方案交付包，开发各种自定义的产品。

本文档从网络安全的角度，重点分析基于本交付包开发的产品在使用过程中，可能面临的与本交付包中SDK软件包相关的网络安全的威胁，同时，针对性地给出相应的解决方案。

产品版本

与本文档相对应的产品版本如下。

产品名称 | 产品版本
--- | ---
BS2X | V100

读者对象

本文档主要适用于以下工程师：

- 技术支持工程师

- 软件开发工程师

符号约定

在本文中可能出现下列标志，它们所代表的含义如下。

符号 | 说明
--- | ---
| 表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。
| 表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。
| 表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。
| 用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。
| 对正文中重点信息的补充说明。 “说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。

修改记录

文档版本 | 发布日期 | 修改说明
--- | --- | ---
03 | 2025-05-30 | 更新“安全启动”小节内容。
02 | 2025-01-14 | 新增“免责声明”小节内容。 更新“安全升级”小节内容。 更新“可维可测注意事项”小节内容。
01 | 2024-08-29 | 更新“安全架构”小节内容。 更新“安全启动开关”、“安全启动流程”小节内容。 新增“密钥的配置和替换”小节内容。 更新“关键数据安全存储”小节内容。
00B02 | 2024-01-08 | 更新“设备安全”小节内容。
00B01 | 2023-12-15 | 第一次临时版本发布。

# 产品安全解决方案

## 免责声明

客户应充分评估自身产品的网络安全要求（包括但不限于：在实际量产产品中，选择安全加解密算法、关闭不安全协议telnet、关闭不需要的调试接口和命令等），并承担最终责任。本产品提供的本注意事项文档帮助客户对自身产品进行网络安全加固。

本产品在本文档中所描述的部分功能使用到了密钥来提供安全机制，客户需要妥善生成、烧写、使用并管理密钥（包括但不限于非对称密钥、对称密钥等），否则将自行承担相关风险。

## 安全架构

产品的网络安全是一个系统工程，涉及到整个产品的各个层面。

BS2X版本可能涉及的威胁如下：

- 开机启动安全

  该部分主要涉及到系统启动过程中每一级镜像的校验机制。BS2X提供安全启动方案，包含完整的启动信任链校验，信任根是BootRom和EFUSE，先通过BootRom校验secboot和根公钥，再由secboot校验启动flashboot，然后由flashboot校验启动APP。安全启动详细流程请参见“安全启动流程”。

- 系统升级安全

  SDK提供镜像升级功能，包括升级flashboot和APP，其中flashboot采用了双备份机制，该机制可以防止系统在升级写flashboot中掉电，flashboot被破坏带来的风险问题；系统提供对升级镜像校验功能，在写入flash前，对系统image进行校验，确保写入的镜像的安全。

- JTAG安全调试

  JTAG调试功能默认开启，在正式商用发布时，需要将JTAG调试功能进行关闭。对JTAG的关闭是通过EFUSE对应的bit操作的。SDK提供专门安全启动使能补丁包，来对JTAG进行禁用操作。

- UART烧录口

  不支持关闭

- 命令串口口

  命令串口功能默认打开，方便客户调试使用客户不使用时需要关闭TEST_SUITE、AT_COMMAND、SW_UART_DEBUG宏。

## 设备安全

基于安全性考虑，建议用户在最终产品中执行以下措施：

- 启用安全启动特性。

- 永久关闭JTAG调试功能。

- 永久关闭UART烧录口。

## 安全启动

BS2X支持安全启动。

### 安全启动开关

BS2X芯片的安全启动，需要通过芯片的efuse使能。

在安全使能前，需要将secboot镜像（包括public key等信息）的hash值烧写入到efuse区域中，一旦将secboot镜像的hash值烧写到efuse区域中，将无法更改，因此，必须确保secboot签名后的image不能再变动。

在完成secboot镜像的hash值烧写后，需要通过efuse使能安全启动，一旦使能bit烧写成功，芯片重启后，将执行安全校验。

SDK将提供专用的安全使能补丁包给客户使用，该补丁包中包含安全启动的efuse函数。

### 安全启动流程

BS2X的安全启动校验的执行过程，如图1所示。

图 1 安全启动执行图

1. BootRom启动secboot流程：

   BootRom固化在芯片中，其自身不会改变，可以保证安全可信。BootRom启动后，加载二级引导程序secboot。

   BootRom校验及加载secboot的流程：

   1. BootRom读取secboot image（包括public key等数据信息），对该image进行hash计算，计算出Hash值。

   2. BootRom根据从efuse中读取事先烧录的secboot的hash值，然后进行对比。

   3. 如果比对成功，则证明secboot没有篡改，则继续引导执行secboot。

   4. 如果比对失败，则证明secboot被破坏，则芯片终止启动。

2. secboot启动flashboot镜像。

   secboot启动成功后，会对flashboot进行启动校验。

   seboot使用已经校验的public key，对flashboot进行签名校验，如果校验成功，则启动flashboot。

   flashboot采用双本份机制，如果flashboot A区校验失败，则secboot将尝试校验flashboot B区。

   如果这个分区都校验失败，则终止启动。

3. flashboot校验启动APP镜像。

   flashboot启动成功后，开始对APP image进行签名校验；用户可以使用的单独为APP单独生成public key，也可以和flashboot使用相同的public key；

   如果APP校验失败，则终止启动。

### 密钥的配置和替换

SDK提供了各个系统的签名配置文件，分别用来对secboot、flashboot和APP镜像进行签名。

> 须知： SDK给出的key文件只作为开发参考使用，客户必须要替换成自己的key文件。

以BS21A为例，如下所示：

build\config\target_config\bs21a\sign_config\flashboot_bs21a_n1200_sec.cfg

build\config\target_config\bs21a\sign_config\flashboot_bs21a_slekey_n1200.cfg

build\config\target_config\bs21a\standard_bs21a_slekey_can_n1200.cfg

客户可以按图中所示配置秘钥：

签名所用的秘钥文件，存在放在以下目录：

build\config\target_config\bs21a\sign_config\rsa_3072_oem_root_private_key.pem

## 安全升级

BS2X支持安全升级，升级详细处理，请参见《BS2XV100 升级方案 使用指南》。

## 关键数据安全存储

用户记录账号、密码等保密信息时，需要保证这些数据的存储安全，所以要求这些数据在存储之前进行加密保护。

## 驱动安全注意事项

### Cipher驱动

Cipher驱动实现了标准的对称加密AES、非对称加密RSA、摘要算法SHA256、密钥派生算法等，未使用任何私有算法。

使用时请注意：Cipher密钥的长度越长，安全等级越高，因此建议使用AES 128bit及以上的密钥、RSA 3072bit及以上的密钥。

## 其他使用安全注意事项

### 代码安全注意事项

代码错误引发的网络安全问题，一般都是源于最基本的代码规范问题，例如：指针越界、数组越界、入参不检查等错误。建议通过如下方法检查：

- 使用业界通用的代码健康扫描工具进行全覆盖扫描。

- 使用模糊测试工具，对所有API接口（包括设备驱动接口）进行全范围模糊测试。

- 使用业界通用的漏洞扫描工具对所使用的开源软件进行扫描。

### 可维可测注意事项

- 可维可测方案仅在调试时打开，Release版本建议用户关闭。

- HSO调试工具目前仅用于SDK问题定位时的调测日志打印。

- 可维可测接口详细使用方法请参见BS2X维测系列文档中描述。

# 结论

BS2X产品有必要基于安全威胁分析采取相对应的安全措施。以下安全原则供参考：

- 适度的安全

  安全设计是基于特定的安全危险场景分析，考虑到性能、成本、业务影响，决策采用最合适的安全措施。

- 最小授权

  根据职责的需要，给用户、维护人员、网络单元、程序、进程等授予最小的权限和资源。这样能减少潜在的安全风险。

- 主动协同防御

  及时识别恶意攻击源，并在攻击造成显著危害前自动删除恶意用户与网络之间的连接。也可以降低连接的带宽和服务质量，以尽量减少负面影响。

- 纵深防御

  纵深防御原则涉及到对威胁的多重防御。例如，当一个防御层不够时，另一个防御层将防止造成进一步破坏。