0%

bl 加密手册

打开或者关闭加密

1
2
3
4
5
examples/usb/usb_mic/CMakeLists.txt
# 打开加密
set(BL_ENCRYPTING yes)
# 关闭加密
set(BL_ENCRYPTING no)

打开加密时的依赖项

烧入efuse key

image-20211022162941641

BouffaloLabDevCube -> View-> MCU -> Efuse Key

三个需要改的地方, AES MODE 选 None !!!

  • ef_key_slot2(hex) ce043c3e22ad711d4033c548970b0a7b Write Lock Read Lock 打勾

  • ef_key_slot3(hex) 0710340a96e1f0d3bbc355b2261b4c2b Write Lock Read Lock 打勾

改完后, 点击软件上的Create按钮, 生成efuse数据文件

板子和pc 使用typec 连接, 先按boot 按键0.5s, boot按键不要松开, 再接着另一个手指按reset按键, 两个按键一起按3s后, 两个按键同时松开, 此时按软件上的Refresh按钮, COM Port 中出现COM3, 选择COM3.

此处COM3 端口和烧bin的端口是同一个

点击软件上Program 按钮, 烧入生成的efuse数据文件.

注意事项

!!! efuse key只能烧写一次, 千万不能写错

key信息 ce043c3e22ad711d4033c548970b0a7b 0710340a96e1f0d3bbc355b2261b4c2b !!! 一定要保密, 不能泄露

为不同的客户定制不同key

产品可能会卖给多家客户,最好是为每一家客户定制一个key.

在代码根目录下:

1
2
3
4
5
6
7
8
9
10
11
cd tools/bflb_flash_tool/packing
# 重新生成一组aes_priv_key
./pack -g -a aes_priv_key -d
# 查看key的内容, 定制输出内容,一行16个字节,共输出两行,正好对应ef_key_slot的格式
hexdump -e '16/1 "%02x" "\n" ' -v aes_priv_key
efecc505370c9fa7f4867a3236229246 #第一行填入上面efuse key烧录界面中的 ef_key_slot2
fc3a6a3a593c934527268522c949ec04 #第二行填入上面efuse key烧录界面中的 ef_key_slot3
# 返回代码根目录
cd ../../../
# 重新加壳, 用新生成的key重新生成.pack.bin
python2 tools/bflb_flash_tool/packing/pack.py out/examples/usb/usb_mic/usb_mic.elf out/examples/usb/usb_mic/usb_mic.bin out/examples/usb/usb_mic/usb_mic.pack.bin

最终生成产物名字不叫usb_mic.elf, 如为$target_name.elf, 则命令变为

python2 tools/bflb_flash_tool/packing/pack.py out/examples/usb/usb_mic/$target_name.elf out/examples/usb/usb_mic/$target_name.bin out/examples/usb/usb_mic/$target_name.pack.bin

最终生成的aes_priv_key和$target_name.pack.bin就是为该客户定制的.

其中产线需要为该家客户烧录新生成的aes_priv_key和使用这个key重新加壳的$target_name.pack.bin

产出

make 生成的文件,在打开加密时, 需要使用

1
2
out/examples/usb/usb_mic
usb_mic.pack.bin

关闭加密时, 使用usb_mic.bin

如果需要发布给客户, 请加密并提供usb_mic.pack.bin, 最好在给到客户前把usb_mic.pack.bin改下名字, 不要带pack字样

不要给客户elf文件, elf文件没有保护关键的算法代码, 会造成泄露

加密后如何判断烧入板子后解密是否正常

打开加密后make生成的log, 最后有crc的信息

1
2
3
4
5
6
[ 97%] Building C object examples/usb/usb_mic/CMakeFiles/usb_mic.elf.dir/__/__/__/bsp/bsp_common/platform/syscalls.c.obj
[ 98%] Building C object examples/usb/usb_mic/CMakeFiles/usb_mic.elf.dir/__/__/__/bsp/board/bl702/board.c.obj
[100%] Linking C executable ../../../out/examples/usb/usb_mic/usb_mic.elf
Generate /home/liguang/work_space/bl_mcu_sdk/out/examples/usb/usb_mic/usb_mic.bin
Copy /home/liguang/work_space/bl_mcu_sdk/out/examples/usb/usb_mic/usb_mic.bin into download path
src CRC result: 47324

bin烧入板子后, 运行的log有

1
2
3
4
5
6
7
8
9
10
11
  ____               __  __      _       _       _     
| _ \ / _|/ _| | | | | | |
| |_) | ___ _ _| |_| |_ __ _| | ___ | | __ _| |__
| _ < / _ \| | | | _| _/ _` | |/ _ \| |/ _` | '_ \
| |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) |
|____/ \___/ \__,_|_| |_| \__,_|_|\___/|_|\__,_|_.__/

Build:14:03:25,Oct 22 2021
Copyright (c) 2021 Bouffalolab team
dynamic memory init success,heap size = 35 Kbyte
src crc result : 47324

两处的crc result 值相等, 证明解密正常