嵌入式系统加密技术在数字电视中的应用
2009-03-16
作者:洪家平
摘 要:为了使更多的嵌入式系统的原创者能有效地保护自己的开发成果和知识产权,介绍了嵌入式系统加密芯片DM2016的结构、特点及其在数字电视加密领域的应用,同时给出了BlowFish算法在嵌入式主系统中的加密方法及应用。
关键词:嵌入式系统; 加密技术; DM2016
许多都经历过因盗版而带来的损失,据统计,全球每三款软件就有一款被拷贝或盗版。面对形形色色的解密公司,封装和PCB布线的保护已经显得力不从心,而单纯的软件保护,如E2PROM、MCU也无济于事。硬件保护软件或由软硬件相结合的保护技术,在加大盗版难度的同时也加大了破解难度。
针对MCU加密易破解的问题,嵌入式系统加密芯片DM2016内嵌1 024位 E2PROM,采用了明文随机数产生方式、特殊算法、密钥OTP写入数据线自动熔断不可读等多种保护措施, 其广泛适用于PMP、GPS、DVD、DVR、DVB以及所有嵌入式应用系统中。
1 DM2016的特点
DM2016的内部结构如图1所示,其特性如下:(1)符合I2C总线标准;(2)支持两位I2C地址选择;(3)内置128位密钥解密算法,保密性能类似于3DES算法,一次性烧录;(4)内置1 024位 E2PROM;(5)随机数通信算法。
2 DM2016的工作原理
DM2016是一款嵌入式系统专业加密芯片,如图2所示。DM2016通过I2C总线与主芯片CPU相连,在主程序中嵌入加密程序。当加密程序调用运行时,即从RAM中随机调用一组数据作为明文,与程序中的密钥混合产生一组暗文。暗文通过I2C总线传送到加密芯片,按反算法与加密芯片中密钥产生明文,再与RAM中的明文比较,两者一致则程序继续。两者不一致则程序中断退出,从而起到保护用户程序的目的。
3 DM2016在数字电视加密领域中的应用
3.1 硬件结构
DM2016加密芯片在数字电视加密领域中的应用结构示意图如图3所示。图中DM1105是一款针对性很强的芯片,它接收标准的TS流,选择进行解复用、解扰,将处理好的TS流以DMA方式通过PCI总线送到计算机内存。该芯片可以通过与CI接口控制芯片DM1021搭配实现两个CAM卡控制,并可以接收外部红外遥控信号实现遥控功能。DM1105只需外挂加密芯片DM2016,通过I2C接口与DM2016连接还可以实现加密控制和部分内部寄存器上电配置。DM2016芯片内部具有128位密钥区,厂商可以一次写入,通过加密算法保护自己的软件,同时DM2016还具有1 024位E2PROM区域,DM1105的部分需配置的寄存器可以保存在此,上电时将其读入,完成DM1105部分寄存器的配置。
3.2 软件实现
图4为DM2016加密芯片在数字电视加密领域中加、解密的认证流程。从图4可以看出,主系统芯片DM1105根据DM2016的返回值A随机产生64位的随机数作为明文(如加密前的数字电视信号)。该明文与主系统芯片DM1105程序里的密钥通过调用加密库来参与加密运算,得到运算结果暗文A。主系统芯片DM1105将暗文A通过I2C总线传到加密芯片DM2016,然后DM2016使用与主系统芯片DM1105程序里的密钥相同的密钥对暗文A进行解密运算,将得到的运算结果与原来加密前的64位的随机数进行比较,如果一致则表示认证通过,此时被加密的数字电视信号就可以被解密还原成正常信号,合法用户就可以收看到相关的数字信号电视节目;否则就表示认证失败,被加密的数字电视信号不能被解密还原成正常信号,用户就不能收看到相关的电视节目。
下面以BlowFish算法为例介绍加密算法在嵌入式主系统中的应用。
32 位微处理器诞生后,BlowFish 算法在加密速度上超越了DES ,引起了人们的关注。BlowFish 算法没有注册专利,不需要授权,可以免费使用。在这里,BlowFish算法用来加密64位的字符串,BlowFish算法使用两个“盒”——ungigned long pbox[18]和unsigned long sbox[4,256]。BlowFish算法中,有一个核心加密函数:BF_En。该函数输入64位信息,运算后以64位密文的形式输出。用BlowFish算法加密信息,需要密钥预处理和信息加密两个过程。以密钥预处理为例说明如下:
密钥预处理时,BlowFish算法的源密钥——pbox和sbox是固定的。要加密一个信息,需要自己选择一个key,用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。变化算法具体如下:
(1) 用sbox填充key_sbox。
(2) 用自己选择的key,8个一组地去异或pbox,用异或结果填充key_pbox。key可以循环使用。例如:选的key是'abcdefghijklmn',则异或过程为:
key_pbox[0]=pbox[0]^abcdefgh
key_pbox[1]=pbox[1]^ijklmnab
……
如此循环,直到key_box填充完毕。
(3) 用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1]。i=0。
(4) 用BF_En加密替换后的key_pbox[i],key_pbox[i+1], 用输出替代key_pbox[i+2]和key_pbox[i+3]。
(5) i+2,继续第(4)步,直到key_pbox全部被替换。
(6) 用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox 信息加密。信息加密就是用函数把待加密信息x分成32位的两部分:xL和xR,再用BF_En函数对输入信息进行变换。系统中采用C语言实现,首先,定义sbox 和pbox 并初始化,将它们放入code中。
unsigned long code sbox[18] = {
0x243F6A88L , …, 0x8979FB1BL
} ;
unsigned long code pbox[ 4 ] [256 ] = {
0xD1310BA6L , …
} ;
其次,定义两个全局变量key_pbox和key_sbox,存储初始化后的子密钥。
unsigned long key_pbox[18] ;
unsigned long key_sbox[4] [256] ;
再完成几个函数:
void Blowfish_Init (unsigned char 3 key, int keyLen) ;
//初始化子密钥
void Blowfish_Encrypt (unsigned long 3 xl, unsigned long 3 xr) ;
//加密函数
……
最后,初始化单片机,用TESTKEY 作为密钥进行初始化, 对算法进行测试。
随着单片机系统越来越广泛的应用,其安全保密问题也越来越受到重视。密码学为其提供了正确的理论基础。同时,性能优良的硬件(例如DM2016)是实现其安全保密的基础。二者缺一不可。
参考文献
[1] AXELSON J.嵌入式Ethernet和Internet通信设计技术[M].骆丽,张岳强,译.北京:北京航空航天大学出版社,2006.
[2] 洪家平,董武世.基于嵌入式系统的时分多址通信协议的实现[J].微计算机信息,2005(7):32-33.
[3] 王建校,杨建国,宁改娣,等. 51系列单片机及C51程序设计[M].北京:科学出版社, 2002.
[4] 林凌,李刚,丁茹,等. 新型单片机接口器件与技术[M].西安:西安电子科技大学出版社,2005.