微波EDA网,见证研发工程师的成长!
首页 > 通信和网络 > 通信网络技术文库 > 对无线IC卡传输数据实行3DES加密

对无线IC卡传输数据实行3DES加密

时间:12-04 来源:互联网 点击:
摘要:为了保护无线IC卡传输数据的安全性,防止非法的破解和复制,在较低配置的单片机系统中采用3DES加密算法。当使用STC单片机工作在22.1184MHz的典型条件下,3DES算法加密、解密的平均速度约为308.7bit/s,满足实际应用的要求。

引言

RFID(无线射频识别)技术广泛应用于生产制造、物流管理、公共安全等多个领域 [1]。特别是13.56MHz的RFID以其独特的优势在公共交通、门禁管理、学校一卡通、医疗卫生、身份管理等领域得到了充分的应用。然而,随着应用范围的扩大,RFID卡的数据安全性和保密性显得日益重要。自从2008年德国研究员亨里克·普洛茨(Henryk Plotz)和弗吉尼亚大学计算机科学在读博士卡尔斯滕·诺尔(Karsten Nohl)成功地破解了由NXP收购来的的Mifare经典非接触IC卡(M1卡)的安全算法以来,RFID技术的安全性受到了前所未有的挑战[2]。为了防止RFID卡被破解、复制,采用3DES加密算法和时间戳算法对M1卡中的数据进行逻辑加密保护,并在较低配置的单片机系统中进行了验证,实验结果达到了预期的要求,3DES加密算法可以有效地防止RFID卡被非法破解和复制。

1 系统实现

为了验证,硬件主控系统采用宏晶科技公司的51系列单片机STC15L2K32S2,复旦微电子公司的FM1702无线射频芯片,及常用的DS1302时钟模块、W25Q32存储器以及按键、液晶显示等构成系统,如图1所示。STC15L2K32S2工作电压3.3V,内部具有2K的RAM、32K的Flash以及29K的EEPROM,用内部的EEPROM存储系统重要密码参数等信息[3]。FM1702芯片是ISO14443标准的非接触IC卡用芯片,支持经典的M1卡,支持SPI接口方式,工作电压3V~5V[4]。DS1302时钟模块提供当前时间,可以使用该时间生成一个4字节的加密时间戳,加强防止卡被非法复制。W25Q32存储器用于存储卡的加密序列号和时间戳。



2 3DES加密算法实现

2.1 3DES算法在STC单片机中的实现

3DES加密算法,是在DES算法基础上实现的一种增强型的加密算法。它相当于是对每个数据块应用三次DES加密算法,即通过增加DES的密钥长度来避免外来的暴力攻击。基础的DES算法是一种分组对称加密、解密算法,也是使用较广泛的密钥系统之一,DES算法的优点是算法公开、计算量小、加密速度快、加密效率高[5],适合在嵌入式系统中应用。

DES算法对明文数据按8字节进行分组处理,即明文按64位分组,密钥长度也是64位,其中8位为奇偶校验位。首先使用一个IP置换表对要加密的一组数据进行初始IP置换,对64位明文按位重新组合,并分成左32位L0和右32位R0两部分。然后使用一个f函数对L0和R0实施16轮迭代运算,最后使用一个IP-1逆置换表对数据作逆置换给出加密的结果。在16轮迭代运算过程中,每次加密迭代使用不同的48位子密钥K1…K16,这16个子密钥是由64位密钥通过选择置换1、循环左移、选择置换2等变换得到的[6]。DES算法的加密流程如图2所示。



如前所述,DES算法使用异或、置换、代换、移位操作四种基本运算进行16轮循环迭代运算来实现的,在单片机中用Keil C语言实现算法时需要编写相应的基本运算操作函数,并设计一些基本的参数表。这些表包括:初始置换表IP、逆置换表IP-1、S盒替换表、E扩展置换表、P置换表、选择置换表1(PC-1)、选择置换表2(PC-2)和循环右移表。这些表可以用Keil C语言的数组来实现,并声明为“static unsigned char code”类型的数组,其中static关键字是保证该数组只在当前模块可见。



