如何給數(shù)字機(jī)頂盒系統(tǒng)的軟件加密

隨著越來越多的系統(tǒng)開發(fā)者保護(hù)知識(shí)產(chǎn)權(quán)意識(shí)的加強(qiáng),各種類型的軟件加密技術(shù)以及保護(hù)措施也應(yīng)運(yùn)而生。那么數(shù)字機(jī)頂盒系統(tǒng)的軟件是如何加密的呢?我今天就以我們常用的STi5518嵌入式芯片數(shù)字機(jī)頂盒的軟件為例,給大家介紹一下數(shù)字機(jī)頂盒系統(tǒng)的軟件加密方法。

一、STi5518嵌入式機(jī)頂盒系統(tǒng)簡介

STi5518是ST Microelectronics公司推出的一種功能強(qiáng)大,價(jià)格低的新型機(jī)頂盒(STB)后端解碼器,是該公司STi5500( OMEGA)的升級(jí)產(chǎn)品。

STi5518保留了STi5500的所有功能,并添加了對(duì)杜比數(shù)碼和MP3音頻解碼的支持。由于還添加了附加的邏輯電路以方便連接硬盤驅(qū)動(dòng)器,使這種器件成為新興的“融合式”產(chǎn)品的理想元件,這些產(chǎn)品能夠提供諸如現(xiàn)場直播電視的暫停和錄制電視節(jié)目過后觀看之類的功能。如圖1所示。

如何給數(shù)字機(jī)頂盒系統(tǒng)的軟件加密
STi5518集成了一顆高性能的32位微處理器ST20,可以運(yùn)行OS20操作系統(tǒng)。STi5518通過SMI(共享內(nèi)存接口)總線與SDRAM進(jìn)行數(shù)據(jù)交換。STi5518通過EMI(擴(kuò)展內(nèi)存接口)總線從FLASH中讀取程序或讀寫數(shù)據(jù)。STL5518機(jī)頂盒軟件固化在FLASH中。

與PC機(jī)相比,機(jī)頂盒系統(tǒng)的FLASH就相當(dāng)于PC機(jī)的硬盤,它存貯了程序代碼以及相關(guān)數(shù)據(jù)。由于FLASH中的內(nèi)容很容易被導(dǎo)出,因此,機(jī)頂盒中的程序代碼及相關(guān)數(shù)據(jù)就容易被復(fù)制;而且,目前STi5518機(jī)頂盒系統(tǒng)硬件大多類似,參照原版重新制新版并不難。由此可見,要盜版整個(gè)系統(tǒng)非常簡單!

二、機(jī)頂盒軟件加密原理及保密性能

機(jī)頂盒系統(tǒng)的加密功能是由專用硬件加密模塊輔助現(xiàn)實(shí)的。硬件加密模塊由微處理器PIC12CE519控制。PIC12CE519是MicroChip公司生產(chǎn)的一款小型PIC單片機(jī),它是一款高性能低功耗的8位RISC單片機(jī),使用了Harvard總線結(jié)構(gòu),除程序跳轉(zhuǎn)指令外,其余的指令均為單周期指令,指令周期僅1uso內(nèi)置了16字節(jié)的EEPROM可以用來存放私有數(shù)據(jù)。

1、加密原理_

PIC12CE519片內(nèi)EEPROM不可被破解是機(jī)頂盒軟件系統(tǒng)加密的保障。

STi5518和PIC12CE519中存有相同密鑰字,兩者對(duì)同一隨機(jī)數(shù)進(jìn)行加密運(yùn)算,并由STi5518來比較加密后的密文。如果PIC12CE519不存在或是非法的,ST15518就會(huì)收不到PIC12CE519的加密密文,或者收到的密文與自身生成的密文不相同,從而終止機(jī)頂盒應(yīng)用程序的運(yùn)行,并退出操作系統(tǒng)。

2、保密性能

PIC12CE519高保密性能為軟件加密設(shè)置了雙重保護(hù):

加密密鑰字存放于PIC12CE519中的EEPROM,只能由程序代碼間接讀出;

