虛擬儀器軟件如何加密
虛擬儀器技術(shù)是利用高性能的模塊化硬件,結(jié)合高效靈活的軟件來完成各種測試、測量和自動化的應(yīng)用,特別是基于PC的虛擬儀器既增加了儀器的種類和功能,又降低了儀器的價格,但是卻使儀器的盜版和侵權(quán)問題也日益嚴(yán)重。因此,虛擬儀器的軟件加密技術(shù)日益受到了人們的重視。
一、虛擬儀器軟件的加密方法
虛擬儀器軟件的加密保護通常有2種方法,即軟件加密和硬件加密。
軟件加密技術(shù)一般采用限制用戶的權(quán)限和防止非法拷貝,主要方法是反跟蹤技術(shù)和代碼插入技術(shù),并通過運行一段程序來進行各種方式的加密,而這段程序本身就是一個告密者,會給破解者留下線索。
硬件加密法則是通過硬件來實現(xiàn)對軟件的加密保護,主要就是密鑰技術(shù)——軟件在運行時必須同硬件正確交換數(shù)據(jù),否則程序不運行或者不能運行主要的功能.通常的密鑰技術(shù)有磁盤加密法、軟件狗法和加密卡法。
由于所設(shè)計的便攜式儀器機就是一臺體積縮小了的PC,它除了向用戶提供儀器功能外,還要向用戶開放PC的全部功能,甚至包括操作系統(tǒng)的重新安裝和硬盤的格式化等操作,所以使用磁盤加密法不可取,加密狗則是插在PC的并口或通用串行總線(USB)口等外部接口上,一些并口的加密狗由于供電和數(shù)據(jù)方向設(shè)置的問題會影響到打印機或其他并口外設(shè)的正常工作,而外插的設(shè)備也會影響便攜式儀器機的擴展性和緊湊性。
自行設(shè)計的儀器功能板卡,是將密鑰部分添加在儀器的功能卡上,或者在功能卡上將數(shù)據(jù)進行前期加工,使儀器應(yīng)用軟件脫離特制的功能板卡就不能夠正確地運行,其效果明顯好于上面2種方法,因此,就要花費人力、物力去開發(fā)、設(shè)計板卡,而這種板卡的功能與市場上常見的板卡極其相近(除數(shù)據(jù)加密處理部分外),而這種重復(fù)開發(fā)使儀器的開發(fā)周期延長。
根據(jù)便攜式儀器機的特點和內(nèi)部擴展插槽的使用情況,采用設(shè)計成工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(hidustry Standard Architecture,簡稱ISA)接口形式的加密卡方法,系統(tǒng)結(jié)構(gòu)如圖1所示。由于儀器機的外部沒有多余插件,因此保持了整機的緊湊和便攜性。另外,加密卡還有設(shè)計靈活、兼容性好、讀寫速度快和開發(fā)周期短等優(yōu)點,虛擬儀器軟件通過內(nèi)嵌的軟件模塊與加密卡進行數(shù)據(jù)交換時,用戶察覺不到等待的時間。采用軟件和硬件結(jié)合的加密方法,既在儀器軟件中加入反跟蹤、防拷貝等軟件加密的算法,又設(shè)計了一塊專用的加密卡與之配合,對虛擬儀器的軟件進行保護。
二、復(fù)雜可編程邏輯器件加密卡的工作原理
復(fù)雜可編程邏輯器件(Complex ProgrammableLogic Device,簡稱CPLD)是新型的可編程邏輯器件,幾乎可適用于所有的門陣列和各種規(guī)模的數(shù)字集成電路中,它的許多特點特別適合于產(chǎn)品的樣片開發(fā)和小批量生產(chǎn),用高密度的CPLD芯片代替分立元件和小規(guī)模集成電路,將加密算法和系統(tǒng)總線接口邏輯做在一塊芯片中,可節(jié)省板卡面積,方便進行調(diào)試,并且易于發(fā)現(xiàn)和診斷板卡故障,因此減少了硬件設(shè)計和后期維護的工作量。利用CPLD加密卡實現(xiàn)加密的方法有很多,常用的有明暗碼轉(zhuǎn)換、數(shù)據(jù)運算格式加密和識別關(guān)鍵字的方法。
明暗碼轉(zhuǎn)換加密方法是將明碼文件按約定算法轉(zhuǎn)換成暗碼文件后存儲在磁盤上,當(dāng)程序運行時,通過CPLD加密卡,將磁盤內(nèi)的暗碼文件轉(zhuǎn)換成明碼文件送入內(nèi)存中執(zhí)行。數(shù)據(jù)運算格式加密方法是在虛擬儀器軟件中,當(dāng)某些數(shù)據(jù)需要進行一些格式上的轉(zhuǎn)換和運算處理時,將這些軟件上進行的數(shù)據(jù)格式轉(zhuǎn)換,交由CPLD加密卡來實現(xiàn),并通過數(shù)據(jù)格式和處理算法的保密來實現(xiàn)加密。
識別關(guān)鍵字的加密方法是應(yīng)用程序首先根據(jù)加密卡的輸入/輸出(I/O)地址,將數(shù)據(jù)A送入加密卡,加密卡通過雙方約定命令協(xié)議生成結(jié)果B(B=F(A),其中F表示加密函數(shù)),并將結(jié)果B通過輸出地址從加密卡的寄存器中送回程序,數(shù)據(jù)B就是虛擬儀器軟件要測試的關(guān)鍵字。再由軟件進行核查,若與希望得到的結(jié)果相符,則證實加密卡的存在并正常工作,因此軟件繼續(xù)運行,否則中斷軟件的運行,在虛擬儀器的應(yīng)用程序中,還可通過不定時的隨機調(diào)用查詢程序,增加破解的難度和延長破解的時間,再在應(yīng)用程序中結(jié)合軟件的反跟蹤措施,以防止查詢加密卡的程序模塊被解除。
三、基于復(fù)雜可編程邏輯器件加密卡的設(shè)計與實現(xiàn)
1、硬件的實現(xiàn)
加密芯片選用Altera公司的MAX7000系列的CPLD,是高密度、高性能的互補金屬氧化物半導(dǎo)體(Complementary Metal - Oxide - Semiconductor,簡稱CMOS)、電可擦除可編程邏輯器件(Electronic Pro-grammable Logic Device,簡稱EPLD),其編程快速而有效,并保證可編程可擦除100次,而且MAX7000器件都包含一個可編程的保密位,當(dāng)保密位被編程時,器件內(nèi)實現(xiàn)的設(shè)計將不能被復(fù)制和讀出。由于在電可擦可編程只讀存儲器( EEPROM)內(nèi)的數(shù)據(jù)是看不見的,所以利用保密位可實現(xiàn)高級設(shè)計保密。當(dāng)對器件重新編程時,保密位連同其他的編程數(shù)據(jù)均能被擦除和重寫,這樣就達到了對CPLD內(nèi)部固化的加密算法進行保護的目的。
在本設(shè)計中,采用84腳塑料有引線芯片載體(PLCC)封裝的芯片,此類芯片可用的宏單元從64個到160個,用戶I/O引腳為64或68個。在加密卡上設(shè)置芯片插座,根據(jù)算法的需要,可方便地更換相同封裝及不同容量的芯片,以增大加密卡之間的差異。另外,此類芯片的輸出驅(qū)動能在3.3 V或5.0 V的電壓下工作,并且允許在混合電壓的系統(tǒng)中使用,使以后更改成其他形式的總線接口更方便。
2、軟件的實現(xiàn)
軟件設(shè)計包括兩部分:CPLD內(nèi)部固化的程序和模塊化的、可供調(diào)用的加密卡識別程序部分,并以程序所使用的加密算法中識別關(guān)鍵字的方法為例進行說明。CPLD內(nèi)固化程序的流程圖如圖2所示,用硬件描述語言( VHDL)編寫,開發(fā)工具使用Altera公司的MAX+PLUSⅡ軟件,編譯成POF文件并通過自制的下載電纜或編程器下載到CPLD中。程序采用模塊化設(shè)計,將加密算法和接口邏輯部分分別設(shè)計成獨立的模塊,以方便日后重新改寫或升級加密卡的加密算法,或者修改為其他形式的總線接口.在流程圖中,根據(jù)協(xié)議處理數(shù)據(jù)部分還要判斷所送來的數(shù)據(jù)是否為有效命令和本芯片內(nèi)是否存有此算法等,以及返回相應(yīng)的數(shù)據(jù),這里由于涉及到儀器命令字規(guī)則的保密問題,所以不做具體描述。
CPLD內(nèi)的固化程序和識別程序規(guī)定了所傳輸?shù)臄?shù)據(jù)和命令的格式以及命令的意義,根據(jù)協(xié)議來選擇不同的加密算法對數(shù)據(jù)進行處理,可設(shè)計多種加密算法,但是每塊加密卡上的芯片中所存儲的加密算法都不相同,因此增加了加密卡的復(fù)制難度。
識別程序流程圖如圖3所示。為減少識別程序的查詢時間,只測試加密卡的某一算法,只有在發(fā)現(xiàn)問題時才調(diào)用自檢程序?qū)⒓用芸ǖ娜克惴ㄗ鲆灰粶y試。識別程序和自檢程序都采用匯編語言編寫,做成動態(tài)鏈接庫供虛擬儀器應(yīng)用軟件進行調(diào)用。在識別程序中,加入超時檢查,若在一段時間內(nèi)仍不能從加密卡的I/O地址讀入有效值,則視加密卡不存在或已經(jīng)損壞,程序做轉(zhuǎn)出錯處理,利用Altera公司的MAX+PLUSⅡ軟件的時間分析功能,根據(jù)所選擇芯片的參數(shù)確定芯片處理數(shù)據(jù)的最長延時,再結(jié)合總線的接口時序,估算出從識別程序發(fā)送出數(shù)據(jù)到接收到加密卡反饋的正確數(shù)據(jù)的最長時間。此時間設(shè)置為超時等待的參考時間,并配合計數(shù)檢查,來實現(xiàn)單一進程下的超時檢查。在出錯處理程序中,調(diào)用加密卡自檢程序,只要自檢沒有通過,無論是未安裝加密卡還是加密卡發(fā)生故障,都提示系統(tǒng)故障請報修的信息.這樣可使非法用戶無法正常使用儀器,而合法用戶的儀器硬件故障可以得到及時的發(fā)現(xiàn)和處理,因此不會影響儀器的使用。
自檢程序的原理是調(diào)用識別程序,將所采用的加密算法全部測試一遍,根據(jù)加密卡所反饋的信息來判定加密卡的狀態(tài)。由于每塊加密卡不一定能存儲全部加密算法,而且各加密卡中的算法也不相同,無法保證每一塊加密卡對每種算法都有反饋,因此,在加密卡的反饋數(shù)據(jù)中,設(shè)置了“無此算法信息”,但是此信息易于被破解者利用來欺騙自檢程序,以達到拆除加密卡的目的。為防止這種情況的發(fā)生,在自檢程序(見圖4)中,設(shè)置了計數(shù)器,反饋“無此算法信息”的次數(shù)若超過預(yù)置值則認(rèn)為出錯,同樣要做轉(zhuǎn)報錯處理。
3、硬件和軟件的調(diào)試
加密卡硬件的調(diào)試主要是測試加密卡的時序與PC機ISA總線接口的時序能否配合,即加密卡所使用到的地址、數(shù)據(jù)和控制總線的狀態(tài)在工作時能否滿足ISA接口的時序需要.在VHDL語言程序編譯下載到CPLD芯片之前,在MAX+PLUSⅡ軟件的環(huán)境中進行功能仿真和時序邏輯測試,測試成功后將程序編譯下載到CPLD中,再使用邏輯分析儀,采用黑箱測試法和窮舉法,對加密卡的接口時序和軟件功能進行測試。
小知識之CPLD
CPLD(Complex Programmable Logic Device)復(fù)雜可編程邏輯器件,是從PAL和GAL器件發(fā)展出來的器件,相對而言規(guī)模大,結(jié)構(gòu)復(fù)雜,屬于大規(guī)模集成電路范CP圍。是一種用戶根據(jù)各自需要而自行構(gòu)造邏輯功能的數(shù)字集成電路。其基本設(shè)計方法是借助集成開發(fā)軟件平臺,用原理圖、硬件描述語言等方法,生成相應(yīng)的目標(biāo)文件,通過下載電纜(“在系統(tǒng)”編程)將代碼傳送到目標(biāo)芯片中,實現(xiàn)設(shè)計的數(shù)字系統(tǒng)。









