基于DSP 嵌入式软件的安全设计策略
2020-09-11刘林
刘林
长沙瀚鹏电子技术有限公司 湖南长沙 410221
DSP 拥有卓越的性能、超强的运算能力,已广泛运用于工业控制、消费类电子领域。随着大量基于DSP 芯片设计的产品投放市场,如何防止设计成果不被盗取,知识产权不遭受侵犯,已成为嵌入式软件设计者的重要考虑因素。本文以TI 公司的TMS320F2812芯片为介绍对象,提出了一种可以用于DSP 嵌入式系统的加密、解密,并有效防止嵌入式代码被非法提取的方法[1]。
1 加密原理
外界非法提取嵌入式代码主要通过JTAG 口连接MCU 提取二进制机器码,因此,我们需要从JTAG 入手防止上述情况的发生。TMS320F2812 芯片有加密模块CSM(Code Security Module)可以使用,其片上Flash 都包含了一个CSM 代码加密模块。如果芯片被加密,那么就禁止任何未授权的用户访问片内存储器——即禁止了代码被复制和逆向操作。代码加密模块(后简称CSM)可以保护片内Flash、OTP、和L0/L1SARAM 存储区的内容[2]。以TMS320F2812 为例,CSM 模块由起始地址为0x3F7FF8 的128位密匙(8 个16 位单元)组成,分别是KEY0、KEY1、KEY2、KEY3、KEY4、KEY5、KEY6、KEY7,映射到FLASH 的地址是0x3F7FF8-0x3F7FFF。默认情况下,128 位密匙内容全为1,因此我们可以随意对上述的片内存储区进行擦除、烧写工作;如果128 位密匙内容全为0,DSP 芯片将被锁住,不再可能被调试连接或者重新烧写程序了;上述两种情况之外,就是用户可以设置密码,对程序进行加密和解密操作。DSP 可以自检加密与否,以及执行加密后密码对比、解密,过程流程如下图所示。
图1 DSP 密码比对过程
对程序加密有两种方式:
(1)CCS 编译器窗口配置加密,如下图对窗口的KEY0-KEY7 配置加密密码。
图2 CCS 编译器窗口配置加密密码
(2)在DSP2833x_CSMPasswords.asm 源码中,设置密码,如下图为密码设置区。
图3 DSP2833x_CSMPasswords.asm 源码设置密码
(3)硬件设计。硬件是基于DSP 控制的外围电路,在多级程序嵌套应用中,操作FLASH 需要进行解密操作。为了加强解密的安全措施,使DSP 芯片解密更安全、方便,在硬件设计上外加了一片EEPROM 存储器,用于片段密匙存储,同时,在读取和写入EEPROM 片段密匙时加入DES 加密算法,避免在DSP 读取密匙时,外部通过数据流非法获取密码片段。
图4 硬件设计
2 DES 加密算法
DES 算法为密码体制中的对称密码体制,又被称为美国数据加密标准。明文按64 位进行分组,密匙长64 位,密匙长64 位,密匙事实上是56 位参与DES 运算,第8、16、24、32、40、48、56、64 位是校验位,使得每个密匙都有奇数个1,分组后的明文组和56 位的密匙按位替代或交换的方法形成密文组的加密方法。
其入口参数有三个:key、data、mode。Key 为加密解密使用的密匙,data 为加密解密的数据,mode 为其工作模式。当模式为加密模式时,明文按照64 位进行分组,形成明文组,key 用于对数据加密,当模式为解密模式时,key 用于对数据解密。实际运用中,密匙只用到了64 位中的56 位,这样才具有更高的安全性。
图5 DES 算法流程图
3 多级程序嵌套解密处理方案
两级以上嵌套的嵌入式程序,在第一层程序即boot 程序中就需要对密码设置进行加密,但是这样会使第二层程序或者第三层应用程序无法进行FLASH 操作(擦除、烧写等),因此,第二或者第三层程序操作FLASH 之前必须要进行解密操作[3]。解密方案具体实施如下:首先,在boot 程序通过上述两种方式对PWL(password locations)0x3F7FF8-0x3F7FFF 区进行密码设置;然后,在第二层程序和第三层应用程序要擦除或烧写FLASH 的代码前面,使用CsmUnlock 函数进行解密操作;由于加密时,将密码部分片段DES 算法计算后,写入特定的EEPROM 空间,在解密时,MCU 可从EEPROM 读出此密码片段,DES 算法解析后将密码进行重组,完成程序的解密工作;最后,待FLASH 操作完成,重新对FLASH 进行加密操作。具体解密流程如下图所示。
图6 解密流程
4 结语
通过对DSP 芯片设置密码,以及使用EEPROM 存储密匙片段,可以安全地、可靠地进行加密解密操作,并防止嵌入式代码的盗取,有效的保护设计者的知识产权权益。