銀行卡領(lǐng)域SM系列算法應(yīng)用技術(shù)分析
行業(yè)現(xiàn)狀:無(wú)論是傳統(tǒng)的磁條卡、金融IC卡,還是移動(dòng)支付技術(shù)、密碼技術(shù)在銀行卡領(lǐng)域中都起著關(guān)鍵與支撐的作用。銀行卡交易的敏感數(shù)據(jù)私密性應(yīng)該保護(hù),數(shù)據(jù)的完整性應(yīng)當(dāng)受到保護(hù),交易的實(shí)體雙方應(yīng)該得到認(rèn)證。在銀行卡領(lǐng)域?qū)崿F(xiàn)以上功能常用的密碼算法主要有三類,即對(duì)稱算法、非對(duì)稱算法和哈希算法。2013年,中國(guó)人民銀行發(fā)布《中國(guó)金融集成電路(IC)卡規(guī)范》(JR/T0025-2013,簡(jiǎn)稱PBOC3.0),首次支持SM算法;2014年,中國(guó)銀聯(lián)修訂發(fā)布《中國(guó)銀聯(lián)金融IC卡技術(shù)規(guī)范》(Q/CUP0047-2014,簡(jiǎn)稱UICS)支持SM算法。自此,金融IC卡開(kāi)始試點(diǎn)應(yīng)用SM算法并逐步規(guī)模化應(yīng)用。2014年以來(lái),中國(guó)銀聯(lián)先后修訂發(fā)布了交換系統(tǒng)、受理終端規(guī)范支持SM算法,并成功實(shí)施改造推廣。
金融IC卡交易的SM算法應(yīng)用
在金融IC卡領(lǐng)域,以金融IC卡標(biāo)準(zhǔn)借貸記應(yīng)用流程為例,密碼算法在金融IC卡應(yīng)用主要在脫機(jī)數(shù)據(jù)認(rèn)證、應(yīng)用密文生成、發(fā)卡行/卡片認(rèn)證、發(fā)卡行腳本處理等環(huán)節(jié)中體現(xiàn),如圖1所示。

圖1金融IC卡標(biāo)準(zhǔn)借貸記典型應(yīng)用流程中的密碼算法應(yīng)用
1.脫機(jī)數(shù)據(jù)認(rèn)證環(huán)節(jié)
脫機(jī)數(shù)據(jù)認(rèn)證是金融IC卡交易中終端對(duì)于卡片真實(shí)性的驗(yàn)證,該環(huán)節(jié)基于公鑰密碼技術(shù)(非對(duì)稱算法)的簽名驗(yàn)證機(jī)制。根據(jù)PBOC3.0規(guī)范第7和17部分定義,脫機(jī)數(shù)據(jù)認(rèn)證環(huán)節(jié)使用非對(duì)稱算法RSA或SM2算法進(jìn)行數(shù)據(jù)的簽名和驗(yàn)簽,其中也用到了哈希算法SHA-1或SM3算法來(lái)進(jìn)行哈希計(jì)算。
(1)SM2算法下的證書格式與驗(yàn)簽流程差異。SM2算法與SM3算法的應(yīng)用在交易流程上與RSA算法和SHA-1算法并無(wú)差別,但由于SM2算法橢圓曲線算法的特性,其簽名結(jié)果需要附帶完整的被簽名數(shù)據(jù)一起傳遞。同時(shí)SM2算法本身包含了哈希算法步驟,無(wú)需重復(fù)進(jìn)行哈希計(jì)算。因此,脫機(jī)數(shù)據(jù)認(rèn)證環(huán)節(jié)采用SM2算法后,相關(guān)數(shù)字證書、數(shù)據(jù)格式的變化如下。
SM2證書去掉發(fā)卡行公鑰余項(xiàng)、發(fā)卡行公鑰指數(shù)長(zhǎng)度、發(fā)卡行公鑰指數(shù)、填充字節(jié)等RSA算法特有字段。去掉哈希校驗(yàn)過(guò)程,同時(shí)去掉哈希值及哈希算法標(biāo)識(shí)字段:哈希計(jì)算SM3是SM2機(jī)制的一個(gè)步驟,因此沒(méi)有必要再進(jìn)行單獨(dú)驗(yàn)證。設(shè)置“公鑰參數(shù)標(biāo)識(shí)”:考慮算法參數(shù)擴(kuò)展需求,新增SM2算法“公鑰參數(shù)標(biāo)識(shí)”。被簽名數(shù)據(jù)明文傳遞,不需要恢復(fù):驗(yàn)證簽名流程基本不變,但去掉了公鑰索引判斷。相關(guān)流程定義參見(jiàn)PBOC3.0第17部分第5章;具體的算法選擇過(guò)程參見(jiàn)本文后續(xù)分析。
(2)終端支持SM2算法。雙算法終端為適應(yīng)SM算法的交易處理和根CA公鑰加載,需要進(jìn)行相應(yīng)的改造。對(duì)于金融IC卡交易流程處理主要參考見(jiàn)PBOC3.0第17部分;對(duì)于根CA公鑰加載應(yīng)用SM2算法的支持,銀聯(lián)的方案定義于《銷售點(diǎn)終端(POS)應(yīng)用規(guī)范》(QCUP009.1-2015)。
(3)其他相關(guān)內(nèi)容。根CA公鑰認(rèn)證技術(shù)要求、應(yīng)用SM算法的IC卡數(shù)據(jù)分組要求、個(gè)人化數(shù)據(jù)模板要求參見(jiàn)UICS產(chǎn)品規(guī)范第11部分第7-9章。
2.應(yīng)用密文與發(fā)卡行安全報(bào)文環(huán)節(jié)
標(biāo)準(zhǔn)借貸記應(yīng)用流程中的對(duì)稱算法使用主要有以下環(huán)節(jié)。
(1)應(yīng)用密文生成與發(fā)卡行/卡片認(rèn)證。AC(應(yīng)用密文)用于在卡片和發(fā)卡行交易授權(quán)系統(tǒng)間對(duì)交易報(bào)文進(jìn)行鑒別,是用過(guò)程密鑰進(jìn)行報(bào)文鑒別碼MAC計(jì)算生成。應(yīng)用密文類型包括ARQC、AAC、TC、ARPC等?;赟M4算法的密文計(jì)算結(jié)果和3DES一樣同為8字節(jié),具體計(jì)算過(guò)程參見(jiàn)PBOC3.0第17部分第6章。
(2)發(fā)卡行安全報(bào)文保護(hù)。發(fā)卡行安全報(bào)文用于發(fā)卡后的特定交易過(guò)程中卡片和交易授權(quán)系統(tǒng)間的報(bào)文傳輸安全,包括了安全報(bào)文加密和完整性計(jì)算兩類,使用對(duì)稱算法。基于SM4算法的具體計(jì)算過(guò)程參見(jiàn)PBOC3.0第17部分第7-8章。
(3)子密鑰分散及過(guò)程密鑰生成。在上述過(guò)程中,應(yīng)對(duì)報(bào)文加密和完整性保護(hù)使用不同的密鑰,包括應(yīng)用密文密鑰、發(fā)卡行安全報(bào)文加密密鑰和MAC密鑰三類。每類密鑰分發(fā)卡行主密鑰IMK、卡片主密鑰MK、卡片過(guò)程密鑰SK三級(jí),密鑰分散或生成關(guān)系,如圖2所示?;赟M4算法的計(jì)算方法參見(jiàn)PBOC3.0第17部分第8.1.3至8.1.4節(jié)。

