一种用于RFID应用系统加密设计
2015-11-10赵万年王博
赵万年 王博
摘 要:信息安全对于RFID系统应用非常重要,文中结合实际项目,提出了一种用于RFID应用系统的加密设计方案,并利用电子标签芯片TID的唯一性,通过Luhn算法计算校验位,然后通过十六进制与十进制间的转化来生成密码,并写入电子标签芯片指定地址,读写终端通过相同的过程计算密码,并与指定地址写入的密码进行比对,从而实现对信息系统数据的保护。该方案由于每张标签的密码具有唯一性,因此大大提高了破解难度,有效提高了RFID系统的信息安全保护等级。
关键词:RFID;Luhn算法;信息安全;电子标签
中图分类号:TN82 文献标识码:A 文章编号:2095-1302(2015)10-00-02
0 引 言
RFID(Radio Frequency Identification),即射频识别技术,通过无线射频方式进行非接触双向数据通信,对目标加以识别并获取相关数据的自动识别技术[1]。是近几年发展起来的前沿科技项目。因其具有环境适应性强,不受天气环境的影响,可全天候、无接触地完成多目标自动识别、跟踪和管理,信息可动态改写等优点,使该技术广泛应用于社会生活的各领域。
信息安全是指信息网络的硬件、软件及其系统中的数据受到保护,不受偶然或者恶意原因而遭到破坏、更改、泄漏,系统连续可靠正常地运行,信息服务不中断[2]。RFID系统常以明文通信为主,其应用系统的安全性同样受到较大威胁。
这种威胁主要来自于三个方面。其一,为了复制或改变数据,未经授权读出数据载体;其二,将外来数据载体置入某个阅读器的询问范围内,企图得到非授权的出入建筑物或不付费服务;最后,为了假冒真正的数据载体,窃听无线电通信并重放数据[3]。无论以上哪种威胁,都将对供应商或者客户造成严重危害,甚至经济损失。基于此现象,本文结合实际项目提出一种用于RFID应用系统加密设计方案,利用标签芯片TID[4]的唯一性,通过Luhn算法生成校验位,并通过进制之间的转化来实现密码的生成,达到每张标签密码唯一性的目的,实现对信息系统数据的保护。
1 加密方案实现
1.1 加密实现
如图1所示,电子标签芯片中的数据为原始数据,这对客户来说是无意义的。因此,需对标签进行数据初始化,即写入RFID系统定义的数据。然后在系统终端再通过RFID设备读取进行信息验证,达到对待测物品信息进行验证的目的。
图1 RFID系统应用流程图
在方案设计中,如果设计密码一成不变,则有可能被破解,本文提出一种全新的加密技术达到每个标签的密码都不一致,大大提高了破解基于本密码算法RFID系统的难度。其实现思路如下:
(1)读取电子标签的TID信息。TID信息为十六进制编码,且全球唯一;
(2)将十六进制信息转化为十进制信息;
(3)采用Luhn算法,计算校验位。
Luhn算法分为以下6个步骤:
(1)不包含校验位,由最低位起每隔一位取一个数字,将这个数字乘2。
(2)乘积结果如果大于9,则将乘积结果不断减9,直到小于9。
(3)将所有未参与计算数位与所有完成结果整理的乘积数位累加。
(4)累加和与校验位相加,结果为10的整倍数。
(5)将以上TID转化为10进制数和校验位一起组成的数据序列,取该序列的后9位,并倒序,将十进制转化为16进制。
(6)将(5)转化的16进制数写入到电子标签EPC[4]中的02-04字节中。04以后的字节可写入用户自定义数据。
在实施本方案时需要特别注意几个问题:首先,考虑到一批标签芯片TID号的前几位有重复现象,因此为了防止密码的前几位有0存在,例如000AC678,则对于前三位,0占位,但对于保护来说,0不起作用。因此,在方案中选择用倒序的方式进行16进制转化;其次,对于校验位为0的数据,则0必须按位算,不可以把0舍去,取序列后9位;第三,由于TID前几位都是重复的,因此为了避免密码重复,无论芯片TID是64位还是96位,则在本算法中取后16位十六进制数,从而实现每张标签的密码都不一致的目的。电子标签的加密过程是在电子标签出厂时完成的。
1.2 客户数据初始化
客户数据初始化的过程就是要写入客户应用数据的过程,在该过程中,RFID打印机可嵌入如上所述的算法,即当在写数据时,RFID打印机首先读取电子标签的TID,采用以上算法进行密码生成,然后读取电子标签EPC区地址为02-04字节的数据,并进行比对,如果正确,则软件允许数据写入,如果错误,则不允许数据写入。当然,该过程也可省略,不影响加密系统的安全性。
1.3 RFID设备读取验证
解密过程是加密的逆过程。对于系统应用客户端,采用RFID设备读取验证信息的正确性,同样地,首先RFID终端读取电子标签的TID号,采用以上所述Luhn算法计算密码,然后读取电子标签EPC区地址为02-04字节的数据,并进行比对,如果正确,则可进行读数据操作并将读取的数据提交后台数据库进行具体信息查询,反之则读取数据失败,提示非法信息。
2 加密方案的实现
2.1 Luhn算法的软件实现
package com.fh.instrumentpatro.util;
import java.math.BigInteger;
/**
* 用作Rfid密码解析
*
* @author TK
*
*/
public class LuhnUtil {
/**
* Luhn算法 根据卡号获取校验位
*
* @param cardNum
* @return
*/
private static int getCheckNumber(String cardNum) {
int Sum = 0;
int tmpNum;
int tmpN;
int tmpS = 0;
int tmpSum = 0;
//从倒数第二位开始每隔一位取数并且将取到的数值*2
for (int i = cardNum.length() - 1; i >= 0; i -= 2) {
if (i == 0) {
Sum = Integer.parseInt(String.valueOf(cardNum.charAt(i)));
} else {
tmpNum = (Integer .parseInt(String.valueOf(cardNum.charAt(i - 1)))) * 2;
//乘积大于9时减9直到小于9
if (tmpNum > 9) {
tmpNum -= 9;
}
tmpN = Integer.parseInt(String.valueOf(cardNum.charAt(i)));
//所有未参与*2计算的位数之和
tmpS += tmpN;
//所有参与*2计算位数之和
tmpSum += tmpNum;
//所有位数之和
Sum = tmpS + tmpSum;
}
}
//获取校验位
if (Sum >= 0 && Sum <= 9) {
return (10 - Sum);
} else {
String str = String.valueOf(Sum);
if (Integer.parseInt(String.valueOf(str.charAt(str.length() - 1))) == 0) {
return 0;
} else {
return (10 - Integer.parseInt(String.valueOf(str.charAt(str
.length() - 1))));
}
}
}
2.2 测试验证
本方案已经用于某大型信息化系统项目,该项目中采用基于android 4.0操作系统的手持终端,对该加密方案进行了验证,其中对于按上述方案加密的标签,手持终端提示如图2(a)所示,对于未加密标签,则系统提示如图2(b)所示。
(a)合法标签读取 (b)非法标签读取
图2 算法验证
3 结 语
为了保护RFID信息系统安全,本文提出一种用于RFID系统的加密算法,该算法利用TID全球唯一性,通过Luhn算法计算校验位,并通过进制间的转化进行密码生成,实现了单个标签密码的唯一性。该加密方案不受频段限制,可应用于超高频系统,也可用于高频系统,具有极好的系统兼容性,无论对客户还是供应商都是一种信息安全的保护,有效杜绝了RFID明文通信对信息系统造成的安全隐患,提高了系统的安全等级,保护了消费者的利益。
参考文献
[1]周晓光,王晓华,王伟.射频识别(RFID)系统设计,仿真与应用[M].北京:人民邮电出版社,2008.
[2]李剑,张然 .信息安全概论[M].北京:机械工业出版社,2009.
[3] Klaus Finkkenzeller..射频识别技术[M].陈大才,译.北京:电子工业出版社,2001.
[4]吴晓峰,张国雄.射频识别(RFID)系统及制造技术[J].航空精密制造技术,2006(3):18-22.