随着越来越多的系统开发者保护知识产权意识的加强,各种类型的软件加密技术以及保护措施也应运而生。那么数字机顶盒系统的软件是如何加密的呢?我今天就以我们常用的STi5518嵌入式芯片数字机顶盒的软件为例,给大家介绍一下数字机顶盒系统的软件加密方法。

一、STi5518嵌入式机顶盒系统简介

STi5518是ST Microelectronics公司推出的一种功能强大,价格低的新型机顶盒(STB)后端解码器,是该公司STi5500( OMEGA)的升级产品。

STi5518保留了STi5500的所有功能,并添加了对杜比数码和MP3音频解码的支持。由于还添加了附加的逻辑电路以方便连接硬盘驱动器,使这种器件成为新兴的“融合式”产品的理想元件,这些产品能够提供诸如现场直播电视的暂停和录制电视节目过后观看之类的功能。如图1所示。

如何给数字机顶盒系统的软件加密
STi5518集成了一颗高性能的32位微处理器ST20,可以运行OS20操作系统。STi5518通过SMI(共享内存接口)总线与SDRAM进行数据交换。STi5518通过EMI(扩展内存接口)总线从FLASH中读取程序或读写数据。STL5518机顶盒软件固化在FLASH中。

与PC机相比,机顶盒系统的FLASH就相当于PC机的硬盘,它存贮了程序代码以及相关数据。由于FLASH中的内容很容易被导出,因此,机顶盒中的程序代码及相关数据就容易被复制;而且,目前STi5518机顶盒系统硬件大多类似,参照原版重新制新版并不难。由此可见,要盗版整个系统非常简单!

二、机顶盒软件加密原理及保密性能

机顶盒系统的加密功能是由专用硬件加密模块辅助现实的。硬件加密模块由微处理器PIC12CE519控制。PIC12CE519是MicroChip公司生产的一款小型PIC单片机,它是一款高性能低功耗的8位RISC单片机,使用了Harvard总线结构,除程序跳转指令外,其余的指令均为单周期指令,指令周期仅1uso内置了16字节的EEPROM可以用来存放私有数据。

1、加密原理_

PIC12CE519片内EEPROM不可被破解是机顶盒软件系统加密的保障。

STi5518和PIC12CE519中存有相同密钥字,两者对同一随机数进行加密运算,并由STi5518来比较加密后的密文。如果PIC12CE519不存在或是非法的,ST15518就会收不到PIC12CE519的加密密文,或者收到的密文与自身生成的密文不相同,从而终止机顶盒应用程序的运行,并退出操作系统。

2、保密性能

PIC12CE519高保密性能为软件加密设置了双重保护:

加密密钥字存放于PIC12CE519中的EEPROM,只能由程序代码间接读出;

PIC12CE519采用OTP封装,片内程序代码只可编程一次,不可改写,因此可以防止程序代码被重新写入以读出EEPROM中的密钥字。并且烧写片内程序代码时可以设置保护而不被读出,这也为研究、破解加密算法增加了难度。

由于PIC12CE519加密系统是不可复制的,因此,即使机顶盒软件、硬件均被复制了,机顶盒也是无法运行的,这就达到了防止盗版的目的。

机顶盒FLASH代码中的密钥字也是安全的。

FLASH代码内的加密密钥字不能被定义为全局或者局部的常量,这样很容易在分析代码数据段时被发现。采用的可行办法是:定义一些隐蔽常量,并动态生成密钥字,只存在于RAM中。而且,FLASH中代码运行于ST20微处理器,采用的是ST20指令集,无法在Windows以及其他操作系统下进行反汇编,这也极大地增加了破解者定位或间接跟踪密钥字的难度。

此外,机顶盒STi5518和PIC12CE519间会有数据交互,传递加密前明文以及加密后密文。由于加密算法不公开,破解者也无法进行暴力破解得到加密密钥字。

三、数字机顶盒系统的软件加密设计

