在用户程序区可以存放几组密钥信息,与PC下传的随机数按照一定的规则生成解密所需的密钥以保证每次加解密的密钥信息有差异,只要保证每次密钥是唯一的,数据的安全性是可以保证的。需要升级芯片中的程序时,PC机按照通信协议的格式下传指令,用户boot程序接收到指令后初始化各个变量和寄存器,关闭不需要的中断,下传的数据包交叉使用两种加密算法,包号是奇数时用TEA算法加密并同时下传两组随机数共16个字节,一组是本次解密所用,另一组是下一包解密所用,下传的数据包号是偶数时用AES算法加密。为提高运算速度,对AES算法的字节替换过程采用查表的方法。只要保证每次下传的有效数据长度相同,足以达到欺骗性,即使所有数据被截获,由于芯片内部的密钥无法读出,截获者也无法得到正确的明文。同时考虑到程序中数据容易处理,每次下传的有效字节数选择16的整数倍。boot程序将数据正确写入存储器后应向上位机返回正确状态,否则应返回出错信息以便处理。程序升级完成后上位机发出结束命令并下传校验字符,boot程序核对正确后擦除程序标志区并重新写入标识。
图1 流程图
用户程序升级成功之后,可以通过函数指针的方式调用该程序。函数在编译时都会被分配一个入口地址,该地址就是函数的指针。只要用一个指针变量指向这个函数的入口地址,就可以通过指针变量调用这个函数。函数指针的本质是指针变量,只不过该指针变量指向函数,读出程序标志区的运行地址就可以通过指针变量调用新写入的程序。
5、结束语
为应对网络安全,有效保护知识产权,本文提出了固件升级的数据加密方案,对于具有IAP功能的芯片具有普遍意义,不仅适用于网络远程升级,同样适用于本地升级。至于加密算法可以根据MCU的能力进行灵活选择。
|