PIC12CE519采用OTP封裝,片內(nèi)程序代碼只可編程一次,不可改寫,因此可以防止程序代碼被重新寫入以讀出EEPROM中的密鑰字。并且燒寫片內(nèi)程序代碼時(shí)可以設(shè)置保護(hù)而不被讀出,這也為研究、破解加密算法增加了難度。

由于PIC12CE519加密系統(tǒng)是不可復(fù)制的,因此,即使機(jī)頂盒軟件、硬件均被復(fù)制了,機(jī)頂盒也是無法運(yùn)行的,這就達(dá)到了防止盜版的目的。

機(jī)頂盒FLASH代碼中的密鑰字也是安全的。

FLASH代碼內(nèi)的加密密鑰字不能被定義為全局或者局部的常量,這樣很容易在分析代碼數(shù)據(jù)段時(shí)被發(fā)現(xiàn)。采用的可行辦法是:定義一些隱蔽常量,并動(dòng)態(tài)生成密鑰字,只存在于RAM中。而且,F(xiàn)LASH中代碼運(yùn)行于ST20微處理器,采用的是ST20指令集,無法在Windows以及其他操作系統(tǒng)下進(jìn)行反匯編,這也極大地增加了破解者定位或間接跟蹤密鑰字的難度。

此外,機(jī)頂盒STi5518和PIC12CE519間會(huì)有數(shù)據(jù)交互,傳遞加密前明文以及加密后密文。由于加密算法不公開,破解者也無法進(jìn)行暴力破解得到加密密鑰字。

三、數(shù)字機(jī)頂盒系統(tǒng)的軟件加密設(shè)計(jì)

OS20操作系統(tǒng)啟動(dòng)后,STi5518會(huì)每隔一分鐘不間斷地產(chǎn)生一個(gè)隨機(jī)數(shù),將此隨機(jī)數(shù)發(fā)送給PIC12CE519,PIC12CE519根據(jù)EEPROM內(nèi)的密鑰字對(duì)此隨機(jī)數(shù)進(jìn)行加密運(yùn)算并返回加密密文給STi5518;同時(shí)STi5518自己也根據(jù)其內(nèi)設(shè)的密鑰字對(duì)此隨機(jī)數(shù)進(jìn)行加密運(yùn)算,并將自身的加密密文與PIC12CE519的加密密文進(jìn)行比較。若STi5518未收到返回密文或者收到的密文與自身生成的密文不相同,就會(huì)終止應(yīng)用程序的運(yùn)行,并退出操作系統(tǒng)。系統(tǒng)軟件概要設(shè)計(jì)流程如圖2所示。

如何給數(shù)字機(jī)頂盒系統(tǒng)的軟件加密

1、硬件設(shè)計(jì)_

PIC12CE519采用了8管腳小型封裝,內(nèi)置有4MHz RC振蕩器,內(nèi)部有上拉復(fù)位電路,這些都極大地簡化了硬件設(shè)計(jì),也減小了加密系統(tǒng)占有的制版面積。

PIC12CE519通過兩口線與STi5518進(jìn)行連接,按照IIC協(xié)議進(jìn)行數(shù)據(jù)傳輸。

整個(gè)小系統(tǒng)除PIC12CE519芯片外,只用到了兩個(gè)電阻,分別用于IIC總線上的SDA數(shù)據(jù)線以及SCL時(shí)鐘線的上拉,如圖3所示。

如何給數(shù)字機(jī)頂盒系統(tǒng)的軟件加密

2、軟件設(shè)計(jì)

加密系統(tǒng)的軟件設(shè)計(jì)分為兩個(gè)部分:STi5518程序以及PIC12CE519程序。同一臺(tái)機(jī)頂盒的STi5518和PIC12CE519中含有相同的加密密鑰字,他們均參與對(duì)同一隨機(jī)數(shù)進(jìn)行簡化DES加密運(yùn)算生成密文。由于PIC12CE519不含IIC硬件通訊模塊,STi5518也沒有使用IIC模塊來與PIC12CE519連接,因此兩者均通過軟件來模擬IIC協(xié)議,使用兩個(gè)普通IO管腳進(jìn)行連接、通訊。

(1)軟件模擬IIC協(xié)議

