对无线IC卡传输数据实行3DES加密
摘要:为了保护无线IC卡传输数据的安全性,防止非法的破解和复制,在较低配置的单片机系统中采用3DES加密算法。当使用STC单片机工作在22.1184MHz的典型条件下,3DES算法加密、解密的平均速度约为308.7bit/s,满足实际应用的要求。
本文引用地址:http://www.amcfsurvey.com/article/279222.htm引言
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块固定存储卡序列号等信息)。
c语言相关文章:c语言教程
加速度计相关文章:加速度计原理 晶振相关文章:晶振原理
评论