电子产品硬件加密防盗版新方法(论文).doc
电子产品硬件加密防盗版新方法
杨振野 韦方明 陈坤城 谭光雷
摘要:本文首先介绍了AT88SC0104C~25616C协议认证卡的主要特点、基本功能、安全存储原理、协议认证过程以及开发方法;接着,对应用AT88SC0104C实现对电子产品加密防盗版的方法和安全性进行了研究;最后,给出了详细的设计过程和应用实例。
关键词:AT88SC0104C,硬件加密,防盗版
分类号:TP309.7 文献标识码:B
一、引言
电子产品被非法复制的情况极其严重。为此,Atmel公司于1999年推出了用于防范盗版的加密器件AT88SC153和AT88SC1608,取得了一定的效果。但由于这两种器件采用的是明文传送方式,所以其中的数据在通信过程中易被截获。在2003年,Atmel公司又推出了具有双向认证且密文传送的新型加密器件AT88SC0104C~25616C系列协议认证卡,存储容量最高可达32K字节。
二、 AT88SC0104C~25616C系列协议认证卡
本系列协议认证卡是当前安全性能最高的安全存储器件,与AT88SC1608和AT88SC153相比,最突出的特点是所有传送数据为密文传送,确保了存储数据的安全性。ATMEL公司现已建议在新产品开发中不再使用AT88SC1608和AT88SC153。按ATMEL公司中国办事处的要求,下面仅介绍厂商同意公开的资料。事实上,AT88SC0104C~25616C与AT88SC1608、AT88SC153有很多相似之处,如访问权限寄存器和写锁控制寄存器等。AT88SC0104C~25616C协议认证卡系列中各器件的操作原理完全相同,各配置区随卡的容量而变化。
1.主要特点
(1)工作电压为2.7~5.5V;时钟频率最高为1.5MHz;符合ISO/IEC 7816-3同步协议。
(2)256×8 bit配置区,4×32×8bit~16×2048×8bit存储单元。可将具有相同安全等级且相同密码的多个应用分区合并使用。每个分区分别受读密码、写密码控制(8套密码、每套中读密码、写密码各1个,每个密码3字节),错误计数8次。如将用户分区合并,则读写密码指向同一套密码。
(3)数据安全防护功能:64bit认证协议;密文和校验方式;密文流传送方式;协议认证错误计数;读写访问控制密码;密码错误计数器;可按分区配置访问权限;电压和时钟频率监视。
(4)重复擦写次数:100,000次,数据保存:100年。
2.封装形式和引脚
AT88SC0104C~25616C协议认证卡的封装形式和引脚功能如图1所示。
卡片封装 DIP-8和SO-8封装
图1 AT88SC0104C~25616C协议认证卡的封装图
3.AT88SC0104C~25616C协议认证卡的存储器构成
存储分区 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
地址 |
用户分区0~P |
32~2048字节 |
000H~QH |
配置区 |
256字节 |
00H~FFH |
注:P为用户分区最大编号,0~15;Q为最大字节地址,018H~7F8H。
图2 AT88SC0104C~25616C协议认证卡的存储器构成示意图AT88SC0104C~25616C
协议认证卡的存储器构成如图2所示。图2中的每个用户分区的访问地址均相同。具体访问哪个分区由选择的分区号确定。用户分区存储器的访问受控制逻辑电路的控制,保护功能在初始化时(即发行)由配置区的访问权限寄存器AR、密码权限寄存器PR和密码来配置。
AT88SC1616 配置区的结构如图3所示。
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
地址 |
厂商
信息 |
复位应答(ATR) |
00H |
制造代码(FC) |
测试区(MTZ) |
卡制造商代码(CMC) |
08H |
识别区
|
历史代码(LHC:ATMEL出厂后熔断) |
10H |
DCR |
识别码(Nc) |
18H |
AR0 |
PR0 |
AR1 |
PR1 |
AR2 |
PR2 |
AR3 |
PR3 |
20H |
发布号(IC) |
40H |
AAC |
密文(Ci) |
50H |
密钥 |
密钥(Gc) |
90H |
密码区 |
PAC |
写0分区密码 |
PAC |
读0分区密码 |
B0H |
系统区 |
保留 |
F0H |
|
|
|
|
|
|
|
|
|
|
|
|
图3 AT88SC0104C协议认证卡的配置区构成示意图
图中,PR为密码权限寄存器,其他各项内容均与AT88SC153相似。
AT88SC0104C~25616C协议认证卡的访问权限配置寄存器的WLM、MDF和PGO(即Bit2、Bit1、Bit0)与AT88SC153协议认证卡相同,Bit7~ Bit3用于配置密码和认证模式。
4. 协议认证过程
AT88SC0104C~25616C协议认证卡的协议认证过程与AT88SC1608相似。与AT88SC1608相比,其协议认证过程(即步骤1~3)是相似的。在传送密文数据时由于传送了校验和,使得数据的安全性更高。AT88SC0104C~25616C协议认证卡的协议认证过程如下:
操作步骤 |
AT88SC0104C~25616C协议认证卡 |
信息流向 |
IC卡读写器 |
1 |
传送卡号NC |
→ |
计算质询A |
2 |
校验A;计算质询B |
← |
传送质询A |
3 |
传送质询B |
→ |
校验B |
4 |
校验读密码 |
← |
读密码(读密码) |
5 |
传送数据 |
→ |
接收数据 |
6 |
传送校验和 |
→ |
接收并校验校验和 |
7 |
校验写密码 |
← |
写密码(写密码) |
8 |
接收数据 |
← |
传送数据 |
9 |
接收并校验校验和 |
← |
传送校验和 |
10 |
写数据 |
|
|
AT88SC0104C~25616C协议认证卡与IC卡读写器之间有三种基本通信模式,如表1所示。上电后缺省配置下为标准模式。成功的认证操作激活认证模式。认证操作成功后激活加密模式。
表1 AT88SC0104C~25616C协议认证卡的通信加密模式
通信模式 |
配置数据 |
用户数据 |
密码 |
数据校验 |
标准模式 |
明文 |
明文 |
明文 |
MDC |
认证模式 |
明文 |
明文 |
加密 |
MAC |
加密模式 |
明文 |
加密 |
加密 |
MAC |
三、采用协议认证卡对产品加密
一般来说,开发IC卡应用系统都需要使用IC卡读写编程器,开发协议认证卡也不例外。开发过程中,我们需要用读写编程器来掌握器件中数据的变化情况;开发后,需要使用读写编程器对器件进行设置,然后才能安装到目标装置上。应避免在目标机上对器件进行设置,因为这样易泄露有关信息。现在国内能支持AT88SC0104C~25616C系列器件的读写编程器还很少,如http://
www.setchief.com 等网站。
对协议认证卡的操作必须慎重,尤其不能向协议认证卡随意发送数据或时钟,这样极易导致将器件锁死。协议认证卡内部设有内存测试区(MTZ),MTZ的访问不受安全和密码限制。因此,为保证读写时序的正确性,可先向该区进行读写测试,然后再向器件正确写入各种命令。需要注意的是,在对协议认证卡上电且RST为高电平后,一定要首先发送5个以上SCL脉冲才能启动通信,否则发送的数据和命令不会被器件正确接收。这一点与普通I2C器件有所不同。
1.应用注意事项
(1)采用程序最大容量的单片机器件型号,例如对16条地址线的51系列单片机宜采用W78E516(64kByte EEPROM),对空闲的程序空间充满各种程序。这样做的目的,是使盗版者再也无法增添程序。因为单片机程序代码易于被非法拷贝,但由于采用了协议认证卡,重要数据已被写入卡中,盗版者要想绕开协议认证卡使用截获的数据密文就只有修改程序。盗版者不知道原有程序的运行情况,原有程序肯定不能删除,新增程序又没有余地,从而有效防范盗版。
(2)最好能将协议认证卡中的用户区用作非易失型的数据存储,即在系统工作过程中将部分重要数据写入协议认证卡的EEPROM,使得破解难度进一步提高。
(3)务必将部分重要数据写入协议认证卡,直至在即将使用该数据时才将其解密,以避免被跟踪解密。
(4)引入随机认证机制。即使单片机的程序流程随机改变,有一部分认证流程多数情况下并不执行,只有很小的执行概率(例如1%以下),一旦认证不成功立即将卡锁死。
2.设计加密举例
这里给出一个采用AT88SC0104C协议认证卡对电子产品进行加密、防范盗版的有效方法,确保当盗版者已获得单片机的程序代码并被反汇编的情况下,仍然不能对电子产品进行复制。
(1) 基本设计流程
硬件连接→配置加密器件→编程加密器件→熔断加密器件→编制有关加密保护部分的程序
(2) 硬件连接
将AT88SC0104C与51系列单片机相连,只需将SCL和SDA引脚分别与单片机的P1、P3或P4(仅PLCC44封装)口连接即可。如果是对已有产品增加加密保护功能,现有硬件资源不足时可以考虑将原51单片机改用PLCC44封装的器件,这样可以增加4个逻辑位接口(P4.0~P4.3)。
推荐采用W78E516单片机,原因如前所述。建议采用40MHz晶体振荡器,工作频率高,难以对数据进行追踪分析,使得安全性更有保障。
(3) 加密器件的配置
所谓对AT88SC0104C的配置,就是按照加密功能要求,对AT88SC0104C的配置区的各数据进行配置。为了达到更高的安全性,除了应将重要的数据都写入AT88SC0104C的存储区,还应当利用AT88SC0104C的EEPROM的可写及非易失性质,将一些数据随机地写入AT88SC0104C并随机进行验证。这里给出一个实际的配置文件实例。
说明:1)19H~20H:可以作为产品序列号,可以不设。
2)40H~4FH(IC):可以作为产品序列号,可以不设。
3)将B0H和B4H(PAC)写为0FFH(8个1;对应为8次错误计数)。
4)WRITE PASSWORD:045697H;READ PASSWORD:858318H;SC:DD4297H。
5)本设计示例所实现的功能如下:
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
地址 |
识别区 |
0BH |
识别码(Nc) |
18H |
53H |
08H |
53H |
08H |
57H |
0BCH |
55H |
00H |
20H |
发布号(IC) |
40H |
密钥区 |
00H |
00H |
00H |
00H |
00H |
00H |
00H |
00H |
90H |
密码区 |
0FFH |
04H |
56H |
97H |
0FFH |
85H |
83H |
18H |
B0H |
|
|
|
|
|
|
|
|
|
|
|
|
图4 AT88SC0104C协议认证的配置示例
用户区0(User0):用于存储电子产品的重要数据;用户区1(User1):作为非易失EEPROM,即作为电子产品的随机存储器;两用户区采用同一套读写各3字节的密码;认证;密码校验。用户区0(User0):只读。用户区1(User1):可读,可写。
AT88SC0104C协议认证卡的一个配置文件实例如图4所示。
(4) 加密器件的编程
所谓加密器件的编程,就是将配置文件和部分保密数据事先按地址写入AT88SC0104C的配置区和用户区各单元。对于电子装置中需要保密的数据,可以事先将他们写入用户区0(User0)。
编程过程的实施,宜采用读写编程器来完成,如采用目标机上的单片机编程则易泄密。
(5) 加密器件的熔断
一般应在系统调试成功后,才将AT88SC0104C中的熔丝熔断。熔断之后,配置不能再更改,这一点须特别注意。对于已经调试成功的配置文件,则应当在写入配置文件后,可以考虑将熔丝熔断,但也可以不熔断。但不宜在单片机内校验传输密码(SC)以免泄密。熔断过程如下:
向熔丝标志寄存器(FUSE)顺序写入06H;04H;00H。
(6) 编制有关加密保护部分的程序
通常先将所要开发的电子产品的全部功能调试好,最后才加入加密保护部分的程序。器件的访问、数据与命令的传输过程与一般I2C无异,只是命令流程必须严格符合AT88SC0104C~25616C的规定。引入加密器件后,则应在程序中的某些位置加入一些固定的认证流程和随机的认证流程,从而进一步增加盗版难度。采用随机的认证流程干扰反汇编追踪最为有效。这里介绍一种较为简便的单片机随机数产生方法及其应用,如图5所示。
N
Y
Y
N
正常退出
图5 随机认证流程的实现示例
图5的算法基于单片机的SRAM 单元在上电时的内容随机这一事实。图5中,P为设定的概率(0~1),建议取小于0.1。
结论
本文作者创新点:给出了一种防范电子产品被盗版复制的新方法、进一步提高安全性的有效措施和具体的实施方案。
参考文献
[1] Atmel公司. AT88SC0104C~25616C Summary. 2001. http://
www.atmel.com