使用IIC協(xié)議進(jìn)行數(shù)據(jù)傳輸只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCLO使用IIC協(xié)議傳輸數(shù)據(jù),可以采用很廣泛的傳輸速率(低于3. 4Mbit/s即可),而且傳輸過程中也不需要保持同一速率,這給數(shù)據(jù)傳輸控制帶來了方便。

PIC12CE519和STi5518之間傳輸?shù)臄?shù)據(jù)量少,不需要采用很高的傳輸速率;其次,兩者都沒有用中斷來偵測SDA以及SCL的電位變化,為了降低軟件查詢SDA以及SCL電位變化的難度,在模擬IIC協(xié)議時(shí),使用了長延時(shí)來降低傳輸速率。

模擬IIC協(xié)議,軟件需要實(shí)現(xiàn)下列幾個(gè)函數(shù):

void IIC_ Start(void):IIC協(xié)議傳輸?shù)钠鹗紬l件;

void IIC _Stop(void):IIC協(xié)議傳輸?shù)耐V箺l件;

void IIC_Write(BYTE Byte2Send):向IIC總線發(fā)送一個(gè)字節(jié)數(shù)據(jù);

BYTE IIC _Read(void):從IIC總線上接收一個(gè)字節(jié)數(shù)據(jù);

void IIC_SendAck( void):收到一個(gè)字節(jié)數(shù)據(jù)后向總線發(fā)送ACK響應(yīng)位;

BOOL IIC_WaitAck( void):發(fā)送一個(gè)字節(jié)數(shù)據(jù)后等待ACK響應(yīng);

此外,數(shù)據(jù)在IIC傳送之前,還需經(jīng)過打包過程形成數(shù)據(jù)包的格式。數(shù)據(jù)包前部分設(shè)有同步頭,后部分設(shè)有數(shù)據(jù)校驗(yàn)碼。此做法可以方便地對(duì)數(shù)據(jù)進(jìn)行傳輸同步,以及對(duì)數(shù)據(jù)傳輸進(jìn)行錯(cuò)誤控制。

(2)STi5518部分軟件設(shè)計(jì)

ST公司為STi5518嵌入式平臺(tái)提供了一套優(yōu)秀的軟件系統(tǒng),開發(fā)人員可以利用其提供的一系列優(yōu)良API接口方便快速地進(jìn)行程序設(shè)計(jì)。

STi5518有5組IO,我們需要利用STPIO的API函數(shù)集對(duì)其進(jìn)行訪問。STPIO—Open函數(shù)用來打開一個(gè)IO端口,設(shè)置訪問方式(輸入,輸出,或者雙向訪問),并返回此IO端口的訪問句柄。利用此句柄,可以用STPIO_Set函數(shù)、STPIO_Clear函數(shù)分別將IO置高、低電平。

此外,還需利用API函數(shù)task—create創(chuàng)建一個(gè)任務(wù),不斷循環(huán)運(yùn)行,檢測PIC12CE519加密小系統(tǒng)的合法性占機(jī)頂盒啟動(dòng)時(shí),會(huì)執(zhí)行DVBApplicationlnit(),下列是源代碼示例:

int DVB.Applicationlnit(void)/*系統(tǒng)應(yīng)用程序初始化代碼*/

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

/*以下創(chuàng)建加密任務(wù)*/

if((plockTask=task_ create(Encrypt_ Process,

NULL,

LOCK一PROCESS_ STACK—SIZE,

LOCK—PROCESS一PRIORITY,

”Encrypt Task”,

0))==NULL)

{

retum TRUE;/*創(chuàng)建任務(wù)失敗,返回錯(cuò)誤*/

}

}

/*加密任務(wù)函數(shù)體*/

static void .EncryptProcess(void*pvParam)

