IC卡技術講座之四 IC卡的編程和使用
文章出處:http://hz-huyue.com 作者: 人氣: 發表時間:2011年09月17日
IC卡與其它卡片的區別主要是:IC 卡能在卡上存儲器中安全可靠地存儲大量有用信息,并且可以對數據提供多級安全保密措施.因此,為設計一個好的IC 卡應用系統,必須了解IC卡的數據結構特點.掌握IC卡的編程和讀寫方法.
從使用角度來看,不管是普通存儲卡,邏輯加密卡,或智能CPU卡,卡上必定有:用于與其它應用系統相區別的發行商代碼, 用于與本系統中其他用戶相區別的個人代碼,用于控制對卡上數據修改的擦除密碼,以及用于存放數據的存儲區.由于IC 卡平時不與電源相接,要保證卡上存儲的數據不會丟失,只能使用只讀存儲器即ROM 型存儲器.因此卡上數據可以長期保存,一般數據可存放100年.又由于IC卡上數據在使用中要經常修改,故一般應該使用電可擦除可編程只讀存儲器,即EEPROM.一般IC 卡數據改寫次數大于100000次.
目前的各種IC卡應用系統中使用的IC卡主要是邏輯加密型卡. 這種卡帶有多級密碼保護,比普通存儲卡安全性能強得多;同時又比智能CPU卡結構簡單,不需要復雜的密碼計算過程,而且結構簡單,編程使用方便.本講中以美國ATMEL公司的邏輯加密卡AT88SC1604為例,來說明對IC卡應用系統中的IC 卡發行軟件和用戶應用軟件的編程方法,以及IC卡寫入過程.
一.邏輯存儲卡的數據結構和編程特性
AT88SC1604卡具有一個公用區和四個應用數據區.其數據結構如附表所示.公用區內有廠商代碼,發行商代碼,總密碼,密碼計數器等等.我們可以規劃和利用這些數據區對全卡基本特性進行控制.應用區共四個,第個分區有自己的分區密碼, 擦除密碼,密碼計數器和讀寫控制位,用于對本區內數據的寫入,讀出和修改進行控制.應用區其余部分是存儲數據的存儲單元.1604卡的第一分區存儲容量為9K位,其它三個分區數據存儲容量為2K位.連同公用區總存儲量為16K位.
廠商代碼又叫制造商代碼,是由IC卡制造商在卡出廠時寫入.一般對某一發行商提供的一批卡提供同一代碼,以便與其它廠商的卡相區別. 寫入時將相應保護熔絲1熔斷,此時IC卡開發者可以讀出廠商代碼,判斷其生產廠商,但不能修改它.
發行商代碼:用于IC卡個人化,發卡時由系統軟件寫入, 用來表明此卡屬于哪一應用系統.例如:工商行發行的金融IC卡寫入的發行商代碼,表明了所屬的金融系統.此卡使用時,ATM機會自動核實這一代碼.如果不正確,說明這不是本系統的卡,不能使用.發行商代碼受熔絲2控制,熔斷前,此密碼可修改,熔斷熔絲后.此密碼可讀出, 可核實,但不能修改.
IC卡上的熔絲是IC卡個人化標記.除控制發行商代碼外,也控制整個卡上數據的讀寫.熔絲熔斷前,卡上數據讀寫受總密碼SC和讀寫控制位控制, 各分區密碼不起作用,此時可用IC卡讀寫器對卡進行初始數據的規劃和寫入.熔絲熔斷后, 卡發給用戶個人,此時各分區數據操作不但受總密碼SC控制,而且受各分區密碼和擦除密碼和控制.
總密碼SC一般用作用戶密碼,應通過IC卡發行軟件中提供的用戶環境,由用戶自己設置并且寫到卡上.此密碼一旦寫入,不可讀出也不保留在系統中,只能核對.用戶在以后使用IC卡時,可能通過由應用程序提供的密碼核對功能界面,由用戶本人鍵入加以核對.密碼輸入正確,說明是合法用戶,可以對卡上數據進行讀寫.密碼輸入錯誤時,密碼計數器SCAC減1.此外,在熔絲熔斷之前,總密碼還控制各分區密碼的讀寫.
密碼計數器SCAC用于統計用戶密碼核對次數.輸入正確密碼時,計數器清零( 即8位全置-1-).每輸錯一次,計數器一位變為-0-,若八次輸入錯誤,計數器各位全變為-0-時,則此卡已作廢.
擦除密碼控制對存儲器中已寫數據的擦除.由于EEPROM 在寫入數據時只能寫入到空白區(即各位為-1-),對已寫有數據的存儲區只能先探險,后寫入.每次要擦除一行信息.擦除密碼在卡發行時寫入,由應用系統控制,只能核實,不能讀出以防止非法破壞卡上已有的數據.
各分區有自己的分區密碼,以便實現一卡多用.分區密碼和分區擦除密碼控制本區數據的讀,寫,擦操作.例如用一個1604卡兼工作證,醫療證,工資卡和就餐卡.在不同場合使用此卡時讀寫器分別核實各分區密碼,僅操作本區數據,而不影響其它分區.
存儲分區 |
位地址 |
位數 |
字節地址 |
字節數 | |
FZ |
廠方代碼區 |
0-15 |
16 |
0-1 |
2 |
IZ |
發行商代碼 |
16-79 |
64 |
2-9 |
8 |
SC |
總密碼 |
80-95 |
16 |
10-11 |
2 |
SCAC |
總密碼錯誤計數器 |
96-103 |
8 |
12 |
1 |
CPZ |
代碼保護區 |
104-167 |
64 |
13-20 |
8 |
SC1 |
一區密碼 |
168-183 |
16 |
21-22 |
2 |
S1AC |
一區密碼錯誤計數器 |
184-191 |
8 |
23 |
1 |
EZ1 |
一區擦除密碼 |
192-207 |
16 |
24-25 |
2 |
E1AC |
一區擦除密碼錯誤計數器 |
208-215 |
8 |
26 |
1 |
AZ1 |
應用區一 |
216-9775 |
9650 |
27-1221 |
1195 |
SC2 |
二區密碼 |
9776-9791 |
16 |
1222-1223 |
2 |
EZ2 |
二區擦除密碼 |
9792-9807 |
16 |
1224-1225 |
2 |
E2AC |
二區擦除密碼錯誤計數器 |
9808-9815 |
8 |
1226 |
1 |
AZ2 |
應用區二 |
9816-11863 |
2048 |
1227-1482 |
256 |
SC3 |
三區密碼 |
11864-11879 |
16 |
1483-1484 |
2 |
EZ3 |
三區擦除密碼 |
11880-11895 |
16 |
1485-1486 |
2 |
E3AC |
三區擦除密碼錯誤計數器 |
11896-11903 |
8 |
1487 |
1 |
AZ3 |
應用區三 |
11904-13951 |
2048 |
1488-1743 |
256 |
SC4 |
四區密碼 |
13952-13967 |
16 |
1744-1745 |
2 |
EZ4 |
四區擦除密碼 |
13968-13983 |
16 |
1746-1747 |
2 |
E4AC |
四區擦除密碼錯誤計數器 |
13984-13991 |
8 |
1748 |
1 |
AZ4 |
應用區四 |
13992-16039 |
2048 |
1749-2004 |
256 |
測試區 |
16040-16055 |
16 |
2005-2006 |
2 | |
合計 |
16056 |
2007 |
二.IC卡編程和使用流程
對IC卡的讀寫操作主要在發卡時和用戶持卡交費及持卡消費時時行. 發卡是卡片發行者根據用戶要求對空白卡的個人化過程. 這一過程由發卡單位的微機上運行的發卡程序執行,如銀行,工廠,機關等部.這一發卡程序也需IC卡開發人員根據上述經構特點進行開發設計.用戶持卡消費則在商店POS機或銀行ATM機上進行,持卡交費也需要在銀行或交費處進行.這一過程是讀出或修改卡上數據的過程,由IC卡用戶應用程序在用戶終端上完成.此時用戶需與終端進行交互式處理.這種用戶應用程序也是IC卡開發人員進行設計的.下面,綜合上一節討論的IC卡存儲結構特點, 說明在這兩種軟件中的操作過程.
1.IC卡個人化操作流程
如前所述,此流程嵌在IC卡發卡軟件中執行,可完成IC卡的人人化即初始數據錄入過程.首先系統核對IC卡的廠商代碼和卡型,正確時,在空白卡上寫入發行商代碼,確定此卡為本系統有效卡.然后軟件應提供交互式用戶界面, 讓用戶從鍵盤輸入自己的用戶密碼(SC).此密碼不應由發行者保留和處理,而應該通過調用密碼寫入函數而直接寫入卡上. 多分區中的分區密碼也可以通過給用戶提供的界面由用戶直接輸入.為了簡化密碼記憶要求,也可以采用根據統一用戶密碼經一定算法來分別產生分區密碼并寫入卡上. 擦除密碼則是在個人化時由發行商也就是系統來產生并且入卡上的,供系統使用.在上述密碼寫入后, 軟件還應提供用戶對密碼核實和再次修改的機會.在確認無誤后,軟件發出熔斷命令,熔斷熔絲2,完成IC卡的個人化進程.隨后系統可對IC卡數據區需寫入的數據作初始寫入.
2.IC卡用戶應用軟件流程
如前所述,此流程嵌于各IC卡讀寫終端的用戶軟件中.每次涉及對IC卡操作時執行此流程.一旦IC卡插入讀寫器,用戶軟件首先應核對廠商代碼,發行商代碼,以確認此卡的合法性.在確定是本系統中的有效卡后,進入用戶密碼核對流程, 如果是無效卡,應報警.接著在用戶密碼核對界面中對持卡人的合法性進行鑒別. 要求持卡人鍵入用戶密碼,與卡上密碼核對,無誤后可開始對卡讀寫. 如有分區密碼也要求用戶鍵入核實.如果需對卡上已有數據進行修改,則應與系統中保留的探險密碼進行核對. 正確時可先讀出卡上數據進行修改運算,再擦除相應存儲區,最后將修改后數據寫回該存儲區.根據以上敘述,我們知道IC卡的合法性, 持卡人合法性和系統的合法性要相互確認.這些確認和對IC卡的讀寫操作均需調用隨IC 卡讀寫器提供的函數庫中的函數來完成.
三.IC卡應用程序編程中使用的函數
如上所述:開發IC卡應用系統的要點就是在一個數據庫管理軟件中,合理地嵌入和調用IC卡操作函數,來完成諸如合法性驗證和IC卡讀出,擦除和寫入等操作.為此,我們需要了解由讀寫器驅動程序包中提供的IC止操作函數庫.這些函數可分為兩大類:在WINDOWS應用環境中,提供了一組動態鏈接庫函數(.DLL文件)供各種程序調用. 在DOS 環境中, 則針對不同語言提供了各自的函數庫. 這時限于篇幅僅舉FOXPROFOR DOS中使用的部分函數加以說明.詳細資料可查看相應手冊.
在FOXPRO程序執行前,執行命令:.SET LIBRARY TO MWIC.LIB
則FOXPRO會自動登錄-MWIC.LIB-中的IC卡函數,以后可以像使用FOXPRO 內部函數一樣在程序使用中使用其中的接口函數.而在編譯用戶程序為.EXE文件時,又要將-MWIC.LIB-鏈入即可執行.
MWIC.LIB中的接口函數可分兩類:
通用函數:用于各種卡型的基本操作.
1.MW-INITCOM() 初始化串行通迅口.
2.MW-SETTYPE() 設置卡型.
3.MW-READ() 讀卡上的數據.
4.MW-WRITE() 向卡上寫入數據.
5.MW-ERASE() 擦除指定區域.
AT88SC1604卡專用函數:僅用于這種卡型,因為不同卡型中密碼的結構和位置不同.
1.MW-PASS16() 檢驗總密碼和擦除密碼
2.MW-CPASS16() 改變總密碼和擦除密碼
3.MW-RDECU16() 讀錯誤計數值
4.MW-FUSE16() 燒斷熔絲