TI-DSP程序加密收集分享

2019-07-15 00:27发布

目前,最常用的TI DSP有C2000、C5000和C6000三大系列。
C2000是TI的入门级DSP,主要用在工业控制领域,如电机控制(变频调速)、数字电源等,以及计算机外设,如打印机、扫描仪等;
C5000是TI高性价比、低功耗DSP,应用范围广,特别在通信领域,如路由器、交换机、嵌入式WEB服务器等;
C6000是TI高性能DSP,主要用在各种高档数字信号处理领域,如数字图像处理(编码压缩)、频谱分析(FFT)、数字滤波器(FIR)等。
1、C2000DSP的F24xxA和F28xx系列使用片内Flash作为程序存储器,自带加密机制,128位密钥,要实现程序加密就很简单了,有两种加密方法:
(1) "显式“密钥法,使用TI提供的Flash在线编程工具(On-chip Flash Programmer)时,在“Code Security Password”区域设置好128位密钥,然后点击“Program Password”确定密钥设置。在设置密钥的时候,注意不要将Key0-Key8全设置为0,如果全为0,则芯片将会永久“Lock”!
这种方式在产品批量生产时除设计者知道密钥外,生产时的编程写入人员也知道。
(2) ”隐式“密钥法,设计者将128位密钥用汇编代码方式嵌入源程序中,并在连接配置文件(命令文件)*.CMD中将其定位到DSP密钥存储区,最后编译生成.out文件一起写入Flash中。这种方式就只有设计者本人知道密钥了。
2、C5000和C6000均使用外部Flash,程序无法加密。这时可以采用内置大容量Flash、可加密的单片机(如性价比高的STC51系列单片机)来完成加密工作,具体做法是:
将DSP程序写入单片机的片内Flash中,单片机通过模拟SPI口将程序加载到DSP片内RAM中运行。这种方法程序被解密复制的可能性有2种:一是单片机被解密,唯一防解密的途径是采用最新型号(或版本)的单片机,增加破解难度和时间;二是用逻辑分析仪监视SPI总线上的加载数据流,但这种破解方法难度较大,一般人不易掌握,特别是DSP的C语言源程序编译后都比较大。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhangmangui
1楼-- · 2019-07-15 11:45
3.1 相关算法[3]

(1)3DES算法
  

数据加密标准DES(Data Encryption Standard)产生于20世纪70年代。经过20多年的使用,目前仍是一个世界内的加密标准。这说明它的安全性相当高。它是一个分组加密算法,以64位分组对数据加密。密钥K的长度也是64位,可以是任意数。DES算法是对称的,加密与解密使用相同的算法与密钥(除了密钥的编排顺序不同)。因而可以说,DES算法的保密性完全依赖于密钥K。
  
目前对DES的破译,最有效的是穷举功击。之所以说DES已经不太安全,是因为其密钥短。以现今的运算技术来说,计算量已经不算很大。不过,如果增加密钥的长度,其安全性也可以相应地增强。3DES正是基于这样的原理。加密时,使用2个不同的密钥K1和密钥K2对1个分组进行3次加密。也就是说,先用密钥K1加密,然后用密钥K2解密,最后用密钥K1加密;解密时则先用密钥K1解密,然后用密钥K2加密,最后用密钥K1解密。
  
计算式如下:
  
C=E1(D2(E1(P)))    (1)

P=D1(E1(D1(C)))    (2)
  
其中,P为明文,C为密文。Ei()为加密函数,Di()为解密函数。


(2)Geffe发生器
  
Geffe发生器是一种密钥序列发生器,利用线性反馈移位寄存器LFSR(Linear Feedback Shift Register)产生序列密码。LFSR的输出就是m序列,是一个伪随机序列。Geffe发生器使用了3个LFSR,以非线生方式组合。其中,2个LFSR作为复合器的输入,第3个LFSR控制复合器的输出。使用相关攻击,Geffe发生器的破译并不难,故而不能直接将它作为3DES算法的密钥,因此这里对其作取摘要处理。

(3)MD5算法
  
MD5(Message Digest)算法是由MIT的密码专家,RSA算法的发明人之一Ron Rivest设计发明的一种认证算法标准。MD5算法完成于1992年,它可以对任意长的报文输入,得到1个128位的输出。该算法可以保证2条不同的报文产生相同的摘要的可能性很小,并且由给定的摘要反向求其对应的报文极端困难。因此将摘要作为密钥既可以保证随机性,安全性也能提高了不少。

3.2 密钥的生成机制
  
无论从3DES算法本身,还是从该体制的加密原理来讲,密钥的生成机制都至关重要。因此,必须保证使用的密钥是安全的。其安全性体现为两个方面:一是密钥本身是随机的;一是密钥的管理机制。
  
