一种用EEPROM限制电路使用时间的加密方法

作者: 黄雅婷

一种用EEPROM限制电路使用时间的加密方法0

摘 要:在一些特定的场合中,电路的开发者或产品的生产商需要对自己的电路或者电子产品规定使用期限,若用户使用的总时间超过这一期限,则不能继续使用,或需要重新获得授权才能继续使用。本文介绍了一种非常经济实用,但不易被破解的,使用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)

经典小说推荐

杂志订阅