對無(wú)線(xiàn)IC卡傳輸數據實(shí)行3DES加密
摘要:為了保護無(wú)線(xiàn)IC卡傳輸數據的安全性,防止非法的破解和復制,在較低配置的單片機系統中采用3DES加密算法。當使用STC單片機工作在22.1184MHz的典型條件下,3DES算法加密、解密的平均速度約為308.7bit/s,滿(mǎn)足實(shí)際應用的要求。
本文引用地址:http://dyxdggzs.com/article/279222.htm引言
RFID(無(wú)線(xiàn)射頻識別)技術(shù)廣泛應用于生產(chǎn)制造、物流管理、公共安全等多個(gè)領(lǐng)域 [1]。特別是13.56MHz的RFID以其獨特的優(yōu)勢在公共交通、門(mén)禁管理、學(xué)校一卡通、醫療衛生、身份管理等領(lǐng)域得到了充分的應用。然而,隨著(zhù)應用范圍的擴大,RFID卡的數據安全性和保密性顯得日益重要。自從2008年德國研究員亨里克·普洛茨(Henryk Plotz)和弗吉尼亞大學(xué)計算機科學(xué)在讀博士卡爾斯滕·諾爾(Karsten Nohl)成功地破解了由NXP收購來(lái)的的Mifare經(jīng)典非接觸IC卡(M1卡)的安全算法以來(lái),RFID技術(shù)的安全性受到了前所未有的挑戰[2]。為了防止RFID卡被破解、復制,采用3DES加密算法和時(shí)間戳算法對M1卡中的數據進(jìn)行邏輯加密保護,并在較低配置的單片機系統中進(jìn)行了驗證,實(shí)驗結果達到了預期的要求,3DES加密算法可以有效地防止RFID卡被非法破解和復制。
1 系統實(shí)現
為了驗證,硬件主控系統采用宏晶科技公司的51系列單片機STC15L2K32S2,復旦微電子公司的FM1702無(wú)線(xiàn)射頻芯片,及常用的DS1302時(shí)鐘模塊、W25Q32存儲器以及按鍵、液晶顯示等構成系統,如圖1所示。STC15L2K32S2工作電壓3.3V,內部具有2K的RAM、32K的Flash以及29K的EEPROM,用內部的EEPROM存儲系統重要密碼參數等信息[3]。FM1702芯片是ISO14443標準的非接觸IC卡用芯片,支持經(jīng)典的M1卡,支持SPI接口方式,工作電壓3V~5V[4]。DS1302時(shí)鐘模塊提供當前時(shí)間,可以使用該時(shí)間生成一個(gè)4字節的加密時(shí)間戳,加強防止卡被非法復制。W25Q32存儲器用于存儲卡的加密序列號和時(shí)間戳。
2 3DES加密算法實(shí)現
2.1 3DES算法在STC單片機中的實(shí)現
3DES加密算法,是在DES算法基礎上實(shí)現的一種增強型的加密算法。它相當于是對每個(gè)數據塊應用三次DES加密算法,即通過(guò)增加DES的密鑰長(cháng)度來(lái)避免外來(lái)的暴力攻擊?;A的DES算法是一種分組對稱(chēng)加密、解密算法,也是使用較廣泛的密鑰系統之一,DES算法的優(yōu)點(diǎn)是算法公開(kāi)、計算量小、加密速度快、加密效率高[5],適合在嵌入式系統中應用。
DES算法對明文數據按8字節進(jìn)行分組處理,即明文按64位分組,密鑰長(cháng)度也是64位,其中8位為奇偶校驗位。首先使用一個(gè)IP置換表對要加密的一組數據進(jìn)行初始IP置換,對64位明文按位重新組合,并分成左32位L0和右32位R0兩部分。然后使用一個(gè)f函數對L0和R0實(shí)施16輪迭代運算,最后使用一個(gè)IP-1逆置換表對數據作逆置換給出加密的結果。在16輪迭代運算過(guò)程中,每次加密迭代使用不同的48位子密鑰K1…K16,這16個(gè)子密鑰是由64位密鑰通過(guò)選擇置換1、循環(huán)左移、選擇置換2等變換得到的[6]。DES算法的加密流程如圖2所示。
如前所述,DES算法使用異或、置換、代換、移位操作四種基本運算進(jìn)行16輪循環(huán)迭代運算來(lái)實(shí)現的,在單片機中用Keil C語(yǔ)言實(shí)現算法時(shí)需要編寫(xiě)相應的基本運算操作函數,并設計一些基本的參數表。這些表包括:初始置換表IP、逆置換表IP-1、S盒替換表、E擴展置換表、P置換表、選擇置換表1(PC-1)、選擇置換表2(PC-2)和循環(huán)右移表。這些表可以用Keil C語(yǔ)言的數組來(lái)實(shí)現,并聲明為“static unsigned char code”類(lèi)型的數組,其中static關(guān)鍵字是保證該數組只在當前模塊可見(jiàn)。
DES解密過(guò)程的邏輯結構和加密過(guò)程一致,但解密過(guò)程中使用的子密鑰的順序與加密時(shí)的順序正好相反,依次為K16,K15,…,K1。即第1輪迭代使用子密鑰K16,第2輪迭代使用子密鑰K15,…,第16輪迭代使用子密鑰K1,并交換L16和R16的順序,最終得到64位明文[7]。典型的3DES算法是用兩個(gè)密鑰(EDE2模式,即Key1 = Key3,Key2)對明文實(shí)施加密-解密-加密。明文P用Key1加密,用Key2解密,用Key3加密,即可得到密文C;密文C用Key3解密,用Key2加密,用Key1解密,即可得到明文P。3DES算法的加密、解密流程如圖3所示。在圖3中,DES-1表示解密,Key1、Key2和Key3各表示64位密鑰。
根據圖3可以寫(xiě)出在Keil C語(yǔ)言中的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卡是用得較多無(wú)線(xiàn)卡。公交卡、門(mén)禁卡、校園一卡通等都是使用的該系列的卡片。M1卡分為16個(gè)扇區,每個(gè)扇區為4塊,每塊16個(gè)字節,以塊為存取單位,每個(gè)扇區的最后一塊一般用來(lái)存儲該扇區的物理密碼和訪(fǎng)問(wèn)控制信息[8],因此,用來(lái)存儲用戶(hù)數據的塊共有47塊(16×3-1,0扇區0塊固定存儲卡序列號等信息)。
c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
加速度計相關(guān)文章:加速度計原理 晶振相關(guān)文章:晶振原理
評論