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

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

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

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

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

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

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

二、機頂盒軟件加密原理及保密性能

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

1、加密原理_

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

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

2、保密性能

PIC12CE519高保密性能為軟件加密設置了雙重保護:

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

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

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

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

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

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

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

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

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

1、硬件設計_

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

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

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

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

2、軟件設計

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

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

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

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

模擬IIC協(xié)議,軟件需要實現(xiàn)下列幾個函數(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ā)送一個字節(jié)數(shù)據(jù);

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

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

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

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

(2)STi5518部分軟件設計

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

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

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

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

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

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

if((plockTask=task_ create(Encrypt_ Process,

NULL,

LOCK一PROCESS_ STACK—SIZE,

LOCK—PROCESS一PRIORITY,

”Encrypt Task”,

0))==NULL)

{

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

}

}

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

static void .EncryptProcess(void*pvParam)

{

while(1)

{

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

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

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

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

DelayForAWhile();/*延時*/

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

if(Remote_ Encrypted!=Local_ Encrypted)

......

}

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

static void EncryptProcess(void*pvParam)

{

while(1)

{

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

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

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

DelayForAWhile();/*延時*/

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

if(Remote_ Encrypted!=Local_ Encrypted)

{

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

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

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

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

}

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

}

}

3、 PIC12CE519部分軟件設計

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

4、加密算法

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

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

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

小知識之STB

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