摘要:數(shù)據(jù)加密標(biāo)準(zhǔn)DES是對稱密碼體系中應(yīng)用最廣泛的算法之一,。為了滿足信息安全和加密型數(shù)據(jù)采集系統(tǒng)的密鑰的有效存儲(chǔ),,設(shè)計(jì)基于 TMS320VC5410系列DSP和SLE5542型IC卡的DES加密系統(tǒng)。采用MeBSPl接口與CD4066開關(guān)電源設(shè)計(jì)了IC卡讀卡器,,并通過 CCS開發(fā)環(huán)境編寫,、下栽和調(diào)試應(yīng)用程序,完成了DSP與SLE5542卡之間的IS07816-3通信協(xié)議,。另外通過McBSPO連接MAX232電平轉(zhuǎn)換器,以軟件形式實(shí)現(xiàn)了目標(biāo)板從RS232接口接收來自PC機(jī)的明文數(shù)據(jù),,系統(tǒng)對其進(jìn)行DES加密后輸出密文,。實(shí)驗(yàn)結(jié)果表明系統(tǒng)可以正確讀取IC卡中的 64位密鑰,完成數(shù)據(jù)加密后準(zhǔn)確地顯示在接收端,,符合設(shè)計(jì)要求,。
關(guān)鍵詞:數(shù)據(jù)加密標(biāo)準(zhǔn)(DES);TMS320VC5410,;加密,;SIE5542
數(shù)據(jù)加密是為了保證所傳輸信息的安全而在特定參數(shù)(稱為密鑰)的控制下按照某種規(guī)律對原始數(shù)據(jù)進(jìn)行的人為擾亂,將其轉(zhuǎn)換成秘密形式的信息,。數(shù)據(jù)加密標(biāo)準(zhǔn) (Data Encrvption Standard,,DES)是第一個(gè)廣泛應(yīng)用于商用數(shù)據(jù)保密的、公開的密碼算法,,在其公布和正式實(shí)施后,,成為許多國家政府、銀行和標(biāo)準(zhǔn)組織的信息安全處理標(biāo)準(zhǔn),。然而DES實(shí)現(xiàn)信息保密的前提是對于密鑰的有效管理,,這就要求基于DES的加密系統(tǒng)必須提供可靠、方便的密鑰保存設(shè)備。同時(shí)在近20年,,DSP處理器的性能得到很大改善,,軟件和開發(fā)工具也得到相應(yīng)發(fā)展,價(jià)格大幅下降,,應(yīng)用也越來越廣泛,。本文選用TI公司TMS320VC54x系列DSP,采用軟件方式實(shí)現(xiàn)DES加密算法,,同時(shí)以集成電路卡(Integrated Circuit Card)作為密鑰存儲(chǔ)設(shè)備,。為了解決DSP的通用IO口較少的問題,使DSP片上的一些特殊功能引腳工作在通用輸入輸出引腳狀態(tài)顯得尤為重要,。本文結(jié)合 DSP運(yùn)算速度快,、片上資源多的特點(diǎn),研究并實(shí)現(xiàn)基于DSP的DES加密系統(tǒng)及其與IC卡以及終端PC機(jī)之間的通信協(xié)議,。
1 DES算法簡介
DES作為美國國家標(biāo)準(zhǔn)的加密算法,,既可用于加密又可用于解密。其加密過程主要分為3個(gè)部分,,如圖1所示,。首先把輸入的數(shù)據(jù)比特流以每64 bit為一組進(jìn)行分組得到明文x,之后是一個(gè)初始置換,,IP,,記為Xo=IP(x)=LoRo(Lo代表左邊32 bit,Ro代表右邊32 bit),;然后以每一組作為加密單元,,在16個(gè)子密鑰(每個(gè)子密鑰的長度為48 bit)的控制下根據(jù)下列規(guī)則計(jì)算LiRi(1≤i≤16),進(jìn)行16輪的非線性變換:
每輪中都有換位和代替運(yùn)算,;最后再經(jīng)過一個(gè)逆初始置換IP-1(為IP的逆變換)輸出一組64 bit長的密文,。
對于數(shù)據(jù)較大的文件加密要求芯片具有很高的處理速度。出于保密通信系統(tǒng)的需求,,該系統(tǒng)設(shè)計(jì)以IC卡作為密鑰的存儲(chǔ)設(shè)備,,采用TI公司 TMS320VC54x系列DSP實(shí)現(xiàn)對來自PC機(jī)的明文數(shù)據(jù)進(jìn)行DES加密處理。該方案運(yùn)算速度快,、保密性好,,具有很高的可擴(kuò)展性,用于保密的數(shù)據(jù)采集系統(tǒng)中,,對來自數(shù)據(jù)采集模塊的信號進(jìn)行DES加密后,,傳輸給PC機(jī)。
2 系統(tǒng)硬件設(shè)計(jì)
結(jié)合運(yùn)算速度,,外設(shè)接口以及性價(jià)比等方面的考慮,,選用TI公司TMS320VC54x系列16位定點(diǎn)TMS320VC5410型DSP作為實(shí)現(xiàn)DES加密的硬件平臺(tái)。它具有較低的功耗與杰出的性能,時(shí)鐘最高頻率可以達(dá)到100 MHz,。另外,,TMS320VC5410片上提供了3個(gè)可以設(shè)置為GPIO接口的多通道緩沖串口(McBSP),這對外圍設(shè)備接口子系統(tǒng)的設(shè)計(jì)至關(guān)重要,。系統(tǒng)中除TMS320VC5410基本的工作外圍電路如電源晶振模塊,、Flash模塊和JT-AG接口模塊以外,還主要包括以下2部分:1)TMS320VC541O與SLE5542型IC卡片的接口模塊,,主要用于系統(tǒng)工作時(shí)IC卡向DSP傳送用于數(shù)據(jù)加密的密鑰和卡片存儲(chǔ)的其他一些用戶信息,;2)DSP與PC主機(jī)的通信接口模塊,它是DSP與個(gè)人電腦的通信接口,,主要用于DSP接收明文數(shù)據(jù)以及將加密后的數(shù)據(jù)反饋至PC機(jī),。
2.1 McBSP簡介
TMS320VC5410片內(nèi)包含了3個(gè)全雙工的多通道緩沖串口(Multichannel Buffered Serial Ports,McBSP),,分別為McBSP0,、McBSPI和McB-SP2。它們可以提供全雙工通信,、連續(xù)數(shù)據(jù)流的雙緩沖數(shù)據(jù)寄存器,、接收和發(fā)送獨(dú)立的幀和時(shí)鐘,可以直接和系統(tǒng)中的其他器件接口連接并可以配置為通用IO口,。McBSP與外設(shè)的數(shù)據(jù)交換,,通過DX引腳發(fā)送,RX引腳接收,。通信的時(shí)鐘與幀信號由CLKX,、CLKR、FSX及FSR引腳來控制,。T-MS320VC5410對McBSP的控制由2個(gè)16 bit的串口控制寄存器(SPCR[1,2])和引腳控制寄存器(PCR)來實(shí)現(xiàn),。DSP的CPU或DMA從數(shù)據(jù)接收寄存器(DRR [1,,2])讀取接收數(shù)據(jù);發(fā)送時(shí),,向數(shù)據(jù)發(fā)送寄存器(DXR[1,,2])寫數(shù)據(jù),數(shù)據(jù)寫入后通過傳輸移位寄存器(XSR[1,,2]),,移位輸出到DX 上。同樣,,從DR上接收的數(shù)據(jù),,移位存儲(chǔ)到接收移位寄存器(RSR[1,2]),并復(fù)制到接收緩存寄存器(RBR[1,,2]),。然后,再由 (RBR[1,,2])復(fù)制到DRR[1,,2]。DRR[1,,2]可以由CPU或DMA讀出,。
2.2 DSP與IC卡連接模塊
選用西門子公司SLE5542型卡片,其引腳定義和功能說明如表1所示,。它是一種按字節(jié)操作的多存儲(chǔ)器邏輯加密卡,,應(yīng)答復(fù)位符合ISO78 16-3標(biāo)準(zhǔn)。該型卡片內(nèi)置了3個(gè)存儲(chǔ)器:32×1 bit的PROM型保護(hù)存儲(chǔ)器,、256×1 bit的EEPROM型主存儲(chǔ)器以及32x1 bit的EEPROM型加密存儲(chǔ)器,。主存儲(chǔ)器可重復(fù)擦除使用,按字節(jié)操作,,并分為保護(hù)數(shù)據(jù)區(qū)和應(yīng)用數(shù)據(jù)區(qū),,讀出均不受限制,但應(yīng)用數(shù)據(jù)區(qū)的擦除和寫入則受加密存儲(chǔ)器中的密碼及密碼計(jì)數(shù)器保護(hù),。
為了提高硬件的利用率和解決DSP片上通用IO口較少的問題,,本系統(tǒng)設(shè)計(jì)將MeBSPI配置為通過IO口實(shí)現(xiàn)其與IC卡片通信的模塊。由于McB-SP引腳中的DX只能配置用作通用輸出腳,,DR只能配置用作通用輸入腳,,不方便程序編寫對引腳狀態(tài)控制。所以在DSP對卡片讀寫的硬件電路中選擇了MeBSP1 的FSR1,、CLKR1,、CLKX1、和FSX1這4個(gè)引腳,,它們均可以通過16位的引腳控制寄存器(PCR)配置為通用I/O引腳,。FSR1引腳通過 CD4066開關(guān)電源芯片來控制SLE5542卡片的上電與掉電;由CLKR1連接卡片的RST觸點(diǎn),,卡片復(fù)位時(shí)改變引腳的高低電平狀態(tài),;CLKX1引腳與IC卡片的時(shí)鐘觸點(diǎn)CLK相連,該引腳狀態(tài)的高低變化為卡片正常工作提供時(shí)鐘信號,;FSX1連接卡片數(shù)據(jù)I/O觸點(diǎn),,負(fù)責(zé)DSP與IC卡片之間讀寫命令字和用戶有用數(shù)據(jù)的傳送。注意CLKX1和FSX1引腳要接上拉電阻,,且FSX1配置的輸入或輸出狀態(tài)要根據(jù)DSP與IC卡之間數(shù)據(jù)流向而定,。
為了使McBSP1的相關(guān)引腳工作在系統(tǒng)需求的通用I/O狀態(tài),,首先需要將該串口的控制寄存器SPCR1中的RRST位和SPCR2中的XRST位均設(shè)置為‘O’,使串口復(fù)位,,串口操作禁止,。然后設(shè)置引腳控制寄存器PCR中的XIOEN和RIOEN為‘1’,使串口的接收和發(fā)送引腳均工作在通用I/0模式,;另外將FSRM,、CLKXM和CLKRM位均設(shè)置為‘1’,使FSR1,、CLKX和CLXR引腳作為通用輸出管腳,,將要輸出的值分別存儲(chǔ)在PCR中的FSRP位、CLKXP和CLKRP,;對于FSXM位的設(shè)置,,則需要根據(jù)通信時(shí)的具體情況而定。
2.3 DSP與PC通信模塊設(shè)計(jì)
系統(tǒng)設(shè)計(jì)中選擇了McBSP0作為TMS320VC5410從外界PC機(jī)接收明文數(shù)據(jù)和輸出密文的通道,,直接通過PC機(jī)的RS232異步串口與TMS320VC54 10之間進(jìn)行加密解密數(shù)據(jù)的傳送,。這種方法通過軟件實(shí)現(xiàn)PC機(jī)與DSP之間的串行雙工通信,它的硬件設(shè)計(jì)簡單且不會(huì)過多占用CPU的時(shí)間,,
可以實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,。
RS232異步串口采用負(fù)邏輯傳送數(shù)據(jù),以10 V電壓狀態(tài)表示數(shù)據(jù)‘O’,,-10 V電壓狀態(tài)表示數(shù)據(jù)‘1’,;而DSP的IO口則以3.3 V表示高電平‘1’狀態(tài)或者無數(shù)據(jù)傳送,以0 V表示低電平‘O’狀態(tài),。因此為了使TMS320VC54lO的多通道緩沖串口與RS232接口進(jìn)行通信,,需要電平轉(zhuǎn)換電路,本文使用了MAXIM公司MAX232電平轉(zhuǎn)換器,,如圖3所示,。
3 系統(tǒng)軟件設(shè)計(jì)
選用TI公司CCS(Code Composer Studio)作為該加密系統(tǒng)軟件設(shè)計(jì)時(shí)的開發(fā)和調(diào)試工具,使用C語言和匯編混合編程的模式完成軟件設(shè)計(jì),。由于C語言編程具有便于閱讀,、維護(hù)、交流和可移植性好的特點(diǎn),,因此采用C語言完成整個(gè)程序的主框架設(shè)計(jì),在對時(shí)間要求比較苛刻的地方或?qū)Υa運(yùn)行效率有較大影響的場合采用匯編指令編寫,。
3.1 DSP讀IC卡軟件實(shí)現(xiàn)
3.1.1 McBSP1串口配置
當(dāng)把卡片插入卡座時(shí),,狀態(tài)開關(guān)選通,并且電路板上提示燈亮表示插卡到位,,DSP內(nèi)存中的讀卡狀態(tài)標(biāo)志位設(shè)置為‘1’,。TMS320VC5410開始初始化 McBSP1,,使其工作在通用IO口狀態(tài),采用子地址尋址的方式對SPCR11(映射地址為0049h,,子地址為00h),、SPCR12(子地址為 01h)和PCR1(子地址為0Eh)等寄存器進(jìn)行配置。配置代碼如下:
SPCR11=0x0000,;
SPCR12=0x0000,;
PCR1=0x3F00;
此時(shí)FSR1,、FSX1,、CLKR1和CLKX1均用作通用輸出管腳。把PCR中的FSRP位設(shè)置為‘O’,,PCR1&=0xFFFB,;則卡片Voc觸點(diǎn)電平為低,卡片處于掉電狀態(tài),;通過語句PCR1l=0x0004把FSR1引腳置高電平給卡片上電,。
由于DSP的FSX1引腳與卡片的數(shù)據(jù)I/O觸點(diǎn)相連,要求FSX1引腳具有雙向傳輸?shù)墓δ?,但該引腳在同一時(shí)刻只能處于輸入或輸出一種狀態(tài),,為此定義了以下兩個(gè)宏實(shí)現(xiàn)引腳在輸入與輸出狀態(tài)的改變。
3.1.2 復(fù)位與復(fù)位應(yīng)答
DSP檢測到讀卡狀態(tài)位為‘1’時(shí),,給卡片上電,,CLK(和RST保留于狀態(tài)L,開始運(yùn)行讀卡程序?qū)⒖ㄖ写鎯?chǔ)的密鑰讀取至內(nèi)存中,。首先按照 ISO7816-3標(biāo)準(zhǔn)對SLE5542卡片進(jìn)行應(yīng)答復(fù)位,,復(fù)位可以發(fā)生在操作過程的任意時(shí)刻。之后,,RST線被置于H狀態(tài),,并維持至少15μs。在 RST狀態(tài)由高電平到低電平的轉(zhuǎn)換期間CLK提供一個(gè)時(shí)鐘脈沖,,卡片內(nèi)的地址計(jì)數(shù)器(address counter)清零,,I/O引腳輸出有效數(shù)據(jù)的第1位,這一數(shù)據(jù)可視為復(fù)位應(yīng)答,;在此后連續(xù)31個(gè)時(shí)鐘脈沖的作用下,,主存儲(chǔ)器中的前4個(gè)地址中的32位標(biāo)頭數(shù)據(jù)被讀出;下一個(gè)時(shí)鐘脈沖使I/O引腳變?yōu)楦咦锠顟B(tài),;此時(shí)卡片復(fù)位與復(fù)位應(yīng)答完成,。
3.1.3 DSP讀卡主程序設(shè)計(jì)
圖4為DSP讀IC卡主程序設(shè)計(jì)??ㄆ瑥?fù)位應(yīng)答之后,,則處于等待指令輸入的狀態(tài),。SLE5542每個(gè)指令均由控制字節(jié)、地址字節(jié)和數(shù)據(jù)字節(jié)組成,,傳輸時(shí)從控制字節(jié)的最低位開始,。控制字節(jié)傳送完畢之后,,依次傳送地址字節(jié)和數(shù)據(jù)字節(jié),,均為低位在前。每個(gè)指令的傳輸都開始于一個(gè)Start條件 (在時(shí)鐘信號為高電平狀態(tài),,通過DSP發(fā)送卡片IO口一個(gè)下降沿),,結(jié)束于Stop條件(在時(shí)鐘信號為高電平狀態(tài),通過DSP發(fā)送卡片IO口一個(gè)上升沿),。根據(jù)指令作用的不同,。SLE5542接收完成后可能處于數(shù)據(jù)輸出模式(DSP讀卡)或者內(nèi)部處理模式(DSP寫卡)。
通過TMS320VC5410發(fā)送讀卡命令和所要讀取內(nèi)容的地址(N=0,,…,,255)后,在CLK信號的作用下卡片將主存儲(chǔ)器中的數(shù)據(jù)按比特移至I/O 引腳發(fā)送至DSP內(nèi)存中,。讀取數(shù)據(jù)完成后,,額外的一個(gè)時(shí)鐘信號將使I/O引腳變?yōu)楦咦锠顟B(tài),卡片退出輸出模式等待接收新的指令,,也可以用Break條件 (在CLK為低時(shí),,把RST信號由低電平變?yōu)楦唠娖綘顟B(tài))結(jié)束此次操作。
圖5顯示了TMS320VC5410對SLE5542卡片讀卡程序的調(diào)試結(jié)果,,為了驗(yàn)證讀卡功能的實(shí)現(xiàn),,系統(tǒng)讀取了卡片中的所有字節(jié)的內(nèi)容。其中前8個(gè)字節(jié)為‘A2131091FFFF8115’為IC卡的廠商標(biāo)識(shí),;之后地址8~20的13個(gè)字節(jié)全為‘FF’是寫保護(hù)區(qū),;地址21~26是6個(gè)字節(jié)的用戶代碼‘D27600000400’,之后又是5個(gè)字節(jié)的寫保護(hù)區(qū),;從地址32~255之間的數(shù)據(jù)是用戶數(shù)據(jù)區(qū),,可以在這些地址里存放加密系統(tǒng)的密鑰和其他的用戶信息。
3.2 PC通信軟件設(shè)計(jì)
3.2.1 MeBSP0的初始化配置
首先通過SPCR1O=0x0000,,SPCR20=Ox0000把RRST與XRST位設(shè)置為‘O’,,使串口復(fù)位。設(shè)置PCR0=0x0BOC,;采樣率由DSP內(nèi)部產(chǎn)生,,接收與發(fā)送幀同步信號為低有效,時(shí)鐘上升沿發(fā)送數(shù)據(jù),、下降沿接收數(shù)據(jù),。其次通過接收控制寄存器RCR1O(子地址為02h)和 RCR20(子地址為03h)來對DSP串口接收模式進(jìn)行設(shè)置,令RCR10=0x0940,;RCR20=0x0004,;接收幀長度10字、每字16 bit,,忽略除第一個(gè)幀同步后的其他幀同步信號,。通過傳輸控制寄存器XCR10(子地址為04h)和XCR20(子地址為05h)來對DSP串口發(fā)送模式進(jìn)行設(shè)置,令XCR10=0x0940,;XCP20=0x0004,;使數(shù)據(jù)的發(fā)送與接收模式一致。另外,,采樣率發(fā)生器控制寄存器SRGR10(子地址為 06h)和SRGR20(子地址為07h)控制采用率發(fā)生器的工作模式,。本系統(tǒng)中選擇PC機(jī)的串口工作波特率為38 400,采樣率發(fā)生器計(jì)算公式為:
CLKGDV=CPU工作頻率/(16x波特率)-1
由于TMS320VC5410工作頻率為100 MHz,,因此CLKGDV=100 000 000/(16x38 400)-1=161,,設(shè)置SRGR1=0x00A1,SRGR2=0x2000,;最后通過SPCR1=0x0001,,SRGR2=0x2000;對串口使能,,處于可操作狀態(tài),,至此完成了McBSPO的初始化配置。
3.2.2 數(shù)據(jù)格式的統(tǒng)一
DSP通過McBSP0接收外界PC機(jī)數(shù)據(jù)采用中斷方式,。這里為了實(shí)現(xiàn)TMS320VC5410同步串口與PC機(jī)異步串口通信時(shí)數(shù)據(jù)格式的統(tǒng)一,,把 McBSP的1個(gè)16位字等效為PC機(jī)串口傳送的1個(gè)8N1模式數(shù)據(jù)(1個(gè)起始位+8個(gè)數(shù)據(jù)位+1個(gè)停止位)的1位。PC機(jī)串口每發(fā)送1個(gè)位的數(shù)據(jù),,DSP采樣16次暫存數(shù)據(jù)接收寄存器DRR10(地址為21h)中,。例如PC機(jī)通過RS232串口傳送數(shù)據(jù)為‘1’,則DRR10經(jīng)過16次采用后接收一個(gè)字的數(shù)據(jù)為‘FFFFh’,,同理若前者后‘0’,,則后者為‘0000h’。之后觸發(fā)McBSPO串口接收中斷,,DSP執(zhí)行中斷服務(wù)程序?qū)RR1O 中的有效數(shù)據(jù)(除去起始位和停止位)取走至內(nèi)存中,,并對計(jì)數(shù)器加1。當(dāng)接收到一個(gè)完整的幀后,,DSP置串口數(shù)據(jù)解碼標(biāo)志位為‘1’,,DSP開始運(yùn)行解碼程序,將‘FFFFh’和‘0000h’分別等效為一個(gè)比特位‘1’和‘0’,,從而恢復(fù)出原始的數(shù)據(jù)幀,。
當(dāng)DSP對接收到的數(shù)據(jù)完成加密之后需要反饋輸出,,TMS320VC5410串口數(shù)據(jù)向PC機(jī)發(fā)送的過程與數(shù)據(jù)接收的過程正好相反。每幀數(shù)據(jù)都需要進(jìn)行串口編碼之后通過數(shù)據(jù)發(fā)送寄存器DXR1O(地址為23h)發(fā)出,。即把8位有效數(shù)據(jù)中的‘0’編碼為‘0000h’,,‘1’編碼為‘FFFFh’,按照從低位到高位的順序重新排列編碼后的數(shù)據(jù),,并在幀首和幀尾分別添加起始位‘0000h’和結(jié)束位‘FFFFh’,,將每組10個(gè)數(shù)據(jù)作為一幀信號發(fā)出。
圖6顯示了本文設(shè)計(jì)的加密系統(tǒng)的實(shí)驗(yàn)結(jié)果,。通過PC機(jī)和RS-232串口發(fā)送字符‘11112222’的十六進(jìn)制形式為‘3131313132323232’共64 bit,,TMS320VC5410接收到64 bit明文數(shù)據(jù)后,通過讀取IC卡中的64 bit密鑰‘310000000000031’并對明文進(jìn)行DES加密后,,輸出密文的十六進(jìn)制形式為‘96B466D634DE9A2D’,。結(jié)果顯示系統(tǒng)工作穩(wěn)定可靠,符合設(shè)計(jì)要求,。
4 結(jié)論
本文采用SLE5542型IC卡存儲(chǔ)密鑰,,TMS320VC5410中的McBSP引腳與卡片觸點(diǎn)連接并實(shí)現(xiàn)對卡片的應(yīng)答復(fù)位和內(nèi)容的讀取,同時(shí)通過RS2 32串口與個(gè)人PC機(jī)實(shí)時(shí)交換數(shù)據(jù),,接收PC機(jī)發(fā)送的明文并對其DES加密后反饋輸出,。由于McBSP的工作機(jī)制是同步串口,把其當(dāng)作通用I/O口和異步串口使用時(shí)必須注意內(nèi)部寄存器的設(shè)置和輸入輸出方向的設(shè)定,。經(jīng)軟硬件調(diào)試,,實(shí)驗(yàn)結(jié)果表明該方案完全可以滿足大數(shù)據(jù)量的加密,合理使用了硬件資源,,可以進(jìn)一步升級擴(kuò)展作為數(shù)據(jù)采集保密系統(tǒng)的加密模塊,。