动态密钥在Mifare射频IC卡识别系统中的应用
文章出处:http://www.nexussmartsolutions.com 作者:谢高生 易灵芝 王根平 人气: 发表时间:2011年09月29日
0 引言
射频识别(Radio Frequency Identification, 以下简称RFID)技术是利用无线射频方式进行非接触双向通信并交换数据,以达到识别目的。与传统的条码或磁条识别技术相比,RFID技术具有非接触、精度高、作用距离远、可动态识别多个数据及应用环境适用性较好等优点,在自动化众多领域中得到了很好的应用与发展。
Mifare射频IC卡在硬件本身上具有比较强的安全机制,但射频IC卡应用系统的开放性使它更容易越广泛,由于在最初的RFID应用设计和开发过程中,没有考虑安全问题,导致安全问题日益凸显,已经成为制约RFID应用的重要因素。基于此,针对RFID系统中射频IC卡密钥的使用单一、过于简单等受到攻击,人们可以轻易地对卡进行细致分析研究, 因此安全问题就称为IC卡应用中的一个重要问题。随着大规模集成电路技术的进步以及生产规模的不断扩大,RFID产品的成本不断降低,其应用也越来越暴露出本身缺点。本文结合TEA加密算法,引入动态密钥方案,使得射频IC卡操作一次,其应用扇区密钥实时更新一次,从而大大增强了RFID系统的安全性能。
1 Mifare射频IC卡中的密钥使用及权限设置
射频IC卡分为16个扇区,每区有4块(块0~块3),共64块,按块号编址为0~63。第0扇区的块0(即绝对地址块0)用于存放芯片商、卡商相关代码,块1、块2位数据块。其他扇区的块0、块1、块2为数据块,用于存贮用户数据;各个扇区的块3为各扇区控制块,用于存放密钥A、存取控制条件设置、密钥B。各区控制块结构相同,如表1所示。
表1 各扇区控制块3结构
(注:KeyA/B表示密钥A或密钥B,Never表示任何条件下都不能实现)
每个扇区的密钥和存取控制都是独立的,可以根据实际需要设定各自的密钥及存取控制。扇区中每个块的存取条件都是由密钥和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,三个控制位以正和反两种形式存在于控制字节中,决定了该块的访问权限。数据块的存取控制条件如表2所示。
射频IC卡片中的其他扇区由于其有各自的密钥,因此不能对其进行进一步的操作,如果想对其他扇区进行操作,必须完成各自的密钥认证。认证过程中的任何一环出现差错,整个认证将告失败,必须从新开始。
2 TEA加密算法
极小加密算法(Tiny Encrypt Algorithm,简称TEA)是一种极为简单的对称加密算法,运用比较普遍,简单、高速、有效,以加密解密速度快、实现简单著称。它不是通过算法的复杂性来提供安全保障,而是依赖加密的轮数。TEA算法最初是由剑桥计算机实验室的David Wheeler和Roger Needham在1994年设计的,该算法采用一个128位的密钥来加密64位的数据明文,能产生一个64位的密文,具有较好的抗差分性能。TEA算法使用了一个神秘常数δ作为倍数,其来源于黄金比率,以保证每一轮加密都不相同,TEA把它定义为(即为下面算法描述中的0x9E3779B9)。下面对TEA算法的实现分加密和解密两个过程进行描述,加密轮数为32轮。
2.1 TEA加密
利用128位密钥对64位的明文数据进行加密得到64位的密文数据,过程如下:
(1)初始化:
64位的明文数据分为两部分x 和 y,每部分各占32位;Delta←0x9E3779B9;
Sum←0;;128位的密钥分为4个部分:a、b、c、d,每部分各占32位。
(2)对明文数据进行32次循环迭代计算:
2.2 TEA解密
利用128位密钥对64位的密文数据进行解密得到64位的明文数据,过程如下:
(1)初始化:
64位的明文数据分为两部分x和Y,每部分都为32位;Delta ←Ox9E3779B9;Sum←Delta< 5;128位的密钥分为4个部分:a、b、c、d,每部分都为32位。
(2)对密文数据进行32次循环迭代计算:
(3)合并解密结果:
r(0)←x
r(1)←y
在TEA算法中:<<为向左移位;>>为向右移位;⊕为异或逻辑运算。TEA算法迭代次数为32轮,实际上,TEA加密算法的迭代次数是可以改变的,32轮迭代很充分,16轮就足够。
TEA加密算法实现相当简单, 速度比DES算法(Data Encryption Standard,简称DES,一种数据加密标准的对称分组密码算法)要快3倍,加密密钥128位,加密强度远远高于DES算法。另外,TEA也没有DES那样的转换矩阵,占用存储空间较少,而且可以采用DES模式运行,是一种很有前途的低成本加密算法。
3 动态密钥
Mifare射频IC卡在实际应用中多使用“一卡一密”的方案,也就是一张卡片每个应用扇区固定一个密钥。Desfire MF3D40型号的卡也是采用这个方案,使用卡片唯一的序列号对系统主密钥进行分散,得到不同的密钥,然后写入卡中作为卡片的主密钥。尽管可以为系统提供一定的安全保护,但随着现代计算机技术的迅速发展,攻击者的力量也越来越强,尤其是在用户卡的密钥长度不够的情况下,用户卡受到攻击是很容易的。因此,本文提出动态密钥的方案,结合TEA加密技术,提高系统安全性能。
3.1 基本原理
动态密钥的基本思想是在保持系统主密钥不变的情况下,每读一次用户卡就使用本次通信中产生的数据 动态改写用户卡密钥一次,以此来确保用户卡的密钥不断更新,从而不被破解。数据A可以为当前通信时间、操作机具体标识或者随机数的组合。
3.2 设计与实现
基于TEA加密算法的动态密钥在Mifare射频IC卡识别系统的具体设计与实现过程如下:本设计选用随机数作为数据 (6字节),系统主密钥为UK(6字节),用户卡密钥SK(6字节),射频卡序列号SN(4字节),通过下列计算过程得到动态密钥SK’。
式(5)中:奇偶填充是指分别计算序列号SN的奇数值(1的个数)和偶数值(0的个数),然后将这两个字节的值填充至序列号的后面作为低位,使得SN为6个字节。在本次交易中产生的随机数A (明文数据)经TEA加密存人事先协议好的射频IC卡共享扇区,下次操作时,经TEA解密提取A,然后就可以计算出用户卡的密钥,其过程如下:
式(6)中,同样的方法将明文随机数 A 用奇偶填充至8个字再TEA加密成密文A进行存储。
动态密钥的流程框图如图1所示。
图1基于TEA的动态密钥实现流程
4 试验结果
本试验选用Microchip公司的一款中档型8位闪存单片机PIC16F873A,外部晶振频率11.0592MHz, 在MPLAB IDE开发环境下,采用C语言编程进行试验测试。下面给出一组试验结果:
系统主密钥UK:0x43d63c72a59e(6Byte)
卡序列号SN:0xaa03230c(4Byte)
随机数A:0x3f862b3d75 1 8(6Byte)
奇偶填充序列号得SN, :0xaa03230c0bl5
计算得到动态密钥SK :0xe9d5 lf7eae8b
奇偶填充随机数 得到明文随机数包:0x3f862b3d75181917
TEA加密密钥(分a,b,c,d四部分):
a=0x56c7f235;b=0xa2l6589c;
c=0xb4386ae5;d=0xbc675a17.
经TEA加密随机数A得到密文随机数包:
0x9d968a5e0f79e787经过TEA解密算法,可以成功还原随机数A。试验证明:加解密速度可达21.3kb/s,本设计的随机数A加解密只费时约375μs。这样的速度对系统运行影响很少,加上TEA算法的高可靠性,确保了系统的实时性和通信安全。
5 结束语
RFID射频识别系统正赢得越来越广泛的应用,在一定程度上安全敏感应用的渗透必然离不开系统安全性设计的要求。本文从射频识别系统的安全性需求出发,提出了基于TEA加密算法的动态密钥设计方案,并对其进行了试验仿真具体实现,另外我们已经将该方案成功地应用于停车场管理系统中的车用RFID系统中,经过试验和实践都证明其具有很好的实时性,大大提升了射频识别系统的安全性能。
(文/湘潭大学信息工程学院,深圳职业技术学院,谢高生 易灵芝 王根平)