32B11H在MCAL环境下串口代码升级与数据加密
-
本想在借助官方Secure Boot实现代码升级与加密,但Secure Boot没完全看懂,似乎是能实现,又似乎只能实现一部分功能。
整个过程细分为4部分;
1 - 加密固件;
2 - 二级BOOT固件;
3 - 用户App;
4 - 上位机;1-加密固件:
加密固件配合上位机,实现密钥写入,加密,密文写Flash等功能。其中:密钥写入,加解密算法移植于Crypto模块例程,密文写Flash为Fls模块。加密/解密对象为数据而非代码;由上位机发送明文,32B11H进行加密后写入一个密码扇区,写入的为密文而非明文。该密码扇区主要包括数据为:
1 - 以2048个随机数为基础数据,这些数据无物理意义;
2 - 产品出厂时的装订,校调数据;这些数据App中一定会用到;
3 - 用户自行设置的加密/解密数据;这些数据允许破解,直接跳转;加密固件与二级BOOT固件占用相同的Flash地址空间;通过JTAG进行烧录。在密钥,密码数据写入Flash无误后,相同Flash地址空间写入二级BOOT固件,加密固件被清除。
2 - 二级BOOT固件:
二级BOOT固件的作用主要是负责通过串口与上位机进行数据交互,完成App固件的烧录。二级BOOT固件不涉及加密/解密操作。如果需要密码确认,也只会涉及到解密操作,不会涉及密钥写入,数据加密操作。3 - 用户App:
用户App由二级BOOT进行串口烧录,App代码中会涉及到多处的密码认证和确认。因为有些数据属于工程量,破解时候这些数据是绕不开的。同样:APP固件也不会涉及密钥写入和加密操作。
展望:
如果上位机也能够实现同样的加密过程,则提供给现场人员或客户的的App升级固件也可以是密文,二级BOOT在解密为明文后,再写入对应的Flash地址。不过感觉含义不是很大。破解难点:
1 - 出厂后的MCU是不含加密固件的,密钥和加密过程属于无固件可破解。
2 - 写入密码区的数据基本以随机数为主,加密后写入flash。数据无规律可循。
3 - 密码包括App固件所需的工程变量,不允许直接跳转。
4 - 二级BOOT固件和App固件不包括加密环节,也规避了对密码扇区的误擦除和误写入。
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...