圖2金融IC卡對(duì)稱密鑰體系
3.算法選擇
SM算法應(yīng)用過(guò)渡期間,需要SM算法卡可以在存量終端上使用。SM算法終端要兼容受理非SM算法卡片,因此SM算法卡和新增的SM算法終端都需要支持兩套算法。根據(jù)PBOC3.0規(guī)范第17部分定義,雙算法卡在卡片個(gè)人化數(shù)據(jù)包括了RSA算法所需的所有數(shù)據(jù)元,同時(shí)包括了SM2算法所需的所有數(shù)據(jù)元。而PBOC3.0定義的單SM算法卡在實(shí)際應(yīng)用不存在。對(duì)于脫機(jī)數(shù)據(jù)認(rèn)證算法,卡片在接收終端應(yīng)用選擇命令后,返回的PDOL數(shù)據(jù)列表中必須包括SM算法支持指示器(DF69);終端根據(jù)如支持SM算法,設(shè)置國(guó)密算法支持指示器標(biāo)簽為“1”發(fā)送GPO指令至卡片,不支持SM算法的存量終端默認(rèn)會(huì)填“0”。雙算法卡片根據(jù)GPO的指令參數(shù),確定卡片的算法環(huán)境和數(shù)據(jù)返回給終端。終端根據(jù)卡片返回的AIP和AFL進(jìn)行應(yīng)用數(shù)據(jù)讀取、脫機(jī)認(rèn)證等其他處理流程。
對(duì)于聯(lián)機(jī)數(shù)據(jù)算法,聯(lián)機(jī)報(bào)文的55域9F10第8字節(jié)指定了應(yīng)用密文、聯(lián)機(jī)認(rèn)證和發(fā)卡行腳本保護(hù)所用對(duì)稱密碼算法標(biāo)識(shí)。
在PBOC3.0規(guī)范中,SM算法支持指示器(DF69)的值確定了脫機(jī)數(shù)據(jù)認(rèn)證使用的密碼算法類型和聯(lián)機(jī)數(shù)據(jù)的對(duì)稱密碼算法類型。實(shí)際上,后者只涉及卡片和發(fā)卡行之間的數(shù)據(jù)交互,不受中間環(huán)節(jié)算法支持的影響。因此UICS規(guī)范規(guī)定了雙算法卡的應(yīng)用密文、發(fā)卡行腳本加密和完整性保護(hù)僅使用SM4算法。
銀行卡交易報(bào)文敏感數(shù)據(jù)及完整性保護(hù)
為保證數(shù)據(jù)的安全傳輸,系統(tǒng)用對(duì)稱密碼算法對(duì)網(wǎng)絡(luò)中的報(bào)文進(jìn)行了MAC計(jì)算,并對(duì)PIN等敏感數(shù)據(jù)進(jìn)行加密。典型的銀行卡交易報(bào)文處理過(guò)程如圖3所示。

