金融智能卡操作系統(tǒng)安全體系研究
智能卡又稱為IC 卡( Integrated circuit Card) , 即集成電路卡。根據(jù)卡中使用的集成電路的不同可以分為存儲器卡、邏輯加密卡和CPU卡。由于CPU卡中集成了中央處理器CPU、存儲器和芯片操作系統(tǒng)( Chip Operating System, COS) , 構(gòu)成一個完整的計算機系統(tǒng), 具有獨立的數(shù)據(jù)處理能力, 因此安全性大大增強, 從而得到了廣泛的應(yīng)用, 成為IC 卡中的主流產(chǎn)品。本文主要針對CPU 卡進行討論。COS 建立在CPU、存儲器等硬件之上, 是管理芯片資源和實現(xiàn)安全保密的操作系統(tǒng)。它的主要功能是: 控制智能卡和外界的信息交換, 管理智能卡內(nèi)的存儲器, 并在卡內(nèi)部完成各種命令的處理。
1 安全體系
根據(jù)接觸式集成電路( IC) 卡國際標(biāo)準(zhǔn)ISO7816-4, 智能卡安全體系包括三部分: 安全狀態(tài)( Security Status) 、安全屬性( Security Attributes) 以及安全機制( Security Mechanisms) 。安全狀態(tài)是指智能卡當(dāng)前所處的安全級別, 即當(dāng)前安全狀態(tài)寄存器的值。安全屬性又稱為訪問權(quán)限, 即在進行某種操作時要求安全狀態(tài)寄存器的值是什么。安全機制從廣義上說是卡片支持的各種安全模式, 從狹義上說是安全狀態(tài)實現(xiàn)轉(zhuǎn)移所采用的方法和手段。一種安全狀態(tài)通過上述安全機制轉(zhuǎn)移到另一種狀態(tài), 把該安全狀態(tài)與某個安全屬性相比較, 如果一致, 則表明能夠執(zhí)行該屬性對應(yīng)的命令; 如果不一致, 則相關(guān)命令不能被執(zhí)行, 從而達到了安全控制的目的。這就是智能卡安全體系的基本工作原理, 如圖1 所示。
安全機制是安全體系的關(guān)鍵, 廣義的安全機制主要涉及到文件操作、認(rèn)證系統(tǒng)、加/ 解密三大功能模塊。
2 文件操作
2. 1 基本文件結(jié)構(gòu)
文件系統(tǒng)是COS 的基礎(chǔ)模塊, 它負(fù)責(zé)組織、管理、維護IC卡內(nèi)存儲的所有數(shù)據(jù)。根據(jù)ISO7816-4, COS 支持的文件類型為: 主文件( Master File, MF) 、目錄文件( Dedicated File, DF) 和基本文件( Elementary File, EF) 。主文件MF為文件系統(tǒng)的根,下面可以有多個目錄文件DF 和基本文件EF。目錄文件DF分為DDF 和ADF 兩種。DDF可以含有下級目錄ADF, 而ADF不能含有下級目錄文件。
主文件MF 在IC 卡中唯一且必須存在。DDF 是指包含多個應(yīng)用的DF, 一個ADF則代表一個應(yīng)用, 任何一個DF 在物理上和邏輯上都保持獨立?;疚募﨓F 用于存放密鑰或用戶數(shù)據(jù), 分為密鑰文件和工作基本文件。
2. 2 文件的訪問控制
文件的訪問控制可采取鑒別寄存器方式和狀態(tài)機方式, 這里以鑒別寄存器方式為例。用兩個四位寄存器來表示安全狀態(tài): 一個寄存器稱為MF 的安全狀態(tài)寄存器, 另一個寄存器為當(dāng)前DF的安全狀態(tài)寄存器。每個寄存器的初始值是0, 取值安全狀態(tài)員安全狀態(tài)圓執(zhí)行命令符合命令要求的安全屬性鑰命令拒絕安全機制再暈圖員智能卡安全體系范圍是0 ~F 之間的某一個值。文件有兩種不同的訪問控制權(quán)限AC0, AC1。AC0 是使用權(quán)限, AC1 是修改權(quán)限, 分別用一個字節(jié)表示。當(dāng)前安全狀態(tài)寄存器的值大于AC 字節(jié)的低半字節(jié)小于其高半字節(jié)時, 該文件的相應(yīng)讀、寫權(quán)限在該安全狀態(tài)下被滿足, 則能進行相關(guān)操作。COS在建立文件時指定其AC0和AC1 的值來對文件的訪問權(quán)限進行設(shè)定, 通過口令校驗和外部認(rèn)證兩條命令可以改變安全狀態(tài)寄存器的值, 從而利用安全機制實現(xiàn)對文件的訪問控制。
3 認(rèn)證系統(tǒng)
3. 1 用戶鑒別
用戶鑒別( Verify) , 也稱為口令校驗, 是指智能卡對其持有者合法性的驗證, 以減少被非法用戶冒用的可能。具體實現(xiàn)上, 由用戶向智能卡出示只有他本人才知道的通行字PIN, 并由智能卡對該Password 的正確性進行判斷。如果正確, 則驗證通過, 改變智能卡當(dāng)前的安全狀態(tài)為PIN后續(xù)狀態(tài)從而用戶獲得相應(yīng)使用權(quán)限; 如果不正確, 則錯誤計數(shù)器的值減1, 若錯誤嘗試次數(shù)達到錯誤計數(shù)器的上限, 則卡會自動鎖定。
3. 2 內(nèi)部認(rèn)證和外部認(rèn)證
內(nèi)部認(rèn)證( Internal Authentication) , 是指讀寫設(shè)備對智能卡的合法性進行的驗證; 外部認(rèn)證( External Authentication) , 是指智能卡對讀寫設(shè)備的合法性進行的驗證。內(nèi)、外部認(rèn)證的原理是合法的讀寫設(shè)備和智能卡應(yīng)該共有相應(yīng)的內(nèi)、外部認(rèn)證密鑰, 偽造的讀寫設(shè)備或智能卡無法獲得相應(yīng)密鑰。具體實現(xiàn)上, 是通過讀寫設(shè)備和卡雙方同時用對稱加密算法對一個隨機數(shù)進行加密運算, 然后判斷雙方運算結(jié)果的一致性或者通過一方對隨機數(shù)加密另一方進行解密來達到認(rèn)證的目的。類似于口令校驗, 外部認(rèn)證通過后, 當(dāng)前安全狀態(tài)寄存器的值變成外部認(rèn)證密鑰的后續(xù)狀態(tài)。
3. 3 安全報文傳送
為保證卡與外界傳輸?shù)男畔⒌陌踩? 除了明文方式傳遞數(shù)據(jù)外, COS 提供安全報文傳送方式, 其目的在于保證數(shù)據(jù)的可靠性、完整性和對發(fā)送方的認(rèn)證。數(shù)據(jù)完整性和對發(fā)送方的認(rèn)證通過使用消息認(rèn)證碼MAC( Message Authentication Code)來實現(xiàn)。數(shù)據(jù)的可靠性通過對數(shù)據(jù)域的加密得到保證。
MAC 是消息內(nèi)容和秘密鑰的公開函數(shù), 其輸出是定長的短數(shù)據(jù)塊: MAC = C( M, K) 。其中M是消息內(nèi)容, K 是通信雙方共享的秘密鑰, C 是MAC 值的生成算法。算法C 要求已知M1 和C( M1 , K) , 無法構(gòu)造出滿足C( M2 , K) = C( M1 , K) 的報文M2 , 所以MAC 能唯一鑒別原報文。COS支持如下兩種安全報文傳送方式:
( 1) 線路認(rèn)證方式。終端對要發(fā)送給卡的整條命令計算MAC 值, 并附加在傳輸?shù)拿顢?shù)據(jù)的尾部, 即A→B: M‖ C( M, K) , 卡收到命令后用秘密鑰K 對接收到的M求MAC 值,并與C( M, K) 比較, 從而驗證MAC 值的正確性, 只有校驗正確的數(shù)據(jù)才予以接收; 卡如果有返回給終端的應(yīng)答數(shù)據(jù), 也同樣以線路認(rèn)證方式發(fā)送。如果M 被竄改, 收方據(jù)此計算出的MAC 值就與發(fā)方傳送過來正確值不同; 如果有冒充的非法發(fā)送端發(fā)送消息, 由于它得不到秘密鑰K, 所以也無法得到正確的MAC 值。因此這種方式能保證傳輸數(shù)據(jù)的完整性和發(fā)送方的真實性。
( 2) 線路加密認(rèn)證方式。終端對要發(fā)送給卡的命令數(shù)據(jù)域加密, 然后再對整條命令( 包括命令頭和加密后的命令數(shù)據(jù)域) 計算MAC 值, 并附加在被加密了的命令數(shù)據(jù)的尾部, 即A→B: E( M, K2 ) ‖C( E( M, K2 ) , K1 ) , 卡收到命令后首先用K1驗證MAC 值的正確性, 再用K2 對命令的DATA 域數(shù)據(jù)解密,恢復(fù)命令數(shù)據(jù)域的明文; 卡如果有返回給終端的應(yīng)答數(shù)據(jù), 也同樣以線路加密認(rèn)證方式發(fā)送。由于傳送的是加密后的密文,僅由收、發(fā)雙方共享K2 , 所以線路加密認(rèn)證方式除了提供線路認(rèn)證方式的優(yōu)點外, 還能保證數(shù)據(jù)的可靠性。
4 加 / 解密
4. 1 密鑰管理
COS 的密鑰管理涉及密鑰的生成、分配、存儲和使用。根據(jù)密鑰分級原則, 把智能卡中涉及的密鑰劃分為三級: 主密鑰、二級密鑰、初級密鑰。高級密鑰生成低級密鑰。低級密鑰由高級密鑰管理控制, 可以減少直接保密的密鑰數(shù)量, 簡化密鑰管理, 保證密鑰安全。主密鑰由應(yīng)用管理機構(gòu)產(chǎn)生和維護, 二級密鑰由主密鑰通過某種算法分散到每張IC 卡中, 過程密鑰由每次交易具體涉及的數(shù)據(jù)產(chǎn)生。
根據(jù)全程安全原則, 安全管理貫穿密鑰的生成、分配、存儲和使用的過程。
主密鑰是在安全保密的情況下由管理機構(gòu)產(chǎn)生的真隨機序列。根據(jù)責(zé)任分離原則, 一個密鑰專職一種功能, 所以根據(jù)COS 應(yīng)用中涉及的業(yè)務(wù)種類, 應(yīng)生成對應(yīng)個數(shù)的主密鑰。子密鑰, 即二級密鑰, 由對應(yīng)的主密鑰對每張用戶卡唯一的應(yīng)用序列號進行加密生成。過程密鑰, 即初級密鑰, 由二級密鑰對每次交易的某些具體數(shù)據(jù)進行加密生成。
主密鑰采用人工分配的方式, 以確保高安全性。子密鑰在管理機構(gòu)由主密鑰產(chǎn)生, 再下載到每張卡中。過程密鑰在卡中生成, 采用“一次一密”方式, 只在當(dāng)次交易有效, 保護該次交易的敏感數(shù)據(jù)。
主密鑰存儲在管理機構(gòu)中, 生存周期長, 安全性要求最高,存儲在高度安全的專用密碼裝置中。子密鑰存儲在MF或DF下的密鑰文件中, 在整個MF或DF的建立到刪除過程中有效。過程密鑰由于只對一次特定的交易有效, 所以生存周期短, 使用時動態(tài)產(chǎn)生, 存儲在卡的內(nèi)存中, 使用完畢即銷毀。子密鑰和過程密鑰在卡中以非可見的形式存放, 任何時候都不能出卡, 不能被顯式讀取。COS 設(shè)定了每個密鑰的安全條件, 只有滿足特定的安全狀態(tài), 才能使用或修改該密鑰。當(dāng)某些密鑰( 如個人PIN) 受到非法攻擊時, 還能夠自動鎖定, 以確保密鑰的抗攻擊性。
4. 2 密碼算法及應(yīng)用
4. 2. 1 對稱密碼算法
DES, 3DES, AES 是普遍使用的對稱密碼算法。COS 中涉及內(nèi)外部認(rèn)證、安全報文、生成過程密鑰等均用到了對稱密碼算法。圖2 說明安全報文傳送中MAC 基于DES 算法的生成過程。其中, D 表示被加密的數(shù)據(jù)被分成的八字節(jié)數(shù)據(jù)塊, ī表示異或, 最終得到的八個字節(jié)結(jié)果取左邊四個字節(jié)作為MAC 值。
4. 2. 2 非對稱密碼算法
利用公開密鑰密碼實現(xiàn)數(shù)字簽名方便安全, 如果COS 支持公開密鑰密碼, 由于其具有獨立的數(shù)據(jù)處理能力和良好的安全性, 則IC 卡可作為數(shù)字簽名的安全載體。用來簽名的私鑰保存在卡中, 并且任何情況下不能讀出。簽名的過程在卡中完成, 比在主機上用私鑰實現(xiàn)簽名更安全。目前可用于COS 的非對稱算法有RSA, ECC 等。出于對安全和速度的考慮, 一般不是對數(shù)據(jù)直接簽名, 而是對其哈希值進行簽名。
5 金融智能卡COS 的安全性
金融智能卡操作系統(tǒng)是建立在通用COS 基礎(chǔ)上集成了銀行應(yīng)用的COS, 其中電子存折和電子錢包是兩種最主要的金融應(yīng)用, 能支持圈存、圈提、消費、取現(xiàn)和修改透支限額五種類型的交易, 可用來代替流通領(lǐng)域的現(xiàn)金、支票, 成為電子貨幣的方便載體在金額領(lǐng)域使用, 所以對其安全性的要求更高。金融COS作為通用COS 的具體應(yīng)用, 除了在交易流程上依賴于通用COS的安全體系, 還有金融交易其特有的安全措施。下面結(jié)合JETCOS 詳細(xì)說明金融COS 的交易流程和應(yīng)用安全。
5. 1 交易流程
圈存是將銀行賬戶上的資金劃轉(zhuǎn)到電子存折或錢包的交易; 圈提是將電子存折中的資金劃轉(zhuǎn)到銀行賬戶的交易; 消費是使用電子錢包或電子存折在銀行POS 機上消費的交易; 取現(xiàn)是使用電子存折在銀行終端上支取現(xiàn)金的交易; 修改透支限額是修改電子存折透支限額的交易。以下以JETCOS 的電子存折圈存交易為例說明安全交易的流程( 圖3) 。
( 1) 終端按照應(yīng)用協(xié)議數(shù)據(jù)單元( Application Protocol DataUnit, APDU) 的格式向IC 卡發(fā)圈存初始化命令啟動圈存交易:CLA INS P1 P2 Lc DATA Le80 50 00 01 0B 密鑰標(biāo)識符+ 交易金額+ 終端機編號10由CLA, INS, P1, P2 共同指定該條命令是電子存折的圈存初始化, Lc 指示DATA 的長度, Le 指示該命令完成后期望返回的數(shù)據(jù)長度。
( 2) IC 卡進行圈存初始化。首先將命令DATA 域中的交易金額加上存折的余額檢查是否超出存折存錢的上限, 如溢出則返回錯誤碼“6985”( 金額上溢) , 否則繼續(xù)執(zhí)行; 然后根據(jù)DATA 域中的密鑰標(biāo)識符查找卡中的圈存密鑰, 利用此密鑰對產(chǎn)生的偽隨機數(shù)、聯(lián)機交易序號和“8000”加密生成過程密鑰;再用過程密鑰對交易金額、終端機編號等信息生成MAC1, 并向主機發(fā)送MAC1 和生成MAC1 的各項, 以供主機驗證IC 卡的合法性。由于每次交易的偽隨機數(shù)和交易序號不同, 所以過程密鑰也不同。采用“一次一密”的方式, 確保了當(dāng)次交易敏感數(shù)據(jù)的安全性。圈存初始化命令成功執(zhí)行后返回的響應(yīng)報文域為:DATA SW1 SW2原余額+ 聯(lián)機交易序號+ 密鑰版本號+ 算法標(biāo)識+ 偽隨機數(shù)+ MAC1 90 00其中DATA 域是傳遞給主機的數(shù)據(jù), SW 是返回碼, “9000”表示該命令成功執(zhí)行。
( 3) 主機進行主機端的圈存處理。由于主機已經(jīng)裝載了圈存主密鑰, 所以主機可以根據(jù)卡的應(yīng)用序列號計算出該卡的圈存子密鑰, 再由IC 卡傳遞的DATA 生成過程密鑰和相應(yīng)的MAC 值與MAC1 比較, 如不相同則返回錯誤碼“9302”( MAC錯誤) , 否則繼續(xù)執(zhí)行, 從而保證了IC 卡傳遞數(shù)據(jù)的完整性和主機對IC 卡身份的認(rèn)證。確認(rèn)有效后主機從銀行賬戶中扣除圈存金額, 并產(chǎn)生報文鑒別碼MAC2, 用于IC 卡對主機進行合法性的認(rèn)證。
( 4) 終端向IC 卡發(fā)圈存主過程命令, 其中DATA 域數(shù)據(jù)由主機端交易生成:CLA INS P1 P2 Lc DATA Le
80 52 00 00 0B 交易日期+ 交易時間+ MAC2 04
( 5) IC 卡進行圈存主過程。利用當(dāng)次交易的過程密鑰和主機傳遞DATA 的相關(guān)項生成MAC 值, 從而驗證MAC2 是否有效。確認(rèn)有效后, 完成實質(zhì)性交易: 交易金額加在余額上, 更新聯(lián)機交易序號, 更新交易明細(xì)文件, 并用TAC 密鑰根據(jù)交易后的新余額、交易序號、交易時間等當(dāng)次交易相關(guān)信息生成當(dāng)次交易驗證碼TAC( Transaction Authentication Code) , 用于主機對IC 卡端圈存交易成功與否進行驗證。圈存命令成功執(zhí)行后返回的響應(yīng)報文域為:DATA SW1 SW2TAC 90 00
( 6) IC 卡將TAC 傳遞給終端, 可供主機以后驗證此次交易成功與否。
5. 2 應(yīng)用安全
( 1) 交易狀態(tài)機。一個完整的金融交易包括交易初始化和交易主過程, 初始化和主過程必須是同一種類型的交易??ㄆ臓顟B(tài)有: 空閑狀態(tài), 圈存狀態(tài), 圈提狀態(tài), 消費/ 取現(xiàn)狀態(tài)和修改狀態(tài)。僅當(dāng)交易初始化后進入相應(yīng)的交易狀態(tài), 同一類型的交易主過程才能進行。用內(nèi)存系統(tǒng)區(qū)PSW 這個字的低五位標(biāo)志五種狀態(tài)。例如卡片初始狀態(tài)是空閑態(tài), 執(zhí)行圈存初始化后, PSW 的b1 位被置為1, 即交易狀態(tài)為圈存態(tài)。執(zhí)行圈存主過程時, 先檢查該位是否為1, 如果是, 則執(zhí)行圈存主過程, 執(zhí)行成功后置PSW 回空閑態(tài); 如果不是, 則返回錯誤碼“6901”( 狀態(tài)無效) , 圈存主過程不被執(zhí)行。表1 說明交易狀態(tài)機的各種變化: 交易初始化可以在任何狀態(tài)下執(zhí)行, 執(zhí)行后交易狀態(tài)改變?yōu)槌跏蓟鄳?yīng)的狀態(tài); 交易主過程必須在相應(yīng)的交易狀態(tài)下才能執(zhí)行, 執(zhí)行后返回空閑態(tài); 如果交易主過程的類型和交易狀態(tài)不匹配, 則主過程不被執(zhí)行。取余額和取交易認(rèn)證可以在任何狀態(tài)下執(zhí)行, 并且不影響當(dāng)前交易狀態(tài)。
表1 交易狀態(tài)變化
( 2) PIN驗證。通用COS 的用戶鑒別是指COS 對用戶身份的認(rèn)證, 并能改變當(dāng)前安全狀態(tài), 但用戶鑒別并不是必須的,這里的PIN驗證是特定的金融交易類型要求的對用戶身份的驗證。除了電子錢包消費不用校驗PIN, 其他各種交易類型都必須提交個人密碼( PIN) , 這里也是通過判斷PSW 值來檢查是否已經(jīng)校驗PIN。PSW 的b9 位作為PINVer_OK 標(biāo)志位, 當(dāng)用戶從金融終端輸入合法的個人密碼, 通過口令校驗, 同時置該位為1。交易初始化時檢查該位是否為1, 如果是, 繼續(xù)執(zhí)行, 否則返回錯誤碼“6982”( 安全狀態(tài)不滿足) 。
( 3) CRC 校驗。交易初始化時從存折/ 錢包文件中讀取相關(guān)信息, 交易主過程時更新存折/ 錢包文件都需要讀寫FLASH存儲器, 再讀取前校驗CRC, 更新后重新計算CRC 并寫入FLASH 中相關(guān)文件的頭部, 以便下次校驗, 從而保證了讀寫物理過程的安全性和文件的完整性。
( 4) 備份寫。智能卡能夠在交易處理時, 包括拔卡或掉電的情況下, 保持?jǐn)?shù)據(jù)的完整性, 這需要保證每次交易的所有更新一次性完成。為此JETCOS 中在FLASH 中開辟FL_RESTOREBUF區(qū)作為寫入緩沖區(qū), 每次交易需要對FLASH 更新的數(shù)據(jù)不是直接更新, 而是先寫入FL_RESTOREBUF 區(qū), 并置標(biāo)志位FL_RESTORETAG 為0; 當(dāng)交易處理完, 調(diào)用RestoreData子過程, 檢查此時FL_ RESTORETAG 為0, 則從FL_ RESTOREBUF區(qū)依次更新到FLASH 的相應(yīng)地址, 如果都更新成功, 則重置標(biāo)志位FL_RESTORETAG 為1。更新FLASH 的過程中若遇到拔卡或掉電, COS 會在初始化時再次調(diào)用Restore-Data。如果第一次RestoreData 未進行成功, 則FL_RESTORETAG為0, 那么重新更新FLASH 的相應(yīng)地址; 如果第一次RestoreData成功進行, 則FL_RESTORETAG 為1, 那么不必再次恢復(fù)數(shù)據(jù)。這種機制保證了拔卡或掉電時更新數(shù)據(jù)的一致性。
6 結(jié)束語
COS 的安全性是基于軟件的安全, IC 卡系統(tǒng)的安全還需要對抗硬件攻擊、分析攻擊、應(yīng)用攻擊和系統(tǒng)攻擊等。智能卡,尤其是金融IC 卡, 目前在金融系統(tǒng)還未得到廣泛使用, 尚需要從硬件、穩(wěn)定性、使用環(huán)境各方面加強抗攻擊能力, COS 也必須相應(yīng)加強反調(diào)試跟蹤的能力。
( 文/武漢大學(xué)計算機學(xué)院, 楊帆, 張煥國)