加密加签
1. 安全解决方案
GR5xxx系列芯片采用芯片内部加密引擎与外部配套工具相配合的方式,提供一套完整的安全解决方案。
开发者可以通过工具(如GProgrammer)对芯片进行安全配置,随后通过芯片内部ROM发起的安全启动,实现对芯片的保护。
安全解决方案主要包括系统配置区(System Configuration Area,SCA)的消息认证、固件及数据加解密和数字签名。
GR5xxx 低功耗典型值如下(更多详情见对应芯片Datasheet)
| 芯片 | 加密 | 加签 | SCA安全算法 | Firmware安全算法 | 数据安全算法 | 签名安全算法 |
|---|---|---|---|---|---|---|
| GR551x | √ | √ | HMAC-SHA256 | ECC P-256 & PRESENT-128 | PRESENT-128 | RSASSA-PSS |
| GR5525 | √ | √ | HMAC-SHA256 | ECC P-256 & PRESENT-128 | PRESENT-128 | RSASSA-PSS / ECDSA |
| GR5526 | √ | √ | HMAC-SHA256 | ECC P-256 & PRESENT-128 | PRESENT-128 | RSASSA-PSS |
| GR533x | × | √ | × | × | x | ECDSA |
2. 工具端工作流程
生成firmware,data,hmac, signature等密钥信息;
根据以上数据,生成Efuse烧录文件:Encrypt_key_info.bin和Mode_control.bin等
工具端烧录Encrypt_key_info.bin和Mode_control.bin至Efuse,使能芯片硬件加密模式
工具端加密加签Firmware,会再Firmware添加以下信息:
firmware pub key相关参数
signature pub key相关参数
signature pub key Hash数据
加密固件文件的signature
工具端烧录加密加签固件时,会加密烧录SCA区域信息,并附上HMAC
3. 设备端工作流程
读取Efuse信息,以判断芯片是否使能硬件加密模式,以及是否开启SWD;
触发Efuse controller将各key发送至Keyram;
计算SCA区域信息HMAC是否与SCA存储HMAC匹配,完成SCA信息验证;
使用Data Key解密SCA区域信息,取得boot info;
根据boot info确定firmware load位置和大小,获取signature pub key相关参数,signature pub key Hash数据,加密固件文件的signature;
计算signature pub key相关参数Hash,与Efuse中Hash进行匹配验证;
使用signature pub key相关参数计算出signature pub key;
使用signature pub key对加密固件文件的signature进行解密获取工具端计算的firmware文件Hash
对于firmware文件Hash计算得到摘要,与工具端计算的firmware文件Hash进行匹配验证
signature验证通过后,获取firmware尾部firmware pub key相关参数,与efuse中生成firmware key参数计算出对称密钥FW Code Key;
4. 工具端(GProgrammer)加密加签操作
输入Name和ID,配置Fimware Key(首次生成选择Using Random Key),Security Mode,SWD,Sign算法(仅适合GR5525),生成Efuse File
烧录Encrypt_key_info.bin和Mode_control.bin Efuse File至芯片端;
选择Product Info,Random Number(首次生成选择Using Random Number),需要加密加签的Firmware文件
Encrypt and Sign生成加密加签Firmware文件
5. 工具端(GProgrammer)仅加签操作
仅加签模式是后续扩展功能,rom启动时不会对跳转固件进行signature验证,此模式应用于app bootloader对user app firmware或DFU Firmware进行验证
仅加签模式无需烧录生成Efuse File,因此需要将Public_key_hash.txt中signature pub key Hash数据填写至app bootloader配置文件中
取消勾选Encrypt,仅Sign对目标Firmware进行加签
6. 注意事项
产品使用应用中,会有app bootloader firmware和user app firmware,对两个文件进行加密加签时,须使用相同的firmware.key和random.bin,否则硬件加载的是app bootloader firmware配置的FW Code Key,对user app firmware会解密失败,导致跳转失败。 若首次生成加密文件时,勾选Using Random Key和Using Random Nuber,后续加密加签固件时,应选择已生成后的firmware.key和random.bin