{

while(1)

{

Random—Seed=rand();/*生成隨機(jī)數(shù)*/

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

/*隨機(jī)數(shù)和密鑰字KEY生成密文Local一Encrypted*/

IIC_Wnte(Random一Secd);/*將隨機(jī)數(shù)發(fā)送給PIC12CE519*/

DelayForAWhile();/*延時(shí)*/

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

if(Remote_ Encrypted!=Local_ Encrypted)

......

}

/*加密任務(wù)函數(shù)體*/

static void EncryptProcess(void*pvParam)

{

while(1)

{

Random—Seed=rand();/*生成隨機(jī)數(shù)*/

EncryptCalc(KEY, Random一Seed, &Local—Encrypt-d);/*隨機(jī)數(shù)和密鑰字KEY生成密文Local一Encrypted*/

IIC—Write(Random一Seed);/*將隨機(jī)數(shù)發(fā)送給PIC12CE519*/

DelayForAWhile();/*延時(shí)*/

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

if(Remote_ Encrypted!=Local_ Encrypted)

{

IllegalHint();/*向OSD菜單顯示非法信息*/

task一lock();/*鎖定所有任務(wù)*/

interrupt—lock();/*鎖定所有中斷服務(wù)程序*/

retum;/*退出系統(tǒng)*/

}

DelayIMinute();/*每分鐘檢測一次*/

}

}

3、 PIC12CE519部分軟件設(shè)計(jì)

雖然DES加密算法經(jīng)過了簡化,但是對(duì)于PIC12CE519來說,還是會(huì)占很大的代碼空間以及RAM空間。因此使用匯編語言來編程,編譯效率高,生成指令代碼少而簡潔,執(zhí)行速度快。一般來說,單片機(jī)不合適運(yùn)行多任務(wù)操作系統(tǒng),因此PIC12CE519與STi5518通訊時(shí),需嚴(yán)格按照流程設(shè)置的步驟進(jìn)行。從圖2軟件設(shè)計(jì)流程可知,PIC12CE519端程序設(shè)計(jì)比STi5518端程序簡單,需要注意的是,PIC12CE519和STi5518所用的EncryptCalc()函數(shù)體實(shí)現(xiàn)以及加密密鑰字KEY必須是相同的。

4、加密算法

考慮到PIC12 CE519內(nèi)只能存1024條12位寬指令,且只有41字節(jié)的RAM,故不能選用代碼龐大,過程復(fù)雜的加密算法,也不宜對(duì)應(yīng)用程序的執(zhí)行速度產(chǎn)生較大影響。

STi5518和PIC12CE519之間會(huì)傳遞隨機(jī)數(shù)(加密前的原始數(shù)據(jù),即明文)以及加密結(jié)果(加密后的密文)。如果采用已知的公開算法,破解者可以在截取明文及密文后進(jìn)行暴力破解,從而得到ST15518和PIC12CE519內(nèi)的加密密鑰字。因此,只能采用特定的加密算法。破解者不清楚加密算法,自然就不能進(jìn)行暴力破解了。

其次,此加密算法還應(yīng)該滿足加密的核心思想:加密后的數(shù)據(jù)沒有顯著的變化規(guī)律。這樣破解者得到明文及密文后,很難發(fā)現(xiàn)其中規(guī)律,也就不能推理得知加密用的密鑰字。一個(gè)方面使不同被加密數(shù)據(jù)文件加密后,原始數(shù)據(jù)一位的變化會(huì)引起后密后數(shù)據(jù)多處無明顯規(guī)律變化,即變化擴(kuò)展原則;另一方面使用密鑰,密鑰的作用是將被加密數(shù)據(jù)文件與之進(jìn)行運(yùn)算以改變原始數(shù)據(jù)。

小知識(shí)之STB

數(shù)字視頻變換盒(英語:Set Top Box,簡稱STB),通常稱作機(jī)頂盒或機(jī)上盒,是一個(gè)連接電視機(jī)與外部信號(hào)源的設(shè)備。它可以將壓縮的數(shù)字信號(hào)轉(zhuǎn)成電視內(nèi)容,并在電視機(jī)上顯示出來。信號(hào)可以來自有線電纜、衛(wèi)星天線、寬帶網(wǎng)絡(luò)以及地面廣播。機(jī)頂盒接收的內(nèi)容除了模擬電視可以提供的圖像、聲音之外,更在于能夠接收數(shù)據(jù)內(nèi)容,包括電子節(jié)目指南、因特網(wǎng)網(wǎng)頁、字幕等等。使用戶能在現(xiàn)有電視機(jī)上觀看數(shù)字電視節(jié)目,并可通過網(wǎng)絡(luò)進(jìn)行交互式數(shù)字化娛樂、教育和商業(yè)化活動(dòng)。