OS20操作系统启动后,STi5518会每隔一分钟不间断地产生一个随机数,将此随机数发送给PIC12CE519,PIC12CE519根据EEPROM内的密钥字对此随机数进行加密运算并返回加密密文给STi5518;同时STi5518自己也根据其内设的密钥字对此随机数进行加密运算,并将自身的加密密文与PIC12CE519的加密密文进行比较。若STi5518未收到返回密文或者收到的密文与自身生成的密文不相同,就会终止应用程序的运行,并退出操作系统。系统软件概要设计流程如图2所示。

如何给数字机顶盒系统的软件加密

1、硬件设计_

PIC12CE519采用了8管脚小型封装,内置有4MHz RC振荡器,内部有上拉复位电路,这些都极大地简化了硬件设计,也减小了加密系统占有的制版面积。

PIC12CE519通过两口线与STi5518进行连接,按照IIC协议进行数据传输。

整个小系统除PIC12CE519芯片外,只用到了两个电阻,分别用于IIC总线上的SDA数据线以及SCL时钟线的上拉,如图3所示。

如何给数字机顶盒系统的软件加密

2、软件设计

加密系统的软件设计分为两个部分:STi5518程序以及PIC12CE519程序。同一台机顶盒的STi5518和PIC12CE519中含有相同的加密密钥字,他们均参与对同一随机数进行简化DES加密运算生成密文。由于PIC12CE519不含IIC硬件通讯模块,STi5518也没有使用IIC模块来与PIC12CE519连接,因此两者均通过软件来模拟IIC协议,使用两个普通IO管脚进行连接、通讯。

(1)软件模拟IIC协议

使用IIC协议进行数据传输只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCLO使用IIC协议传输数据,可以采用很广泛的传输速率(低于3. 4Mbit/s即可),而且传输过程中也不需要保持同一速率,这给数据传输控制带来了方便。

PIC12CE519和STi5518之间传输的数据量少,不需要采用很高的传输速率;其次,两者都没有用中断来侦测SDA以及SCL的电位变化,为了降低软件查询SDA以及SCL电位变化的难度,在模拟IIC协议时,使用了长延时来降低传输速率。

模拟IIC协议,软件需要实现下列几个函数:

void IIC_ Start(void):IIC协议传输的起始条件;

void IIC _Stop(void):IIC协议传输的停止条件;

void IIC_Write(BYTE Byte2Send):向IIC总线发送一个字节数据;

BYTE IIC _Read(void):从IIC总线上接收一个字节数据;

void IIC_SendAck( void):收到一个字节数据后向总线发送ACK响应位;

BOOL IIC_WaitAck( void):发送一个字节数据后等待ACK响应;

此外,数据在IIC传送之前,还需经过打包过程形成数据包的格式。数据包前部分设有同步头,后部分设有数据校验码。此做法可以方便地对数据进行传输同步,以及对数据传输进行错误控制。

(2)STi5518部分软件设计

ST公司为STi5518嵌入式平台提供了一套优秀的软件系统,开发人员可以利用其提供的一系列优良API接口方便快速地进行程序设计。

STi5518有5组IO,我们需要利用STPIO的API函数集对其进行访问。STPIO—Open函数用来打开一个IO端口,设置访问方式(输入,输出,或者双向访问),并返回此IO端口的访问句柄。利用此句柄,可以用STPIO_Set函数、STPIO_Clear函数分别将IO置高、低电平。

此外,还需利用API函数task—create创建一个任务,不断循环运行,检测PIC12CE519加密小系统的合法性占机顶盒启动时,会执行DVBApplicationlnit(),下列是源代码示例:

int DVB.Applicationlnit(void)/*系统应用程序初始化代码*/