圖3銀行卡交易報(bào)文處理加解密示意圖
網(wǎng)絡(luò)中POS機(jī)(密碼鍵盤)、收單系統(tǒng)、銀聯(lián)轉(zhuǎn)接系統(tǒng)(CUPS)以及發(fā)卡行系統(tǒng)之間組成了一個(gè)點(diǎn)對(duì)點(diǎn)的數(shù)據(jù)加解密網(wǎng)絡(luò)。CUPS與各聯(lián)網(wǎng)入網(wǎng)機(jī)構(gòu)分別約定數(shù)據(jù)密鑰。其中,與銀聯(lián)轉(zhuǎn)接系統(tǒng)相連系統(tǒng)間的報(bào)文格式由《中國(guó)銀聯(lián)銀行卡交換系統(tǒng)技術(shù)規(guī)范》(Q/CUP006)規(guī)定,2015年版開(kāi)始支持SM4算法;銀聯(lián)終端機(jī)具到受理方的數(shù)據(jù)處理支持SM4算法對(duì)方案尚未公開(kāi)發(fā)布,各家受理機(jī)構(gòu)實(shí)現(xiàn)的方案也可能有所差異。
1.交換系統(tǒng)
交換系統(tǒng)的報(bào)文加密主要涉及PIN加解密、報(bào)文MAC計(jì)算。SM4算法的分組長(zhǎng)度發(fā)生變化導(dǎo)致存量報(bào)文域長(zhǎng)度不夠;此外,兼容兩種算法,需要增加算法標(biāo)識(shí)。Q/CUP006規(guī)范定義了相關(guān)用法。
(1)數(shù)據(jù)域定義。針對(duì)SM4算法分組長(zhǎng)度變長(zhǎng)的問(wèn)題,經(jīng)過(guò)對(duì)現(xiàn)有報(bào)文域應(yīng)用情況的梳理和分析,一是最終選定了更長(zhǎng)的63域存放國(guó)產(chǎn)密碼PIN密文,并重新設(shè)計(jì)了PINBlock格式,原來(lái)存放PIN的52域?qū)⒂?填充;二是仍然使用第128域存放MAC,以保持報(bào)文域長(zhǎng)度不變,與ISO8583規(guī)范要求及國(guó)際卡組織處理模式保持一致,有利于SM4算法的國(guó)際推廣。
(2)雙算法兼容。針對(duì)兩種算法兼容問(wèn)題,為了區(qū)分報(bào)文采用的算法,我們對(duì)比了報(bào)文頭設(shè)置算法標(biāo)識(shí)與報(bào)文域設(shè)置標(biāo)識(shí)的方案。認(rèn)為報(bào)文域設(shè)置標(biāo)識(shí)不改變報(bào)文結(jié)構(gòu),系統(tǒng)改動(dòng)量小,各節(jié)點(diǎn)可按照當(dāng)前的方式進(jìn)行報(bào)文解包處理。方案最終在F53域設(shè)置PIN加密算法標(biāo)識(shí),在F60.3.3設(shè)置MAC算法標(biāo)識(shí)。PIN加密算法標(biāo)識(shí)和MAC算法標(biāo)識(shí)單獨(dú)設(shè)立,支持兩者算法類型不一致的情況,具有較高的靈活性。在實(shí)際應(yīng)用中,銀聯(lián)交換系統(tǒng)還需要根據(jù)發(fā)卡行的實(shí)際算法需求,通過(guò)配置參數(shù)的方法,區(qū)分給不同發(fā)卡行的報(bào)文密碼算法。
2.受理終端
受理終端與受理行之間的報(bào)文加密主要涉及PIN加解密、報(bào)文MAC計(jì)算和磁道信息加密,還包括雙算法兼容、終端密鑰管理等內(nèi)容。和交換系統(tǒng)類似,終端報(bào)文應(yīng)用SM4算法同樣需要考慮SM4算法的分組長(zhǎng)度變化帶來(lái)的問(wèn)題。由于這部分規(guī)范尚未公開(kāi)發(fā)布,暫不詳細(xì)介紹。