加密芯片DM2016 在數(shù)字電視加密中的應(yīng)用
據(jù)統(tǒng)計,全球每三款軟件就有一款被拷貝或盜版,使得正規(guī)廠家的正版系統(tǒng)銷量銳減。面對形形色色的解密公司,封裝和PCB布線的保護已經(jīng)顯得力不從心,而單純的軟件保護也無濟于事,如E2PROM和MCU保護軟件,由于E2PROM的易復(fù)制以及MCU的易讀性,保護力度遠遠不能經(jīng)受市場的考驗。如果用硬件來保護軟件,或軟硬件相結(jié)合,就能加大盜版和破解的難度。
針對MCU加密易被破解,防抄版嵌入式系統(tǒng)加密芯片DM2016內(nèi)嵌了1024位E2PROM,采用特殊算法、明文隨機數(shù)產(chǎn)生、密鑰OTP(一次性可編程)寫入數(shù)據(jù)線自動熔斷等多種保護措施。加密芯片DM2016廣泛適用于PMP、GPS、DVD、DVR、DVB等嵌入式應(yīng)用系統(tǒng)。
1 DM2016的特點
DM2016的內(nèi)部結(jié)構(gòu)如圖1所示。
DM2016有如下特性:
◆符合I2C總線標(biāo)準(zhǔn);
◆支持2位I2C地址選擇;
◆內(nèi)置128位密鑰解密算法,保密性能類似于3DES算法,且一次性燒錄;
◆內(nèi)置1 024位E2PROM;
◆采用隨機數(shù)通信算法。
2 DM2016在數(shù)字電視加密領(lǐng)域中的應(yīng)用
2.1 硬件結(jié)構(gòu)
圖2是DM2016加密芯片在數(shù)字電視加密領(lǐng)域中的應(yīng)用結(jié)構(gòu)示意圖。圖中DMll05是一款針對性很強的芯片,它接收標(biāo)準(zhǔn)的TS流,選擇進行解復(fù)用、解擾,將處理好的TS流以DMA方式通過PCI總線送到計算機內(nèi)存。該芯片可以通過與接口控制芯片DMl021搭配,實現(xiàn)2個CAM卡控制,并可以接收外部紅外遙控信號實現(xiàn)遙控功能。DMll05只需外掛加密芯片DM2016,通過I2C接口與DM2016連接,實現(xiàn)加密控制和部分內(nèi)部寄存器上電配置。DM2016芯片內(nèi)部具有128位密鑰區(qū),廠商可以一次寫入,通過加密算法保護自己的軟件。同時,DM2016還具有1 024位E2PROM區(qū)域,DM1105部分需配置的寄存器可以保存在此,上電時將其讀入,完成DMll05部分寄存器的配置。
2.2 軟件實現(xiàn)
圖3是DM2016加密芯片在數(shù)字電視加密領(lǐng)域中加、解密的認(rèn)證流程。從該認(rèn)證流程可看出,主處理芯片DMll05根據(jù)DM2016的返回值B產(chǎn)生64位隨機數(shù)作為明文(如加密前的數(shù)字電視信號),該明文與DMll05程序里的密鑰通過調(diào)用加密庫來參與加密運算,得到運算結(jié)果暗文A,DMll05將暗文A通過I2C總線傳到加密芯片DM2016,然后DM2016使用與DMll05程序里密鑰相同的密鑰對暗文A進行解密運算,并將得到的運算結(jié)果與加密前的64位隨機數(shù)進行比較。如果一致則表示認(rèn)證通過,此時被加密的數(shù)字電視信號就可以被解密還原成正常信號,合法用戶就可以收看到相關(guān)的電視節(jié)目;否則就表示認(rèn)證失敗,被加密的數(shù)字電視信號不能被解密還原成正常信號,用戶就不能收看到相關(guān)的電視節(jié)目。
下面以BlowFish算法為例介紹加密算法在嵌入式系統(tǒng)中的應(yīng)用。
32位微處理器誕生后,Blowfistl算法在加密速度上超越了DES,引起了人們的關(guān)注。Blowfish算法沒有注冊專利,不需要授權(quán),可以免費使用。正是由于這些特點,它廣泛應(yīng)用于很多產(chǎn)品中。在這里,BlowFish算法用來加密64位的字符串,BlowFish算法使用2個“盒”——unSigned long pbox[18]和unsigned long sbox[4,256]。BlowFish算法中,有一個核心加密函數(shù):BF_En。該函數(shù)輸入64位信息,運算后以64位密文的形式輸出。用BlowFish算法加密信息需要2個過程,即密鑰預(yù)處理和
信息加密。
以密鑰預(yù)處理為例,這時,BlowFish算法的源密鑰——pbox和sbox是固定的。要加密一個信息,需要自己選擇一個。key,用這個key對pbox和sbox進行變換,得到下一步信息加密所需的key_pbox和keg_sbox。具體的變換算法如下:
①用sbox填充key_sbox。
②用自己選擇的key以8個一組去異或pbox,用異或的結(jié)果填充key_pbox。key可以循環(huán)使用。例如,選的key是”abcdefghijklmn”,則異或過程為
keg_pbox[O]=pbox[O]abcdefgh
keyr_pbox[1]=pbox[1]ijklmnab
…………
如此循環(huán),直到key_box填充完畢。
③用BF_En加密一個全“O”的64位信息,用輸出的結(jié)果替換key__pbox[O]和key_pbox[1]。此時,i=O。
④用BF_En加密替換后的key_pbox[i]和key_phox[i+1],用輸出替代key_pbox[i+2]和key_phox[i+3]。
⑤i=i+2,繼續(xù)第4步,直到key_pbox全部被替換。
⑥用key_pbox[16]和keyl_pbox[17]做首次輸入(相當(dāng)于上面的全“O”輸入),用類似的方法替換key_sbox進行信息加密。信息加密就是用函數(shù)把待加密信息x分成32位的兩部分:xL和xR,再用BF_En函數(shù)對輸入信息進行變換。
以下是初始化sbox、pbox及定義全局變量key_pbox、key_sbox的C程序例子。
結(jié) 語
隨著嵌入式系統(tǒng)越來越廣泛的應(yīng)用,安全保密問題也越來越受到重視。密碼學(xué)為其提供了正確的理論基礎(chǔ)。同時,性能優(yōu)良的硬件(如DM2016)成為實現(xiàn)其安全保密的物質(zhì)基礎(chǔ)。二者的有效結(jié)合為防止嵌入式系統(tǒng)開發(fā)成果被仿制或剽竊提供了有力的保障。