新唐的每颗MO/M4芯片内部均有一个96位的唯一ID码(UID),通过该UID码,用户可以对程序进行相应的加密,以保证其他人若拿到其程序,将程序烧录到同种MCU,功能也不能正常运行。
下面介绍一种通过MCU的UID码对程序进行加密的方法。
首先对MCU烧录程序时,需把密钥文件同时烧录到MCU的DataFlash(为了加大**难度,可将密钥的位数设置多点,数据设置复杂点),下图为通过ICP工具烧录程序的一个示意图:
MCU烧录程序后,首次上电时,首先读取DataFlash指定位置的密钥,并判断是否与之前烧录的密钥一致,以此来判断该MCU是否是第一次运行。若是第一次运行,首先擦除DataFlash的密钥,然后卖取MCU的UID码并进行加密运算,然后将加密运算后的结果(即密码)存储到DataFlash的指定位置;若不是第一次运行,读取MCU的UID码并进行加密运算,然后将加密运算后的结果与DataFlash 指定位置的密码进行比较。若比较结果一致,则解密通过,程序往下正常运行;若不一致,则解密不通过,程序进入死循环。
相应程序流程图如下:
使用这种加密方法有以下两个优点:1、烧程序时,不用制作专门的,可以生成加密数据的烧录器对芯片进行烧录,芯片首次运行时会自动生成加密数据;2、若客户的产品需要在用户端可以通过串口等升级程序,用这种加密方法,可以保证把程序发给客户升级,客户将该程序烧录至到其他同种类型的芯片上是不能正常运行的。
当然使用这种加密方法也有个缺点,就是必须保证产品出厂前MCU已运行过一次,即已将密钥擦余并已生成加密数据。
|