智能卡安全報文功能在網(wǎng)絡認證和通信中的應用
文章出處:http://srpd123.com 作者:段 斌 人氣: 發(fā)表時間:2011年10月09日
1 引 言
隨著電子商務的發(fā)展, 對安全可靠地實現(xiàn)網(wǎng)上支付及網(wǎng)上身份認證的要求越來越突出, 而利用帶操作系統(tǒng)的智能CPU 卡是解決這個問題的首選方案。為防止信息在網(wǎng)上被截取、篡改或失密, 可以利用智能卡的安全報文功能。智能卡的安全報文功能, 是指若智能卡中的某應用文件的某些操作(如讀、寫等) 在發(fā)卡時已被設定為安全報文形式, 那么在對智能卡的該應用文件進行這些操作時, 終端發(fā)的指令和智能卡的應答都必須采用帶MAC 或加密數(shù)據(jù)域的安全報文的形式。安全報文傳送的目的是保證終端和智能卡之間所交換數(shù)據(jù)的可靠性、完整性和對發(fā)送方的認證。數(shù)據(jù)完整性和對發(fā)送方的認證通過使用WAC 來實現(xiàn)。數(shù)據(jù)的可靠性通過對數(shù)據(jù)域的加密來得到保證。
2 系統(tǒng)結(jié)構(gòu)
2.1.1 概述
本文所設計系統(tǒng)采用客戶機ö服務器模式, 其中客戶端為用戶IC 卡操作方, 它連接IC 卡讀卡器讀寫用戶IC 卡, 服務器端為管理方和認證方, 它連接讀卡器及PSAM 卡。系統(tǒng)有四個主體: 客戶機(軟件)、用戶智能卡ICC、服務器(軟件)、PSAM 卡。為保證系統(tǒng)的安全性, 操作ICC 的指令和應答都由服務器直接負責, 當客戶機上有操作ICC 時由客戶機通知服務器, 服務器產(chǎn)生操作ICC 的指令代碼, 操作PSAM 卡計算出該指令信息安全報文的MAC 或數(shù)據(jù)域的密文, 形成安全報文形式的ICC 指令, 服務器將該指令經(jīng)由網(wǎng)絡送給客戶機, 由客戶機將此安全報文形式的指令代碼送給ICC。ICC 在執(zhí)行指令或解密出應答中的數(shù)據(jù)信息時, 判斷ICC執(zhí)行指令的情況并獲得應答中的數(shù)據(jù)信息。從這個過程可以看出, 服務器事實上是操作用戶IC 卡的一個遠程終端, 而網(wǎng)絡和客戶機只是傳遞信息的媒體。因此, 我們只需構(gòu)架好服務器和客戶機之間信息交換的通信鏈路, 并設計好傳送和接收信息的函數(shù)及指令包裝方法, 對智能卡的網(wǎng)絡安全報文的討論可以等價于當?shù)亟K端操作ICC 的安全報文。
2.1.2 服務器和客戶機之間通信鏈路的建立
圖1 系統(tǒng)結(jié)構(gòu)圖
該過程的實現(xiàn)主要利用了M FC 中的CSocket 類, 分別在客戶端建立發(fā)送套接字, 在服務器端建立偵聽、接收套接字??蛻舳伺c服務器端數(shù)據(jù)通信過程如圖2 所示。
圖2 客戶端與服務器端數(shù)據(jù)通訊過程
客戶端生成一個從CSocket 類派生的CRequestSock 類, 該類的主要作用是向服務器端發(fā)出建立套接字連接的請求, 向服務器端發(fā)送智能卡的響應數(shù)據(jù)以及接收服務器端給智能卡的指令。服務器端生成一個從CSocket 類派生的CL isten ingSock 類, 該類的主要作用是偵聽信道, 為每一個客戶端套接字的連接請求建立一個相應的接收套接字, 并將它放入一個接收套接字隊列中。接著服務器端生成一個CSocket 類派生的接收套接字類(CClien tSock) , 該類的主要作用是接收從客戶端送來的智能卡響應信息。
Clien t 與Server 數(shù)據(jù)通信通道建立后, 客戶端和服務器發(fā)送信息代碼時采用各自的函數(shù):SendM sg (CRequestSocket3 pRequestSocket, un signed char3 pM sg. in t pM sgL en)客戶端和服務器接收信息代碼時采用各自的函數(shù): FetchM sg (CRequestSocket3 pRequestSocket)這樣, 服務器通過網(wǎng)絡和客戶機對智能卡的操作指令及應答信息只需將實際代碼加進上面的函數(shù)即可。
3 安全報文傳送
安全報文傳送的目的是保證數(shù)據(jù)的可靠性、完整性和對發(fā)送方的認證。數(shù)據(jù)完整性和對發(fā)送方的認證通過使用MAC 來實現(xiàn)。數(shù)據(jù)的可靠性通過對數(shù)據(jù)域的加密來得到保證。
(1) 安全報文傳送格式: 安全報文傳送格式符合ISO 7816—4 的規(guī)定。當CLA 字節(jié)的第二個半字節(jié)等于十六進制數(shù)字‘C’時, 表明對發(fā)送方命令數(shù)據(jù)采用安全報文傳送??ㄖ形募谖募^的ACs 中設定了該文件的各種操作分別是否用安全SM 1 而在文件頭的SM 字節(jié)中則設定了安全報文是采用認證模式(A u then t icMode) 還是采用組合(Com b inedMode)。
(2) 報文完整性和驗證:MAC 是使用命令的所有元素(包括命令頭) 來產(chǎn)生的。一條命令的完整性, 包括命令數(shù)據(jù)域(如果存在的話) 中的數(shù)據(jù)元, 通過安全報文傳送得以保證。MAC是命令數(shù)據(jù)域中最后一個數(shù)據(jù)元。MAC 的長度規(guī)定為4 個字節(jié)。
(3) SSC 在安全報文中作用: SSC (Send Sequence Coun ter) 是指傳送序列計數(shù)器, 在用安全報文保護功能以前, 需執(zhí)行EXCHAN GE CHALL EN GE 指令獲得同時作用于終端和智能卡的SSC。它主要起以下幾方面的安全作用:
①密文多樣性: 同樣的數(shù)據(jù)塊加密時有不同的表現(xiàn)形式;
②丟失和插入的檢測: 因每次生成安全報文的雙方SSC 都加1, 所以若有數(shù)據(jù)塊丟失或插入能隨時檢測出來。檢測到數(shù)據(jù)塊丟失或插入的錯誤后, 需運行EXCHAN GE CHALL EN GE指令重新同步雙方的SSC;防止“重放攻擊”: SSC 的功能使得同樣的數(shù)據(jù)每次傳送時有不同的MAC。所以有“重放攻擊”時能夠馬上發(fā)現(xiàn)。
在網(wǎng)絡應用中, 服務器作為遠程終端操作智能IC 卡, 指令和應答都要通過網(wǎng)絡來傳送, 客戶端對指令和應答只起傳遞作用。為保證SSC 的不可見, 可約定客戶機對服務器發(fā)來的EXCHAN GE CHALL EN GE 進行一定的處理, 先讓智能卡執(zhí)行無安全報文的EXCHAN GECHALL EN GE 指令, 再發(fā)com b ined mode 形式的EXCHAN GE CHALL EN GE 安全報文指令, 將智能卡返回的應答直接傳送給服務器, 這樣就保證了SSC 對網(wǎng)絡的保密性。
4 智能卡中文件操作的安全報文特性設定
(1) 意義: 對智能卡的身份識別信息文件設定安全報文特性??梢员WC身份識別號的完整性和可靠性; 在網(wǎng)上遠程識別時, 保證智能卡身份識別號對終端的隱蔽性。
(2) 身份識別信息文件的設定: 在發(fā)卡程序中, 執(zhí)行CREA TE EF 指令生成DF Secu rity子目錄下身份識別信息文件EF02 時,AC READ 的b it6 設為1, 即設定讀操作指令用安全報文SM。將SM b ite 的b it2, b it1 設為11, 設定安全報文采用組合模式(com b ined mode) 在組合模式的安全報文中, 首先要將應用數(shù)據(jù)加密成密文。然后, 由這些應用數(shù)據(jù)密文和文件頭計算出MAC。智能卡安全報文的另外一種模式是認證模式(au then t ic mode)。在認證模式的安全報文中, 要傳送的應用數(shù)據(jù)不加密, 僅僅檢測報文的認證碼。設定身份識別號在EF02 的第三條記錄中(RECORD= 03)。
(3) 設定SM 后文件操作方式的改變: 操作帶安全報文的文件需遵循下面兩條原則:
①已設定的SM 模式必須滿足最小要求: SM 模式要求按由小到大的排序是無SM 認證模式、組合模式。按照這條原則, 設定為au then t ic mode 的文件操作指令可以用com b inedmode 傳送。但不能用無SM 的模式發(fā)送, 而設定為com b ined mode 的文件操作指令只能用com b ined mode 傳送。
②每一個響應都是用與之相對應的指令相同的安全報文模式: 若文件操作指令的安全報文設定為au then t ic mode, 則該指令對應的安全報文也為au then t ic mode, 而SM 為com b inedmode 的指令, 其對應的SM 也為com b inedmode。但需注意的是, 此處把CA SE 2 (指令中無數(shù)據(jù)) 或CA SE 3 (響應中無數(shù)據(jù)) 的指令或響應的com b ined mode 看作等于au then t ic mode。在對EF02 實現(xiàn)com b inedmode 的安全報文設定后, 傳送READ RECORD 指令時必須用com b ined mode, 因指令中無傳送數(shù)據(jù), 所以指令的com b ined mode 也就等于au then t ic mode。而響應是按照com b ined mode 產(chǎn)生和從用戶IC 卡傳送出來, 不但帶了MAC 認證碼, 而且讀出的身份認證信息也是密文。服務器(網(wǎng)上認證) 可由MAC 認證碼判斷響應信息的完整性, 身份認證信息的密文傳送保證了身份認證信息的可靠性和對終端和網(wǎng)絡的隱蔽性, 服務器須解密密文獲得身份認證信息。
5 智能卡安全報文密鑰的設定
在發(fā)卡程序中, 執(zhí)行WR ITE KEY IN STALL 指令生成DF Secu rity. ISF 中的KEY1 作為SM KEY。KEY1 的A KD 的b it5= 1 (將KEY1 定義為defau lt) , b it4, b it3= 11 (SM 設定為com b ined mode) , b it2, b it1, b it0= 111。在PSAM 卡中發(fā)送KEY2 作為計算和驗證MAC 的加密、解密密鑰。
值得注意的是, 設定為com b ined mode 的SM KEY, 可用于沒有設定安全報文指令的au then t ic mode 安全報文形式和com b ined mode 安全報文形式。
6 網(wǎng)上安全報文工作流程
圖3 安全報文工作示意圖
安全報文工作示意圖如圖3 所示。為最大限度地保證安全性, 安全順序計數(shù)SSM 的值也用安全報文的形式生成并從網(wǎng)上傳送。服務器端計算指令的MAC 和驗證應答的MAC 工作都由PSAM 卡完成。
7 CA SE4 指令及應答安全報文的實現(xiàn)方法
(1) EXCHAN GE CHALL EN GE 指令的Com b ined mode 模式SM 形式CLA IN S P1 P2 L c TPV L P I‖CG YL e L L e TCS L Check sum8c 80 03 00 14 87 09 01‖eKSM (RND IFD 97 01 04 8e 04 xx xx xx xx 00
(2) 計算Check sum 過程:
①將指令的頭4 個字節(jié)墊以’80’, ’00’, ’00’, ’00’生成塊1; CLA IN S P1 P2 PADD IN GS ‘8C’‘80’ ‘03’ ‘00’ ‘00’ ‘00’
②將(TPV ,L , P I) 和CG 域的頭5 個字節(jié)組成塊2;
③將CG 域剩余的3 個字節(jié)和TL c,L ,L e 再墊以80, 00 組成塊3;
④將前面執(zhí)行的無安全報文形式的EXCHAN GE CHALL EN GE 指令的應答中(RND ICC)的頭二個字節(jié)作為SSC 的初始值, 并將SSC 加1, 將SSC 分別與CLA , IN S 異或, 生成新的塊1:
⑤對數(shù)據(jù)塊用SM 密鑰做DES 運算, 數(shù)據(jù)塊的鏈接用CBC 模式, 設初始值為8 個字節(jié)的‘00’, 按圖4 所示方法計算前面形成的數(shù)據(jù)塊對的MAC;
⑥將計算得出的MAC 的頭4 字節(jié)作為指令的校驗碼CC。
(3) 檢測應答校驗碼的過程
用戶卡首先產(chǎn)生響應1: ’61’, ’11’。在執(zhí)行完帶L e= ’11’的GET RESPON SE 指令后,用戶卡將產(chǎn)生如下所示的響應2:TCG LCG P I‖CG TCC LCC Check sum SW 1 SW 2‘87’ ‘09’‘01’‖eKSM (RND ICC) ‘8E’ ‘04 ‘xxxxxxxx’ ‘90’ ‘00’
由響應中信息計算MAC 與響應中的Check sum 比較以檢測響應報文校驗碼的操作過程如下:
①將TCG,L CG, P I 和CG 的頭5 個字節(jié)組成塊1將CG 域的后3 個字節(jié)并墊以‘80’,‘00’,‘00’,‘00’,‘00’組成塊2
②將SSC 加1
③將塊1 的頭2 字節(jié)分別與SSC 異或產(chǎn)生新的塊1
④對數(shù)據(jù)塊用SM 密鑰做DES 運算, 數(shù)據(jù)塊的鏈接用CBC 模式, 設初始值In it ialvecto r 為8 個字節(jié)的‘00’, 按類似圖4 所示方法計算前面形成的數(shù)據(jù)塊隊的MAC。
⑤將計算得出的MAC 的頭4 個字節(jié)與應答中的Check sum 比較, 由此判斷應答數(shù)據(jù)的完整性和正確性。對EXCHAN GECHALL EN GE 指令的應答不能作本步驗證, 因IC 卡的SSC 已換成新的。但對于其它指令都需用此方法驗證應答信息的可靠性。
圖4 計算指令MAC 的過程
圖5 響應中應用數(shù)據(jù)密文計算明文的過程
(4) 由密文獲取明文的方法:對密文數(shù)據(jù)塊用SM 密鑰做DES- 1 解密運算, 數(shù)據(jù)塊的鏈接用CBC 模式, 設初始值In it ial vecto r 為8 個字節(jié)的‘00’, 按圖5 所示方法計算出密文數(shù)據(jù)的明文。此數(shù)據(jù)的頭二字節(jié)即為新的SSC。
8 指令流程
(1) 交換隨機數(shù):
comm and: 80 80 03 00 04 01 02 03 04104respon se: 78 b1 f3 82 90 00得到SSC 的商始值: 78 61
(2) 計算exchange challenge 指令中的數(shù)據(jù)域密文comm and: 80 f8 00 87 08 01 02 03 04 80 00 00 00respon se: ac a6 00 16 02 d2 5a 72 d5 aa f6 34 5b 30 a6 e2 90 00得到數(shù)據(jù)域密文為: ac a6 00 16 02 d2 5a 72
(3) 計算com b ined mode 的exchange challenge 指令的MAC:comm and: 80 f8 00 87 18 f4 32 03 00 80 00 00 00 87 09 01 ac a6 00 16 02 d2 5a 72 97 0104 80 00respon se: c1 37 c2 16 5c fe af 38 31 7a 1a df 76 f0 79 26 22 35 2d 1e 37 5f 93 92 b8 9e b92b d9 35 b0 0e 90 00得到MAC: 22 35 2d 1e說明: 應答域設為97 01 08 則出錯, 但沒有應答域可以。
(4) 發(fā)com b ined mode 的exchange challenge 指令comm and: 8c 80 03 00 14 87 09 01 ac a6 00 16 02 d2 5a 72 97 01 04 8e 44 22 35 2d 1e 00 respon se: 87 09 01 99 f8 10 96 c3 e6 bc e0 8e 04 63 92 f5 ed 90 00 從密文數(shù)據(jù)99 f8 10 96 c3 e6 bc e0 解密出明文為: b3 a7 c5 5a, 得到SSC 的初始值為b3a7服務器將此SSC 加2 (因IC 卡生成應答安全報文時已將SSC 加1) , 便可生成發(fā)給IC 卡的指令安全報文形式。