{
Encrypt_ PlOlnit();/*初始化加密模块所用PIO:SCL以及SDA*/

/*以下创建加密任务*/

if((plockTask=task_ create(Encrypt_ Process,

NULL,

LOCK一PROCESS_ STACK—SIZE,

LOCK—PROCESS一PRIORITY,

”Encrypt Task”,

0))==NULL)

{

retum TRUE;/*创建任务失败,返回错误*/

}

}

/*加密任务函数体*/

static void .EncryptProcess(void*pvParam)

{

while(1)

{

Random—Seed=rand();/*生成随机数*/

EncryptCalc(KEY, Random一Seed, &Local—Encrypt-ed);

/*随机数和密钥字KEY生成密文Local一Encrypted*/

IIC_Wnte(Random一Secd);/*将随机数发送给PIC12CE519*/

DelayForAWhile();/*延时*/

IIC - Read( Remote—Encrypted);/*接收PIC12CE519生成的密文*/

if(Remote_ Encrypted!=Local_ Encrypted)

......

}

/*加密任务函数体*/

static void EncryptProcess(void*pvParam)

{

while(1)

{

Random—Seed=rand();/*生成随机数*/

EncryptCalc(KEY, Random一Seed, &Local—Encrypt-d);/*随机数和密钥字KEY生成密文Local一Encrypted*/

IIC—Write(Random一Seed);/*将随机数发送给PIC12CE519*/

DelayForAWhile();/*延时*/

IIC - Read( Remote一Encrypted);/*接收PIC12CE519生成的密文*/

if(Remote_ Encrypted!=Local_ Encrypted)

{

IllegalHint();/*向OSD菜单显示非法信息*/

task一lock();/*锁定所有任务*/

interrupt—lock();/*锁定所有中断服务程序*/

retum;/*退出系统*/

}

DelayIMinute();/*每分钟检测一次*/

}

}

3、 PIC12CE519部分软件设计

虽然DES加密算法经过了简化,但是对于PIC12CE519来说,还是会占很大的代码空间以及RAM空间。因此使用汇编语言来编程,编译效率高,生成指令代码少而简洁,执行速度快。一般来说,单片机不合适运行多任务操作系统,因此PIC12CE519与STi5518通讯时,需严格按照流程设置的步骤进行。从图2软件设计流程可知,PIC12CE519端程序设计比STi5518端程序简单,需要注意的是,PIC12CE519和STi5518所用的EncryptCalc()函数体实现以及加密密钥字KEY必须是相同的。

4、加密算法

考虑到PIC12 CE519内只能存1024条12位宽指令,且只有41字节的RAM,故不能选用代码庞大,过程复杂的加密算法,也不宜对应用程序的执行速度产生较大影响。

STi5518和PIC12CE519之间会传递随机数(加密前的原始数据,即明文)以及加密结果(加密后的密文)。如果采用已知的公开算法,破解者可以在截取明文及密文后进行暴力破解,从而得到ST15518和PIC12CE519内的加密密钥字。因此,只能采用特定的加密算法。破解者不清楚加密算法,自然就不能进行暴力破解了。

其次,此加密算法还应该满足加密的核心思想:加密后的数据没有显著的变化规律。这样破解者得到明文及密文后,很难发现其中规律,也就不能推理得知加密用的密钥字。一个方面使不同被加密数据文件加密后,原始数据一位的变化会引起后密后数据多处无明显规律变化,即变化扩展原则;另一方面使用密钥,密钥的作用是将被加密数据文件与之进行运算以改变原始数据。

小知识之STB

数字视频变换盒(英语:Set Top Box,简称STB),通常称作机顶盒或机上盒,是一个连接电视机与外部信号源的设备。它可以将压缩的数字信号转成电视内容,并在电视机上显示出来。信号可以来自有线电缆、卫星天线、宽带网络以及地面广播。机顶盒接收的内容除了模拟电视可以提供的图像、声音之外,更在于能够接收数据内容,包括电子节目指南、因特网网页、字幕等等。使用户能在现有电视机上观看数字电视节目,并可通过网络进行交互式数字化娱乐、教育和商业化活动。