DSP程序的加密保護(hù)體制設(shè)計(jì)
目前,DSP以其卓越的性能、獨(dú)有的特點(diǎn),已經(jīng)成為通信、計(jì)算機(jī)、消費(fèi)類(lèi)電子產(chǎn)品等領(lǐng)域的基礎(chǔ)器件。同時(shí),隨著對(duì)知識(shí)產(chǎn)權(quán)的重視,在利用DSP進(jìn)行產(chǎn)品設(shè)計(jì)時(shí),如何保護(hù)自己的成果,防止破譯者竊取,也成為設(shè)計(jì)者工作在一個(gè)重要方面[1,2]。如果產(chǎn)品大批量生產(chǎn),那么可以利用掩膜技術(shù)等工藝將操作程序及數(shù)據(jù)寫(xiě)入芯片,使它們不能被讀出,達(dá)到保護(hù)的效果。對(duì)于還沒(méi)有形成規(guī)模的產(chǎn)品,使用這樣的方法就會(huì)使成本大大增加。因此,本文提出一種方法,利用3DES、Geff發(fā)生器和MD5等算法,構(gòu)造一種加密體制,來(lái)保護(hù)DSP程序。
1 加密原理及硬件結(jié)構(gòu)
1.1 加密原理
該體制的加密原理可分為2個(gè)層次。首先是對(duì)程序的初始保護(hù),就是把程序?qū)懭隓SP芯片之前,對(duì)源代碼進(jìn)行加密處理,然后將密文寫(xiě)放入芯片。這樣芯片中就不存在明文形式的源代碼。當(dāng)要運(yùn)行該程序時(shí),就從微狗中取出密鑰進(jìn)行解密,再繼續(xù)運(yùn)行。第2個(gè)層次就是在DSP程序運(yùn)行過(guò)程中的連續(xù)保護(hù)。它的處理對(duì)象是一些重要參數(shù)或變時(shí),通過(guò)“加鎖”,讓它們一直以密文形式存在于程序中。只有需要使用這些數(shù)據(jù)時(shí),才從微狗內(nèi)取出密鑰進(jìn)行解密。使用結(jié)束后,仍舊“加鎖”保護(hù),使之仍然是密文形式。
1.2 硬件結(jié)構(gòu)
在這種加密體制中,需要1片微狗實(shí)現(xiàn)密鑰管理。如果原來(lái)的DSP系統(tǒng)中已經(jīng)存在帶有加密位的EPLD、CPLD或單片機(jī),就可以利用以有資源進(jìn)行設(shè)計(jì),把它們作為微狗,完全不需要額外的硬件支持。否則,不妨用1片單片機(jī)完成微狗功能。這是由其良好的性?xún)r(jià)比決定的。
2 工作過(guò)程和密鑰管理
根據(jù)加密原理,該體制的工作過(guò)程同樣分為2個(gè)層次。首先,是初始程序保護(hù),它以程序整體為處理對(duì)象。然后,是基于數(shù)據(jù)的連續(xù)保護(hù)。保護(hù)對(duì)象是一些重要參數(shù)事變量。它保證了加密貫穿程序運(yùn)行的整個(gè)過(guò)程。在工作過(guò)程中,密鑰管理非常關(guān)鍵,可以說(shuō),該體制的安全與否就體現(xiàn)在密鑰管理上。
2.1 初始程序保護(hù)
初始程序保護(hù)使用的加密算法是3DES算法,加密結(jié)束后,銷(xiāo)毀密鑰,同時(shí)將密文寫(xiě)入芯片。這樣芯片內(nèi)就不存在程序的明文形式,可以防止別人通過(guò)簡(jiǎn)單的反匯編得到程序源代碼。開(kāi)始運(yùn)行DSP程序時(shí),就在DSP監(jiān)控程序的控制下,從微狗內(nèi)取出相應(yīng)的密鑰,解密恢復(fù)出源代碼。
微狗主要實(shí)現(xiàn)密鑰管理功能。內(nèi)部密鑰的生成機(jī)制和主程序完全相同。把主程序以密文形式寫(xiě)入DSP芯片時(shí),通過(guò)監(jiān)控程序告知微狗,微狗內(nèi)部同時(shí)生成對(duì)應(yīng)密鑰K0;主程序開(kāi)始運(yùn)行時(shí),再在監(jiān)控程序控制下,從微狗內(nèi)取出密鑰K0,解密,得到明文形式源代碼。
可是,由于只有1個(gè)密鑰,破譯者完全可以通過(guò)截取DSP和微狗之間的通信數(shù)據(jù),很容易地得到密鑰。一旦得到密鑰,這種保護(hù)體制也就形同虛設(shè)了。因此,我們又采取了基于數(shù)據(jù)驅(qū)動(dòng)的連續(xù)保護(hù)。
2.2 基于數(shù)據(jù)驅(qū)動(dòng)的連續(xù)保護(hù)
所謂基于數(shù)據(jù)驅(qū)動(dòng)的連續(xù)保護(hù),即是對(duì)程序中重要的參數(shù)或變量進(jìn)行加密處理。由于這些參數(shù)或變量在程序運(yùn)行時(shí)需要反復(fù)使用。故而通過(guò)對(duì)它們的保護(hù),就可以使加密貫空程序的整個(gè)運(yùn)行過(guò)程。
譬如對(duì)濾波器系數(shù)ap的保護(hù),將其加密,即“加鎖”,同時(shí)銷(xiāo)毀密鑰。在求ap+1時(shí),需要用到ap,就向監(jiān)控程序發(fā)出申請(qǐng),在它的控制下,從微狗中取出對(duì)應(yīng)密鑰,開(kāi)銷(xiāo),恢復(fù)ap,進(jìn)行運(yùn)算。運(yùn)算結(jié)束后,再將ap和ap+1“加鎖,保存,繼續(xù)執(zhí)行DSP主程序。這樣不停地“加鎖”、“開(kāi)鎖”,使得在同一時(shí)刻DSP主程序中都存在密文。
此時(shí)微狗中密鑰的生成必須和DSP主程序中的加密處理“同步”,即主程序的加密密鑰要和微狗內(nèi)生成的對(duì)應(yīng)密鑰相同。這個(gè)可以由DSP監(jiān)控程序利用DSP內(nèi)部的中斷程序協(xié)調(diào)實(shí)現(xiàn)。使用密鑰Ki對(duì)某參數(shù)或變量加密結(jié)束后,通過(guò)中斷告訴監(jiān)控程序加密完成,然后鎖毀該密鑰。繼續(xù)執(zhí)行DSP程序時(shí),若需要使用該參數(shù)或變量,就向監(jiān)控程序發(fā)出要求,在監(jiān)控程序的控制下,從微狗中取出對(duì)應(yīng)密鑰Ki,解密。其具體過(guò)程如圖1所示。
其中,a、b為主程序和DSP監(jiān)控程序之間的數(shù)據(jù)交換,包括彼此呼叫與應(yīng)答;c為DSP監(jiān)控程序?qū)ξ⒐返目刂?,發(fā)出某種命令;d是主程序在DSP監(jiān)控程序的控制下,從微狗內(nèi)取出相應(yīng)的密鑰。
微狗將生成的密鑰依次排列,然后等待主程序取密鑰。不論是初始程序保護(hù)還是基于數(shù)據(jù)的連續(xù)保護(hù),都只受監(jiān)控程序的控制。這樣可以保證主程序獲得正確密鑰。
加入連續(xù)保護(hù)后,破譯者要想得到源代碼,必須跟蹤程序的整個(gè)運(yùn)行過(guò)程。這樣,對(duì)于破譯者而言,所花費(fèi)的代價(jià)等于自己獨(dú)立寫(xiě)一套程序,顯然也失去了破譯的必要。
2.3 細(xì)節(jié)處理
除了上述保護(hù)措施,還可以使用一些編程技巧,在細(xì)節(jié)上小心謹(jǐn)慎,寫(xiě)出讓人“眼花繚亂”的程序,否則,破譯者很可能不必完全跟蹤,就能夠獲取源程序。因?yàn)槟康氖且曰髣e人,所以就得盡量破壞程序的可讀性。譬如打亂程序的正常順序,使其顯得雜亂無(wú)章;適時(shí)適地插入無(wú)用代碼,增強(qiáng)干擾;使參數(shù)變量的命名晦澀難懂,絕對(duì)不能有key、digest等諸如此類(lèi)可以望文生義的名稱(chēng)??傊?,要讓破譯者對(duì)獲取的內(nèi)容不知所云,以增加其還原源程序的難度。
3 相關(guān)算法及密鑰生成機(jī)制
該體制的加密算法是3DES,是個(gè)對(duì)稱(chēng)算法。其安全性可以說(shuō)完全體現(xiàn)在密鑰上。因此,如何產(chǎn)生一個(gè)“安全”的密鑰至為關(guān)鍵。在密鑰的生成機(jī)制中,用到了Geffe發(fā)生器和MD5算法。
評(píng)論