密钥的生成过程如下:先由Geffe发生器得到一随机序列,然后通过MD5算法取摘要,得到的128比特数据就是密钥K1和密钥K2组合。由Geffe发生器及MD5算法原理可以看出,这样产生的密钥是随机的。
  
由该体制的工作过程可以看出,密钥的管理是安全的。这是由于在主程序内,加密结束后,随即将密钥销毁,主程序内不保留密钥;使用密钥时,通过监控程序从微狗内获取。微狗和DSP是物理分开的,保证了密钥存放的安全。


4 结果分析
  
严格地说,这种方法并不属于加密,只是一种保护手段——利用几个简单的,结合DSP和单片机的特点,构造一种保护体制。甚至其效果究竟如何,可以从2个方面分析。

4.1 安全性分析
  
既然是一种保护方法,那么安全性是最重要的指标。由这种体制的加密原理及工作过程,可以看出安全性可以保护。3DES算法,无论从理论上还是实践上,都是一种相当好的加密算法。虽然利用穷举攻击,该算法最终可以破译,但需要2 112次穷举,所花费的代价实在太大,可以说得不偿失。因此,只要保证密钥的安全,可以认为这种保护体制是完全的。而从密钥的生成过程和管理机制来讲,密钥是安全的。
 
4.2 性能分析[4~6]
  这种保护方法的速度很快,因为3DES算法要是混乱和扩散的组合,只使用了标准的算术和逻辑运算。Geffe发生器和MD5算法用到的也主要是逻辑运算,用DSP或者单片机实现非常方便。譬如对于TMS320VC5402来说,Geffe发生器产生64字的伪随机序列需要296 544个周期,MD5处理64个字长的消息需要用3400个周期,所花费的时间分别为2965ms和0.003ms。
  
因此,我们只是利用了一些简单的算法,结合DSP和1片微狗,构造出1个DSP程序保护体制,以小代价获得了好的效果,还是很值得的。

小木欧尼
2楼-- · 2019-07-15 15:40
 精彩回答 2  元偷偷看……
lijiabaobei
3楼-- · 2019-07-15 17:04
支持  很赞
zhangmangui
4楼-- · 2019-07-15 17:08
本帖最后由 zhangmangui 于 2014-11-30 21:09 编辑

TI C2000 DSP程序加密2种方法(显性和隐性)显性和隐性 不可同时使用1.显性法



选中Tools-F28xx On-chip Flash Programmer进入Flash编程界面(如下图所示),如上图所示,或者点击此图标。
Flash编程界面


在“Code Security Password”区域设置好程序密码,然后按“Program Password”确定密码设置。在设置密码的时候,注意不要将Key0-Key8全设置为0,如果全为0,则芯片将会永久“Lock”!如果采用这种显性方法设置密码,在生产产品的时候,你需要将密码告诉生产线上的Flash烧写人员,以至除了公司核心的人员外,还会有更多的人知道你的程序密码,给保密性带来不利!
2.隐性法
为了避免上述情况的发生,让更少的人知道程序的密码,甚至只让一个人知道程序的密码,可以将密码嵌入到程序中,与其他程序一起编译好后,生成.out文件,这个时候,你只需要将.out文件给FLASH烧写人员就可以,不需要再让FLASH烧写人员自己设置密码,我们把这种方法叫做隐性法,在使用串口烧写FLASH的时候,也需要采用这种方法进行程序加密。
将下面的程序保存为.asm文件,添加到工程中,与其他文件一起编译。

.sect "csmpasswds"
.int 0xFFFF ;PWL0 (LSW of 128-bit password)
.int 0xFFFF ;PWL1
.int 0xFFFF ;PWL2
.int 0xFFFF ;PWL3
.int 0xFFFF ;PWL4
.int 0xFFFF ;PWL5
.int 0xFFFF ;PWL6
.int 0xFFFF ;PWL7 (MSW of 128-bit password

.sect "csm_rsvd"
.loop (3F7FF5h - 3F7F80h + 1)
.int 0x0000
.endloop

将下面的语句写入CMD中,

MEMORY
{

CSM_RSVD : origin = 0x3F7F80, length = 0x000076

CSM_PWL : origin = 0x3F7FF8, length = 0x000008

}
SECTIONS
{

csmpasswds : > CSM_PWL PAGE = 0

csm_rsvd : > CSM_RSVD PAGE = 0

}
按照上面的方法编译好后,你的程序已经加密好了,你只需要将生成的.out交给Flash烧写人员就可以了!
long009
5楼-- · 2019-07-15 22:39
谢谢分享
zhangmangui
6楼-- · 2019-07-16 04:20
TI-DSP程序加密收集分享  

一周热门 更多>