<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計應(yīng)用 > 對無線IC卡傳輸數(shù)據(jù)實行3DES加密

          對無線IC卡傳輸數(shù)據(jù)實行3DES加密

          作者:常國權(quán) 戴國強(qiáng) 時間:2015-09-07 來源:電子產(chǎn)品世界 收藏
          編者按:為了保護(hù)無線IC卡傳輸數(shù)據(jù)的安全性,防止非法的破解和復(fù)制,在較低配置的單片機(jī)系統(tǒng)中采用3DES加密算法。當(dāng)使用STC單片機(jī)工作在22.1184MHz的典型條件下,3DES算法加密、解密的平均速度約為308.7bit/s,滿足實際應(yīng)用的要求。

          摘要:為了保護(hù)無線IC卡傳輸數(shù)據(jù)的安全性,防止非法的破解和復(fù)制,在較低配置的單片機(jī)系統(tǒng)中采用3DES算法。當(dāng)使用STC單片機(jī)工作在22.1184MHz的典型條件下,、的平均速度約為308.7bit/s,滿足實際應(yīng)用的要求。

          本文引用地址:http://www.ex-cimer.com/article/279222.htm

          引言

            RFID(無線射頻識別)技術(shù)廣泛應(yīng)用于生產(chǎn)制造、物流管理、公共安全等多個領(lǐng)域 [1]。特別是13.56MHz的RFID以其獨(dú)特的優(yōu)勢在公共交通、門禁管理、學(xué)校一卡通、醫(yī)療衛(wèi)生、身份管理等領(lǐng)域得到了充分的應(yīng)用。然而,隨著應(yīng)用范圍的擴(kuò)大,RFID卡的數(shù)據(jù)安全性和保密性顯得日益重要。自從2008年德國研究員亨里克·普洛茨(Henryk Plotz)和弗吉尼亞大學(xué)計算機(jī)科學(xué)在讀博士卡爾斯滕·諾爾(Karsten Nohl)成功地破解了由NXP收購來的的Mifare經(jīng)典非接觸IC卡(M1卡)的安全算法以來,RFID技術(shù)的安全性受到了前所未有的挑戰(zhàn)[2]。為了防止RFID卡被破解、復(fù)制,采用3DES算法和時間戳算法對M1卡中的數(shù)據(jù)進(jìn)行邏輯加密保護(hù),并在較低配置的單片機(jī)系統(tǒng)中進(jìn)行了驗證,實驗結(jié)果達(dá)到了預(yù)期的要求,3DES加密算法可以有效地防止RFID卡被非法破解和復(fù)制。

          1 系統(tǒng)實現(xiàn)

            為了驗證,硬件主控系統(tǒng)采用宏晶科技公司的51系列單片機(jī)STC15L2K32S2,復(fù)旦微電子公司的FM1702無線射頻芯片,及常用的DS1302時鐘模塊、W25Q32存儲器以及按鍵、液晶顯示等構(gòu)成系統(tǒng),如圖1所示。STC15L2K32S2工作電壓3.3V,內(nèi)部具有2K的RAM、32K的Flash以及29K的EEPROM,用內(nèi)部的EEPROM存儲系統(tǒng)重要密碼參數(shù)等信息[3]。FM1702芯片是ISO14443標(biāo)準(zhǔn)的非接觸IC卡用芯片,支持經(jīng)典的M1卡,支持SPI接口方式,工作電壓3V~5V[4]。DS1302時鐘模塊提供當(dāng)前時間,可以使用該時間生成一個4字節(jié)的加密時間戳,加強(qiáng)防止卡被非法復(fù)制。W25Q32存儲器用于存儲卡的加密序列號和時間戳。

          2 3DES加密算法實現(xiàn)

          2.1 在STC單片機(jī)中的實現(xiàn)

            3DES加密算法,是在DES算法基礎(chǔ)上實現(xiàn)的一種增強(qiáng)型的加密算法。它相當(dāng)于是對每個數(shù)據(jù)塊應(yīng)用三次DES加密算法,即通過增加DES的密鑰長度來避免外來的暴力攻擊?;A(chǔ)的DES算法是一種分組對稱加密、算法,也是使用較廣泛的密鑰系統(tǒng)之一,DES算法的優(yōu)點(diǎn)是算法公開、計算量小、加密速度快、加密效率高[5],適合在嵌入式系統(tǒng)中應(yīng)用。

            DES算法對明文數(shù)據(jù)按8字節(jié)進(jìn)行分組處理,即明文按64位分組,密鑰長度也是64位,其中8位為奇偶校驗位。首先使用一個IP置換表對要加密的一組數(shù)據(jù)進(jìn)行初始IP置換,對64位明文按位重新組合,并分成左32位L0和右32位R0兩部分。然后使用一個f函數(shù)對L0和R0實施16輪迭代運(yùn)算,最后使用一個IP-1逆置換表對數(shù)據(jù)作逆置換給出加密的結(jié)果。在16輪迭代運(yùn)算過程中,每次加密迭代使用不同的48位子密鑰K1…K16,這16個子密鑰是由64位密鑰通過選擇置換1、循環(huán)左移、選擇置換2等變換得到的[6]。DES算法的加密流程如圖2所示。

            如前所述,DES算法使用異或、置換、代換、移位操作四種基本運(yùn)算進(jìn)行16輪循環(huán)迭代運(yùn)算來實現(xiàn)的,在單片機(jī)中用Keil C語言實現(xiàn)算法時需要編寫相應(yīng)的基本運(yùn)算操作函數(shù),并設(shè)計一些基本的參數(shù)表。這些表包括:初始置換表IP、逆置換表IP-1、S盒替換表、E擴(kuò)展置換表、P置換表、選擇置換表1(PC-1)、選擇置換表2(PC-2)和循環(huán)右移表。這些表可以用Keil C語言的數(shù)組來實現(xiàn),并聲明為“static unsigned char code”類型的數(shù)組,其中static關(guān)鍵字是保證該數(shù)組只在當(dāng)前模塊可見。

            DES過程的邏輯結(jié)構(gòu)和加密過程一致,但解密過程中使用的子密鑰的順序與加密時的順序正好相反,依次為K16,K15,…,K1。即第1輪迭代使用子密鑰K16,第2輪迭代使用子密鑰K15,…,第16輪迭代使用子密鑰K1,并交換L16和R16的順序,最終得到64位明文[7]。典型的是用兩個密鑰(EDE2模式,即Key1 = Key3,Key2)對明文實施加密-解密-加密。明文P用Key1加密,用Key2解密,用Key3加密,即可得到密文C;密文C用Key3解密,用Key2加密,用Key1解密,即可得到明文P。3DES算法的加密、解密流程如圖3所示。在圖3中,DES-1表示解密,Key1、Key2和Key3各表示64位密鑰。

            根據(jù)圖3可以寫出在Keil C語言中的3DES算法加密、解密函數(shù),其中參數(shù)key_p是指向16字節(jié)密鑰的指針。

            void TripleDes(unsigned char *data_p,unsigned char* key_p,int type)//data待加密數(shù)據(jù),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卡中的應(yīng)用

            M1卡(即NXP Mifare1系列)及與其兼容芯片的RFID卡是用得較多無線卡。公交卡、門禁卡、校園一卡通等都是使用的該系列的卡片。M1卡分為16個扇區(qū),每個扇區(qū)為4塊,每塊16個字節(jié),以塊為存取單位,每個扇區(qū)的最后一塊一般用來存儲該扇區(qū)的物理密碼和訪問控制信息[8],因此,用來存儲用戶數(shù)據(jù)的塊共有47塊(16×3-1,0扇區(qū)0塊固定存儲卡序列號等信息)。


          c語言相關(guān)文章:c語言教程


          加速度計相關(guān)文章:加速度計原理
          晶振相關(guān)文章:晶振原理

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();