??? 摘? 要: 為了使更多的嵌入式系統(tǒng)的原創(chuàng)者能有效地保護自己的開發(fā)成果和知識產權,介紹了嵌入式系統(tǒng)加密芯片DM2016的結構、特點及其在數字電視加密領域的應用,同時給出了BlowFish算法在嵌入式主系統(tǒng)中的加密方法及應用。?
??? 關鍵詞: 嵌入式系統(tǒng); 加密技術; DM2016
?
??? 許多都經歷過因盜版而帶來的損失,據統(tǒng)計,全球每三款軟件就有一款被拷貝或盜版。面對形形色色的解密公司,封裝和PCB布線的保護已經顯得力不從心,而單純的軟件保護,如E2PROM、MCU也無濟于事。硬件保護軟件或由軟硬件相結合的保護技術,在加大盜版難度的同時也加大了破解難度。?
??? 針對MCU加密易破解的問題,嵌入式系統(tǒng)加密芯片DM2016內嵌1 024位 E2PROM,采用了明文隨機數產生方式、特殊算法、密鑰OTP寫入數據線自動熔斷不可讀等多種保護措施, 其廣泛適用于PMP、GPS、DVD、DVR、DVB以及所有嵌入式應用系統(tǒng)中。?
1 DM2016的特點?
??? DM2016的內部結構如圖1所示,其特性如下:(1)符合I2C總線標準;(2)支持兩位I2C地址選擇;(3)內置128位密鑰解密算法,保密性能類似于3DES算法,一次性燒錄;(4)內置1 024位 E2PROM;(5)隨機數通信算法。?
?
?
2 DM2016的工作原理?
??? DM2016是一款嵌入式系統(tǒng)專業(yè)加密芯片,如圖2所示。DM2016通過I2C總線與主芯片CPU相連,在主程序中嵌入加密程序。當加密程序調用運行時,即從RAM中隨機調用一組數據作為明文,與程序中的密鑰混合產生一組暗文。暗文通過I2C總線傳送到加密芯片,按反算法與加密芯片中密鑰產生明文,再與RAM中的明文比較,兩者一致則程序繼續(xù)。兩者不一致則程序中斷退出,從而起到保護用戶程序的目的。?
?
?
3 DM2016在數字電視加密領域中的應用?
3.1 硬件結構?
??? DM2016加密芯片在數字電視加密領域中的應用結構示意圖如圖3所示。圖中DM1105是一款針對性很強的芯片,它接收標準的TS流,選擇進行解復用、解擾,將處理好的TS流以DMA方式通過PCI總線送到計算機內存。該芯片可以通過與CI接口控制芯片DM1021搭配實現(xiàn)兩個CAM卡控制,并可以接收外部紅外遙控信號實現(xiàn)遙控功能。DM1105只需外掛加密芯片DM2016,通過I2C接口與DM2016連接還可以實現(xiàn)加密控制和部分內部寄存器上電配置。DM2016芯片內部具有128位密鑰區(qū),廠商可以一次寫入,通過加密算法保護自己的軟件,同時DM2016還具有1 024位E2PROM區(qū)域,DM1105的部分需配置的寄存器可以保存在此,上電時將其讀入,完成DM1105部分寄存器的配置。?
?
?
3.2 軟件實現(xiàn)?
??? 圖4為DM2016加密芯片在數字電視加密領域中加、解密的認證流程。從圖4可以看出,主系統(tǒng)芯片DM1105根據DM2016的返回值A隨機產生64位的隨機數作為明文(如加密前的數字電視信號)。該明文與主系統(tǒng)芯片DM1105程序里的密鑰通過調用加密庫來參與加密運算,得到運算結果暗文A。主系統(tǒng)芯片DM1105將暗文A通過I2C總線傳到加密芯片DM2016,然后DM2016使用與主系統(tǒng)芯片DM1105程序里的密鑰相同的密鑰對暗文A進行解密運算,將得到的運算結果與原來加密前的64位的隨機數進行比較,如果一致則表示認證通過,此時被加密的數字電視信號就可以被解密還原成正常信號,合法用戶就可以收看到相關的數字信號電視節(jié)目;否則就表示認證失敗,被加密的數字電視信號不能被解密還原成正常信號,用戶就不能收看到相關的電視節(jié)目。?
?
?
??? 下面以BlowFish算法為例介紹加密算法在嵌入式主系統(tǒng)中的應用。?
??? 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可以循環(huán)使用。例如:選的key是'abcdefghijklmn',則異或過程為:?
??? key_pbox[0]=pbox[0]^abcdefgh?
??? key_pbox[1]=pbox[1]^ijklmnab?
??? ……?
??? 如此循環(huán),直到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,繼續(xù)第(4)步,直到key_pbox全部被替換。?
??? (6) 用key_pbox[16]和key_pbox[17]做首次輸入(相當于上面的全0的輸入),用類似的方法,替換key_sbox 信息加密。信息加密就是用函數把待加密信息x分成32位的兩部分:xL和xR,再用BF_En函數對輸入信息進行變換。系統(tǒng)中采用C語言實現(xiàn),首先,定義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 作為密鑰進行初始化, 對算法進行測試。?
??? 隨著單片機系統(tǒng)越來越廣泛的應用,其安全保密問題也越來越受到重視。密碼學為其提供了正確的理論基礎。同時,性能優(yōu)良的硬件(例如DM2016)是實現(xiàn)其安全保密的基礎。二者缺一不可。?
參考文獻?
[1] AXELSON J.嵌入式Ethernet和Internet通信設計技術[M].駱麗,張岳強,譯.北京:北京航空航天大學出版社,2006.?
[2] 洪家平,董武世.基于嵌入式系統(tǒng)的時分多址通信協(xié)議的實現(xiàn)[J].微計算機信息,2005(7):32-33.?
[3] 王建校,楊建國,寧改娣,等. 51系列單片機及C51程序設計[M].北京:科學出版社, 2002.?
[4] 林凌,李剛,丁茹,等. 新型單片機接口器件與技術[M].西安:西安電子科技大學出版社,2005.