本部分介紹用戶卡當前最主要的一個使用場景----卡片消費的具體交易過程。高速公路使用的ETC卡支持消費、複合應用消費兩種類型:
前者交易方式僅僅單獨操作卡片的電子錢包文件,交易結果影響的主要也是電子錢包的餘額,高速公路繳費已基本不再採取該類型的消費方式,正在拓展當中的商超交易場景可能採取該類型消費方式;
而後者交易方式除了操作電子錢包之外還會同時操作卡片中的複合消費專用文件,交易結束時,電子錢包的餘額、複合消費專用文件的改寫同步更新,要麼都成功要麼都失敗,確保數據的一致性與完整性,高速公路繳費基本採用該方式。
1. 消費交易
1.1.交易流程
1.2.流程說明
1.2.1.發出初始化消費命令
終端發出初始化消費(INITIALIZEFOR PURCHASE)命令啓動消費交易。
1.2.2.處理初始化消費命令
IC卡收到初始化消費(INITIALIZEFOR PURCHASE )命令後,將進行以下操作:
-
檢查是否支持命令中提供的密鑰索引號。如果不支持,則回送狀態字“9403”(不支持的密鑰索引),但不回送其他數據;
-
檢查電子存摺餘額或電子錢包餘額是否大於或等於交易金額。如果小於交易金額,則回送狀態字“9401”(資金不足),但不回送其他數據。終端應採取的相應措施不在本部分的範圍內。
在通過以上檢查之後,IC卡將產生一個僞隨機數並生成過程密鑰用於驗證MAC1。過程密鑰(SESPK)(SESPK=3DES(DPK, CRN || PSN || EDCTSN最右2bytes))是利用DPK並按照《高速公路ETC卡籤之我見9-常見算法》中“過程密鑰產生”所描述的機制產生的。用於產生該過程密鑰的輸入數據如下:
SESPK:僞隨機數(ICC)||電子存摺脫機交易序號或電子錢包脫機交易序號||終端交易序號的最右兩個字節
1.2.3.產生 MAC1
使用僞隨機數(ICC)和IC卡回送的電子存摺脫機交易序號或電子錢包脫機交易序號,終端的安全存取模塊(PSAM)將產生一個過程密鑰(SESPK)和一個報文鑑別碼(MAC1),供IC卡來驗證PSAM的合法性。
MAC1的計算機制見《高速公路ETC卡籤之我見9-常見算法》中的“MAC計算”。用SESPK對以下數據進行加密產生MAC1(按所列順序)(MAC1=MAC(SESPK, 00, TV || TT || EDCID || Date || Time)):
-
交易金額;
-
交易類型標識;
-
終端機編號;
-
交易日期(終端);
-
交易時間(終端)。
-
1.2.4.發出消費命令
終端發出消費(DEBIT FORPURCHASE)命令。
1.2.5.驗證 MAC1
在收到消費(DEBIT FORPURCHASE)命令後,IC卡將驗證MAC1的有效性。如果MAC1有效,交易處理將繼續執行。否則將向終端回送錯誤狀態字‘9302’(MAC無效)。終端對錯誤狀態的處理不在本部分範圍內。
1.2.6.交易處理
IC卡從電子存摺餘額或電子錢包餘額中扣減消費的金額,並將電子存摺或電子錢包脫機交易序號加1。IC卡必須成功地完成以上所有步驟或者一個也不完成。只有餘額和序號的更新均成功後,交易明細纔可更新。
IC卡產生一個報文鑑別碼(MAC2)供PSAM對其進行合法性檢查,並通過DEBIT FOR PURCHASE命令的響應報文回送終端。MAC2的計算機制見《高速公路ETC卡籤之我見9-常見算法》中的“MAC計算”。用SESPK對以下數據進行加密產生MAC2(MAC2,=MAC(SESPK, 00, TV)):
-
交易金額。
IC卡按照《高速公路ETC卡籤之我見9-常見算法》“MAC計算”中描述的機制用密鑰DTK左右8位字節異或運算後的結果產生TAC。TAC將被寫入終端交易明細,以便於主機進行交易驗證。TAC以明文形式通過消費(DEBIT FOR PURCHASE)命令的響應報文從IC卡傳送到終端,下面是用來生成TAC的數據:
-
交易金額;
-
交易類型標識;
-
終端機編號;
-
終端交易序號;
-
交易日期(終端);
-
交易時間(終端)。
TACKey=DTK_L xor DTK_R
TAC=MAC(TACKey, 00, TV ||TT || EDCID ||EDCTSN || Date || Time)
對於電子存摺消費交易和電子錢包消費交易,IC卡將用以下數據組成的一個記錄更新交易明細。
-
電子存摺脫機交易序號或電子錢包脫機交易序號;
-
交易金額;
-
交易類型標識;
-
終端機編號;
-
交易日期(終端);
-
交易時間(終端)。
1.2.7.驗證 MAC2
在收到IC卡(經過終端)傳來的MAC2後,PSAM要驗證MAC2的有效性。MAC2驗證的結果被傳送到終端以便採取必要的措施。
1.3.特別說明
-
上述交易過程以脫機交易(通過PSAM計算交易過程所需數據,如MA1等)爲例;從交易過程看,用戶卡其實是不關注也不知道交易過程所需的數據(如MAC1)是由什麼設備計算出來的,它只校驗數據(如MAC1)本身的有效性。所以,MAC1等數據的計算也可以其他設備計算,如加密機等,從而實現在線交易。
-
卡片交易過程產生的MAC2碼,在交易過程就需進行合法性校驗,合法性校驗通過的方可認爲交易已經完成並且合法;否則,認爲該筆交易存在異常,業務上一般不得通過。通過此種方式降低僞卡交易帶來的風險。
-
卡片交易過程產生的TAC碼,主要是髮卡機構用於校驗交易流水的合法性,通常在清分結算時驗證,卡片交易過程一般不驗證合法性。
2. 複合應用消費交易
2.1.交易流程
2.2.流程說明
從交易流程可看出,除了橙色背景的兩個步驟外,其他的步驟與要求同複合交易的基本是一致的;將各個步驟中交易類型改爲複合應用消費交易即可,數據的組裝規則也完全一致,此處不再具體介紹,該章節僅對新增的兩個步驟進行詳細描述。
2.2.1.發出 UPDATECAPP DATA CACHE命令
終端發出UPDATE CAPP DATACACHE命令。
2.2.2.處理 UPDATECAPP DATA CACHE命令
IC卡在收到UPDATE CAP P DATACACHE命令後,將進行以下操作:
-
如果命令中存在 SFI 域,檢查卡片當前應用下是否存在與命令中 SFI值相同的文件。如果不存在,回送狀態字“6A82”(未找到文件),但不回送其它數據。終端應終止此次複合應用消費交易;
-
根據命令中的複合應用類型標識符,查詢複合應用專用文件中是否存在相同標識符的記錄。如果不存在,則回送狀態字“6A83”(未找到記錄),但不回送其它數據。終端應終止此次複合應用消費交易;
-
檢查複合應用專用文件中相應記錄中的應用鎖定標誌字節。如果應用鎖定標誌爲設置,則回送狀態字“9407”(複合應用禁止),但不回送其它數據。終端應終止此次複合應用消費交易;
-
檢查命令中的數據域長度是否大於複合應用專用文件中相應記錄的長度。如果大於,則回送狀態字“6A84”(文件中存儲空間不夠),但不回送其它數據。終端應終止此次複合應用消費交易。
在通過以上檢查後,IC卡應暫存命令中的SFI、記錄號、複合應用類型標識符和數據域。複合應用專用文件中相應記錄中的數據不得通過此命令更新。
3. TAC驗證
TAC碼,即交易認證碼(Transaction Authentication Code / Transaction Authorization Cryptogram),是ETC用戶卡在車道交易過程,卡片將交易時間、交易金額等數據項進行加密計算而產生的交易驗證碼。其設計目的是通過生成和驗證基於密鑰的TAC,能夠保證交易記錄產生的合法性,防止人爲生成交易記錄之類的欺詐行爲。
TAC碼是卡片在消費/複合消費過程中產生的,由用戶卡中的“TAC密鑰”對以下數據計算生成:
——交易金額;
——交易類型標識;
——終端機編號;
——終端交易序號;
——交易日期;
——交易時間。
清分結算時,從流水中獲取相關數據組裝後與用戶卡號一起傳到加密機計算得到實際的TAC碼(使用“TAC密鑰”計算得到)。將該TAC碼同流水中的TAC碼進行比較,若兩者相等,認爲流水中的交易信息是真實有效的;若兩者不相等,則認爲流水中的交易信息可能不是卡片實際交易的,存在僞造的嫌疑。
校驗TAC碼的數據具體組裝格式如下:
交易金額4(字節) +
交易類型標識(06/09)1(字節) +
終端機編號6(字節) +
終端交易序號4(字節) +
終端交易日期4(字節)+終端交易時間3(字節)
另外,由於不同省份的“TAC密鑰”各不相同,所以各省一般只能校驗本省發行的卡片,無法校驗外省發行的卡片的TAC碼(與在哪裏交易無關,省內外消費都是同樣的判定)。