概述
物联网设备安全是一个十分重要的方面,为增强设备的安全性,BK7256的安全方案实现了secure boot、flash加解密、固件版本防回滚等功能,保证了固件(包括bootlaoder和app固件)的完整性、合法性和机密性。
secure boot采用ECDSA-384算法,保证了固件(包括bootlaoder和app固件)的完整性、合法性。逐级校验逻辑: bootROM强制从flash的起始地址对bootloader进行验签,验签通过后跳转到bootloader中执行;在bootloader中会对APP进行验签,验签通过后会跳转到APP中执行。secure boot功能通过eFuse开启,用户启用该功能后,系统将只能够运行指定私钥签名后固件。
flash加解密采用AES-XTS-256算法,保证了固件的机密性。解密过程由硬件自动完成,代码层无感。flash加解密功能通过eFuse开启,开启secure boot后该功能可选择是否启用。
版本防回滚功能:防止固件回滚到有安全漏洞的低版本上。app支持256个版本管理,开启secure boot后该功能自动启用。
硬件资源:
1. BK130
BK7256具有硬件安全模块BK130,BK130内部的OTP和ROM允许安全存储密钥材料和其他安全数据,支持以下加密算法的硬件实现:
Crypto algorithm: DES, AES-128/192/256, ChaCha20-128/256, SM4-128
Public key accelerator: ECDSA-P256/P384, RSA-2048/3072
Hash algorithm: SHA-224/256, SHA-384/512, Poly1305, SM3-512
True random number generator (TRNG)
Supports secure storage
Supports secure boot

BK130 architecture
2.eFuse
eFuse共有32个字节,功能定义如下:
Byte 00~10 : unused
Byte 11~29 : Firmware usage
Byte 30 : used for system control
Byte 31 : used for system control
重要
eFuse大部分被固件和系统控制分配使用,未使用部分不提供给客户使用;非易失存储建议使用OTP bank0 。
控制字节Byte31的位定义:
Bit 7: 1:close the JTAG interface; 0:use the JTAG interface
Bit 6: reserve
Bit 5: 1: enable FLASH AES encryption; 0: turn off FLASH AES encryption
Bit 4: 1:read prohibition of bytes 0:15
Bit 3: 1:write prohibition of bytes 0:15
Bit 2: 1:write prohibition of bytes 16:23
Bit 1: 1:write prohibition of bytes 24:29
Bit 0: 1:EFUSE all 32 bytes writes are prohibited
控制字节Byte30的位定义:
Bit[0] : Security Boot enable. 0: disable, 1: enable.
Bit[1] : Security Boot printout control. 0: enable. 1: disable
Bit[2] : Fast boot. 0: deepsleep fast boot 1: deepsleep sb boot
Bit[6:3]: Analog control
Bit[7] : bootloader printout control. 0: disable. 1: enable(Default disable)
3.OTP:
OTP分为4个bank:
bank0 : Reserved for user, 2k bytes
bank1 : Firmware usage, For security, 2k bytes
bank2 : Firmware usage, For security, 2k bytes
bank3 : For bk130
重要
OTP bank0提供给客户使用,通过配置表进行配置后使用BKFIL工具写入,配置方法见 bk_OTP_and_eFuse_usermenu
bank0:
用户进行使用和管理
bank1:
固件进行使用和管理
bl version、app version、ecdsa public key在安全功能开启时有效。
content |
start address |
allocate size(byte) |
Description |
---|---|---|---|
reserve |
0x4B004800 |
16 |
reserve |
OTA aes key |
0x4B004810 |
40 |
aes key used for OTA upgrade |
OTA aes IV |
0x4B004838 |
40 |
aes IV used for OTA upgrade |
bl version |
0x4B004860 |
40 |
used for bootloader anti rollback |
app version |
0x4B004888 |
40 |
used for app anti rollback |
ecdsa public key |
0x4B0048B0 |
104 |
public key for bootloader to verify the signature of app |
reserve |
0x4B004918 |
reserve |
bank2:
当安全功能开启的时候,该bank只能由硬件访问,外部不可见。
content |
start address |
allocate size(byte) |
Description |
---|---|---|---|
ecdsa public key |
0x4B0048B0 |
ecdsa384: 96 |
public key for BOOT ROM to verify the signature of bootloader |
AES256 key |
0x4B004918 |
32 |
used for image encryption on flash |
bank3:
bk130模块内部使用和管理
OTP和eFuse的配置及读写方法:
OTP和eFuse均为一次性存储器件,建议使用BKFIL工具进行写入,配置及读写步骤见 OTP和eFuse的配置及读写方法。