

摘 要:在一些特定的場合中,電路的開發者或產品的生產商需要對自己的電路或者電子產品規定使用期限,若用戶使用的總時間超過這一期限,則不能繼續使用,或需要重新獲得授權才能繼續使用。本文介紹了一種非常經濟實用,但不易被破解的,使用EEPROM實現這一目的的方法。
關鍵詞:加密; 限時; EEPROM; 防破解
中圖分類號:TP3 文獻標識碼:A 文章編號:1006-3315(2015)05-186-002
1.引言
在一些特定行業中,有一些特定功能的定制電路的使用權是按照“正常使用時間”被出售給用戶的。即用戶完成一次交費后,將得到包含電路在內的某一產品,但是用戶獲得的并非是這一產品的永久使用權,而只是在約定的某一使用期限內對這一產品的使用權。當用戶使用這一產品達到這一使用期限時,將不再擁有對其的使用權。除非通過續費或其他途徑,再次從產品的開發商處獲得新的授權,才能繼續使用。如此周而復始,直到產品失去其應有的功能,或用戶不再需要這一產品。
2.設計思想
要實現“限制電路使用時間”的目的,必須對電路的使用時間進行較精確的計數,并將其記錄在某一可重復擦寫的存儲器中。為考慮使系統在關機和重啟情況下能保留數據,因此,此存儲器必須為非易失性存儲器。
目前,最常用的可重復擦寫的非易失性存儲器主要有FLASH存儲器和EEPROM存儲器。FLASH存儲器又稱閃存,它結合了ROM和RAM的長處,不僅具備電子可擦除可編程的性能,還可以快速讀取數據,使數據不會因為斷電而丟失。但是FLASH存儲器一般容量都比較大,故價格也相對比較貴。若使用FLASH存儲器的目的,僅僅是儲存系統的運行時間這幾個字節的數據量,顯然存在著極大的浪費。而存儲量小、價格便宜的EEPROM更適合用于此設計中。
但是,EEPROM有固定的使用壽命,這是指某一位由“1”寫為“0”或由“0”寫為“1”的次數,而讀取EEPROM內的數據不會縮短其壽命。不同廠家、型號、系列甚至批次的產品,壽命都不盡相同,常見主流產品的擦寫壽命為10萬次以上。假若某EEPROM壽命為10萬次,每分鐘擦寫一次,則其使用時間為100000/(60×24)=69天。這兩個多月的使用壽命顯然在很多應用中是不能滿足需要的。
為解決這一問題,本設計采用不固定數據存放地址的方式。即每次寫入數據的存儲器地址是參照之前寫入的地址,按照一定的規則計算得到的。這相當于將原來幾種在某幾個字節存儲器空間的擦寫次數分攤到所有的存儲空間。因此,如果采用100倍的存儲器空間冗余,則可將EEPROM的實際壽命延長100倍。存儲地址的計算規則可以是簡單的加或減一個偏移量,也可以是設計者自行規定的復雜規則。通過對此計算規則的合理設計,可以在犧牲一定單片機時間的基礎上,提高被破解的難度。
開機或重啟后,在系統初始化過程中,先對EEPROM內的數據進行識別。按照設計者規定的規則,依次判斷每一個存儲空間內的數據。若發現存在異常數據,說明EEPROM內容被非法篡改,可發出警報并禁止使用;若數據正常,則找出上次關機前寫入的最后一個數據(即累計使用時間)。若此數據小于設定值(開發者設定的使用時限),則進入正常使用狀態;反之,則提示用戶并禁止使用。
正常使用過程中,每隔一定時間(例如1分鐘)對累計使用時間值增加“1”。若增加后的數值不大于設定值(開發者設定的使用時限),則計算下一個存儲地址,并將其寫入;反之,則提示用戶并禁止使用。
3.硬件系統
基于以上設計思想,搭建的簡易系統硬件結構框圖如圖1所示。系統選用ATMEL公司的ATmega8微處理器控制。ATmega8自帶512字節的EEPROM,已經足夠滿足本方案所需的存儲量。但是,考慮到更換方便,仍然選擇外擴一片IIC總線接口的EEPROM。ATmega8自帶有IIC總線,因此使用非常方便。
圖1 系統硬件結構框圖
本設計使用3個字節為一個單位,記錄電路累計運行的分鐘數,則最大計數范圍是16777215/(60×24×365)=32年。大多數情況中,授權使用時間不會超過這個數值,因此足夠滿足需求。按照存儲空間冗余40倍的關系,EEPROM存儲器選用MICROCHIP公司的芯片24LC01B。此款芯片帶有1Kbit(即128字節)存儲空間,擦寫壽命為100萬次以上,單片價格不滿1元人民幣。根據計算,用于本方案中,若每分鐘擦寫一次,則使用壽命為1000000/(60×24×365)×40=76年。
本系統的微處理器與EEPROM接口原路圖如圖2所示。
圖2微處理器與EEPROM的接口
4.軟件設計
本系統的軟件采用模塊化設計,與判斷并記錄累計使用時間相關的軟件模塊,主要包括開機自檢模塊及運行中記時及判斷模塊兩部分。
存儲地址的計算規則采用查表方式。將地址為00H~77H的120字節存儲空間按照每3個連續字節為一個存儲單元,總共分為40個存儲單元。將這40個存儲單元的地址,按照不規則順序存入數組add[40]。每次需要下一單元的存儲地址時,只需依次從數組add[40]中讀取即可。另外,在地址7AH和7DH中存入兩字節的用戶識別碼,每次開機,首先需驗證識別碼與程序一致方能繼續運行。若將累計運行時間限制設定為兩年,即TLIM=100A40H;用戶識別碼ID=1983H,則記時及判斷模塊及開機自檢模塊的程序流程圖分別為圖3和圖4所示。
圖3 記時及判斷模塊流程圖
圖4開機自檢模塊流程圖
5.結束語
以上介紹的這種限制電路使用時間的加密方法具有成本低、壽命長、精度高、資源占用度低、防破解能力及通用性強等特點。只需作簡單修改,此方法便能被使用于不同場合,并且能夠按照設計者的需要及電路資源情況,自行決定算法的復雜程度,有效保護設計、開發者的勞動成果。
參考文獻:
[1]Microchip Technology Inc..24AA01/24LC01B數據手冊,2003
[2]Atmel Corporation. ATmega8/ATmega8L數據手冊,2003
[3]李維平,張濤,丁振君.延長EEPROM使用壽命的方法,單片機與嵌入式系統應用.2005,(6)