当前文档版本为 v1.2.2,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

Basic: Firmware Encryption

1 功能概述

本例程演示芯片通过固件加密、硬件解密的机制保护 Flash 关键代码的方法。

警告

本功能需要通过 PanLink 工具烧录芯片 eFuse 的特定地址,eFuse 的物理特性是同一地址只可烧录一次,无法还原,因此当某颗芯片使能加密功能后,其将只能正常运行加密后的固件,无法再正常运行普通的明文固件

2 环境要求

  • Board: pan108xxa1_evb / pan108xxa3_evb / pan108xxb1_evb / pan108xxb5_evb

3 编译和烧录

例程位置:zephyr\samples_panchip\basic\fw_encryption

使用 ZAL 工具可以对其进行编译、烧录、打开 VS Code 调试等操作。关于 ZAL 工具的详细介绍请参考:Zephyr APP Launcher 工具介绍

4 演示说明

  1. 将例程编译后烧录至未开启加密功能的 EVB 核心板芯片中,成功后可看到如下的串口打印 Log:

    Try to load HW calibration data.. DONE.
    - Chip Type         : 0x83
    - Chip MP Version   : 0x0
    - Chip CP Version   : None
    - Chip FT Version   : 8
    - Chip MAC Address  : D0000C091094
    - Chip Flash UID    : 6617030C038F91036617030C038F9103
    - Chip Flash Size   : 512 KB
    *** Booting Zephyr OS build zephyr-v2.7.0  ***
    Hello World! pan108xxb5_evb
    
    is_fw_encryption_enabled = 0
    

    从上述 Log 可以看出程序初始化成功,且 App 获取到当前芯片加密功能是未开启(is_fw_encryption_enabled = 0)状态,但并未打印例程后续相关 Log,原因是程序在执行到加密区域内容的时候,由于当前芯片没有使能加解密功能,但当前烧录的例程固件已经加密,因此程序执行到加密函数的时候会出错(Hardfault),导致后续程序执行异常。

  2. 使用量产烧录工具 PANLINK,向芯片 eFuse 写入加密 AES Key、加密 Flash Offset,并开启芯片加密功能(具体方法请参考 Firmware Encryption 开发指南 文档中的 使用 PANLINK 制作加密芯片 小节中的介绍)。

  3. 开启芯片加密功能后,重新执行当前例程程序,可以看到串口打印 Log 发生了变化:

    Try to load HW calibration data.. DONE.
    - Chip Type         : 0x83
    - Chip MP Version   : 0x0
    - Chip CP Version   : None
    - Chip FT Version   : 8
    - Chip MAC Address  : D0000C091094
    - Chip Flash UID    : 6617030C038F91036617030C038F9103
    - Chip Flash Size   : 512 KB
    *** Booting Zephyr OS build zephyr-v2.7.0  ***
    Hello World! pan108xxb5_evb
    
    is_fw_encryption_enabled = 1
    
    Hello from encrypted_test_function!
    Secret calcucation result: 0x4b052201
    

    从上述 Log 可以看出,App 获取到当前芯片加密功能是已开启(is_fw_encryption_enabled = 1)状态,且成功执行了后续 Flash 加密区域中的代码。

5 开发说明

Firmware Encryption 是一个需要软硬件配合的机制,在编译固件的时候对固件中的特定区域进行加密,然后在程序执行的时候由硬件自动对加密的固件区域进行解密,因此:

  1. 在编译固件的时候,需要在 SDK 中开启加密相关的 Config,并配置 AES 加密秘钥和固件加密的位置

  2. 在烧录程序的时候,需要通过 PANLINK 烧录芯片 eFuse 中的相关区域以使能固件解密功能并配置秘钥和加密区域位置

关于 Firmware Enccryption 更详细的说明请参考 Firmware Encryption 开发指南 文档。

6 RAM/Flash资源使用情况

Memory region         Used Size  Region Size  %age Used
           FLASH:       15372 B       384 KB      3.91%
            SRAM:        4128 B        64 KB      6.30%