DES解密过程的逻辑结构和加密过程一致,但解密过程中使用的子密钥的顺序与加密时的顺序正好相反,依次为K16,K15,…,K1。即第1轮迭代使用子密钥K16,第2轮迭代使用子密钥K15,…,第16轮迭代使用子密钥K1,并交换L16和R16的顺序,最终得到64位明文[7]。典型的3DES算法是用两个密钥(EDE2模式,即Key1 = Key3,Key2)对明文实施加密-解密-加密。明文P用Key1加密,用Key2解密,用Key3加密,即可得到密文C;密文C用Key3解密,用Key2加密,用Key1解密,即可得到明文P。3DES算法的加密、解密流程如图3所示。在图3中,DES-1表示解密,Key1、Key2和Key3各表示64位密钥。

根据图3可以写出在Keil C语言中的3DES算法加密、解密函数,其中参数key_p是指向16字节密钥的指针。

void TripleDes(unsigned char *data_p,unsigned char* key_p,int type)//data待加密数据,key为

{ //密钥,type表示加密或解密
des(data_p, key_p, type); // DES加密
des(data_p, &key_p[8], !type); // DES解密
des(data_p, key_p, type); // DES加密
}

2.2 3DES算法在M1卡中的应用

M1卡(即NXP Mifare1系列)及与其兼容芯片的RFID卡是用得较多无线卡。公交卡、门禁卡、校园一卡通等都是使用的该系列的卡片。M1卡分为16个扇区,每个扇区为4块,每块16个字节,以块为存取单位,每个扇区的最后一块一般用来存储该扇区的物理密码和访问控制信息[8],因此,用来存储用户数据的块共有47块(16×3-1,0扇区0块固定存储卡序列号等信息)。                                
               
在STC单片机内部的EEPROM中需要存储两种密码,一种是读取M1卡时需要验证的物理密码,另一种是3DES算法用到的加密、解密的逻辑密码,M1卡的物理密码一般是12个字节,3DES算法的逻辑密码是16个字节。当需要往M1卡中写入数据时,单片机把事先存储在STC15单片机的EEPROM中16字节逻辑密钥读取到password[16]数组中,然后把要写入M1卡中的数据按照8个字节一组进行3DES算法加密,当达到16个字节后写入用户指定的扇区块中,如果加密数据不够8个字节,按照约定进行补零以满足3DES算法要求。当单片机控制射频芯片验证物理密码并读取到M1卡中的数据后,按照8个字节一组进行3DES算法解密,并把解密后的明文数据返回给用户。如果不知道3DES算法的16位逻辑密钥,即使非法读取到了M1卡中的数据也无法得到其明文,从而达到了防止数据被破解的目的。



如果得到了卡中的密文,尽管无法得到其明文,但是攻击者可以对卡进行完全复制,包括复制第0扇区第0块的卡序列号等信息(如UID卡即可修改其0扇区第0块的内容),为了防止攻击者对M1卡中的数据进行复制到另一张M1卡中,需要在STC单片机的EEPROM或者外部存储器中建立一个存储卡序列号和时间戳的系统表,卡序列号和时间戳各占4个字节。每当单片机系统对卡进行一次操作之后,就要在卡中和系统表中都写入新的时间戳,当两张完全一样的复制卡先后被系统读取到之后,由于系统在先被读取的复制卡中写入了新的时间戳信息,从而把另一张复制卡标识为非法卡,也就是说,无论攻击者复制了多少张完全相同的卡,只有最先被系统读取到那一张能正常使用,从而,防止了卡被复制。时间戳是STC单片机从DS1302中读取出来的年、月、日、时、分、秒之后经过相应的移位操作而合成的一个四字节无符号变量。时间戳的合成方法如图4所示。系统处理总体流程图如图5所示。



根据图4所示,时间戳的合成算法可以用以下语句来实现:

ts = ((INT32U)yr << 26) | ((INT32U)month << 22) | ((INT32U)day << 17);
ts |= ((INT32U)hr << 12) | ((INT32U)min << 6) | (INT32U)sec;
时间和日期也可以由单片机系统的定时器或者其他方法来实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top