PBOC2.0新型金融IC卡讀卡器的設計與開發
1.1 MCU與IC卡座接口設計
MCU與IC卡卡座的接口電路如圖2所示。IC卡座的V_IC與電源模塊的輸入引腳相連,IC_CLK與MCU的高頻晶振(XT2IN)相連,為IC卡工作提供穩定的時鐘源。IC卡數據的輸入/輸出通過IC_IO與MCU的I/O口進行連接,MCU通過I/O口控制與IC卡的數據交互,并通過IC_DET檢測IC卡的插入和拔出,通過Reset引腳對IC卡進行復位。
1.2 MCU與USB接口設計
USB接口與MCU的接口電路如圖3所示。
USB接口的電源通過二極管D1接到MCU的電源供電部分,為MCU的正常工作提供電源。USB的Data+、Data-引腳分別接MCU的DP、DM引腳,MCU上的PUR引腳與DP引腳間接一個1.4 kΩ上拉電阻,完成MCU的兩個引腳DP和DM差分信號的輸入。
2 軟件設計與開發
讀卡器內部軟件主要由3部分組成,分別為ISO7816協議的實現、USB接口協議HID的實現、金融交易在讀卡器內部的實現。ISO7816協議的實現主要參考ISO7816規范,詳細的實現過程這里不再詳細敘述。由于MSP430F5510自帶全速USB2.0(12Mbps),可參照HID協議完成底層固件HID協議的開發。下面詳細敘述金融交易在讀卡器內部的實現。
為使得軟件開發具有條理性,考慮將金融交易部劃分為以下4個模塊:指令功能模塊、安全認證模塊、協助功能模塊、獨立交易功能模塊。各模塊之間可以相互輔助,實現金融交易的功能。
2.1 指令功能模塊
這個模塊也可以稱為基礎功能模塊,設計此模塊能解決從PBOC2.0規范中抽象出各金融IC卡指令的問題。在模塊內部實現PBOC2.0規范中所述的交易指令:選擇、讀記錄、取數據對象、應用初始化、應用鎖定、應用解鎖、外部認證、生成應用密文、內部認證、PIN修改/解鎖、設置數據、修改記錄、驗證。
這些指令的實現能方便具體交易的調用,使得其他模塊不再具體考慮指令調用的細節。
2.2 安全認證模塊
此模塊的設計可解決交易過程中涉及到的安全認證,單片機內部可以實現RSA算法、3DES算法、哈希算法SHA-1。針對完成PBOC2.0規范中的脫機數據認證,軟實現各種安全認證算法能很好地節省硬件成本,使得開發具有相對的獨立性。
2.3 協助功能模塊
協助功能模塊可作為工具模塊,為其他模塊提供服務。在模塊內部實現對IC卡指令返回的數據的解析、PDOL(處理選項數據對象列表)、DDOL(動態數據認證數據對象列表)、CDOL(卡片風險管理數據對象列表)等數據對象的組包。
IC卡指令返回的數據實質上就是一個有格式的長字符串,這個字符串數據都有相應的模板格式,但不同的指令返回的數據模板不同。而且模板中包含的TLV(Tag、Length、Value)數據結構也各不相同,模板中還可能再包含模板。對于模板中有單一TLV數據結構不帶模塊結構的數據,可以通過先解析Tag,接著解析長度,再解析數據內容的方式,取得某個Tag對應的Value值。即便是一個字符串由多個TLV結構的數據對象組成,這種方法也可以完成對TLV結構的解析以及對單個Tag對應值的確定。
但是對于有多個模塊結構的數據對象進行解析時,就需要先解析模板,確定該TLV的數據對象在哪個模板中,然后從長數據串中截取出這個模板對應的數據,然后再在這個模板中進行TLV數據的解析。
具體在設計中,采用如上所述的分析方法實現兩種不同的TLV解析功能,一種可以直接解析只有TLV結構字符串的函數;另外一種則可以針對有多個模板的字符串進行解析。
2.4 獨立交易功能模塊
在上面三個功能模塊的基礎上實現金融交易,這里主要設計實現了以下金融交易:讀取IC 卡信息、讀取IC交易日志、寫卡腳本、生成ARQC(授權應用密文)、ECC(電子現金)交易。下面詳述各交易的實現。
2.4.1 讀取IC卡信息
讀取IC卡信息,可借助指令功能模塊中的選擇指令選擇IC卡應用個人化環境(PSE),然后利用協助功能模塊的解析函數,解析出卡片中的應用標識符AID,再通過選擇指令選擇AID,解析出PDOL(處理選項數據對象列表)。PDOL實質上是一個模板,表明了處理選項數據對象中應當包含哪些數據對象。解析出 PDOL,利用上述協助功能模塊中的組PDOL對象功能函數便可以形成處理選項數據對象。在應用初始化指令中將這個數據對象發送給卡片,卡片接收到后,會根據處理選項數據對象作出交易的判斷,在返回的數據中帶回來交易中需要讀取的交易記錄,然后根據卡片返回到AFL(應用文件定位器)。遍歷讀取相應的記錄、解析相應的記錄,就可以找到需要的IC卡個人信息。
以上方法不是唯一讀取IC卡的方法,對于常用持卡人信息的讀取,也可以選擇讀取IC卡前兩幾條記錄,從中分析得到IC卡持卡人的個人信息。這種方法讀取速度快,但是對于持卡人信息不在前幾條記錄中的卡片,則會發牛讀取不到信息的錯誤。為避免此種錯誤的發生,設計中采用如上遍歷讀取記錄的方法。
2.4.2 讀取IC卡交易日志
金融IC卡對于圈存、ECC交易,在卡片中會有相應的日志記錄。IC卡交易日志以文件的形式保存在IC中,最多能保存十條交易日志,而且第一條是最近的交易日志。在交易過程中通過讀IC卡日志能判斷出最近幾筆交易的詳細情況,交易日志的讀取通過指令模塊中的Select指令選取PSE,然后解析出 AID。選擇AID后,解析出日志入口標簽的值,從而找到日志對應的SFL(短文件標識符)以及交易日志中的記錄個數。逐條讀取SFL下的記錄,就可以得到完整的交易日志。然后再使用Get Data指令讀取日志格式標簽的值,便可以對照日志格式解析交易日志,得出每筆交易的詳細信息。
以上為最全面的IC日志讀取方法,在實現中為節省程序運行時間,一般在選擇AID后直接讀取SFL為0x0B,在該文件下從第1條記錄讀取到第10條記錄。這種方法也能將交易日志完整的讀取出來,而且還節省了時間。讀卡器在內部實現中采用了這種方法。
2.4.3 寫卡腳本
卡片腳本是發卡行對卡片進行認證過后,認為此卡片為合法卡片后,返回的可以修改IC卡記錄內容的命令。寫卡腳本命令執行之前首先需要對發卡行返回的密文數據進行外部認證,實質上是卡片在驗證發卡行的真偽。發卡行驗證通過,便可以通過產生密文指令向卡片發送表示允許進行交易,卡片收到后會產生允許交易的密文,產生TC(交易證書)。TC需要保存,結算的時候或者聯機中在腳本執行結果中返回給服務器,TL值的產生,說明了卡片承認了這筆交易,服務器清算的時候驗證TC證書。如果TC證書驗證通過,后臺服務就會把這筆消費人賬。由于產生密文的指令可以產生3種應用密文形式,分別為:TC、ARQC(授權請求密文)、AAC(應用認證密文),在產生密文的指令中需要指明為產生TC的指令,而且需要組建CDOL2(卡片風險管理數據對象列表2)的數據。CDOL2的結構同PDOL結構,會指定卡片風險管理數據對象需要哪些數據元,CDOL2在讀記錄中讀取,利用協助功能模板組建CDOL2對象數據。卡片接收產生應用密文指令后,如果返回正確,則可以順利執行寫卡指令,寫卡指令執行正確后,整個交易結束。此時如果交易正常,在IC卡的交易日志中應能查到最近的這次交易。
2.4.4 生成ARQC
ARQC(授權應用密文)在交易中有長片產生的一種密文,這個密文送到后臺服務器,后臺服務器會通過驗證這個應用密文的正確與否來確定IC卡的真偽。ARQC通過發送產生應用密文來得到,在產生應用密文的指令中,密文類型要選擇為ARQC,通過讀記錄、解析記錄、組建CDOL1(風險管理數據對象列表1)得到風險管理數據對象1。卡片接收指令后,會返回所需的ARQC。應用密文指令發送之前需要去完成選擇PSE、選擇AID、應用初始化和讀記錄的工作。
2.4.5 ECC交易
ECC(電子現金)交易是接觸式IC卡的一種脫機消費方式。由于交易是在脫機的情況下進行的,所以交易中不涉及聯機的認證過程。在選擇PSE、選擇AID后的GPO(應用初始化)指令中,利用PDOL指明支持電子現金,然后再讀取需要的IC卡記錄,得到相關的認證數據,包括IC卡公鑰證書、發卡行公鑰證書、認證中心公鑰索引、發卡行公鑰余項、IC卡公鑰余項、IC卡公鑰指數、發卡行公鑰指數。記錄讀取完畢后,需要先進行DDA(動態數據認證)認證,通過后再發送產生應用密文(產生TC)的指令,指令執行正確后再發送外部認證指令。指令執行正確,交易則開始對相關交易數據的保存以及終端風險管理進行處理。以上任何一條指令執行中如果發生錯誤,交易即終止。
結語
本文在超低功耗單片機MSP430F5510的基礎上設計和實現了一款功能豐富的IC卡讀卡器。利用MSF430F5510自帶的全速USB硬件資源實現了HID協議,使得讀卡器可以實現無驅動的使用,方便了讀卡器的使用。金融交易在芯片內部的實現,也可以使得這款讀卡器能作為其他產品的一個模塊,因為其內部實現了相應的RSA算法、3DES算法、哈希算法SHA-1,同時也實現了牛成ARQC、寫卡、讀取IC卡信息、讀交易口志、ECC交易。這些交融交易在讀卡器內部的實現,能減少外部應用對金融交易的重復開發,節省資源,同時也大大提高了工作效率。此款讀卡器往實際的應用中有很好的使用效果。本文引用地址:http://www.104case.com/article/155014.htm 晶振相關文章:晶振原理
評論