CPU卡基礎知識

第一部分 CPU基礎知識
一、爲什麼用CPU卡
IC卡從接口方式上分,可以分爲接觸式IC卡、非接觸式IC卡及複合卡。從器件技術上分,可分爲非加密存儲卡、加密存儲卡及CPU卡。非加密卡沒有安全性,可以任意改寫卡內的數據,加密存儲卡在普通存儲卡的基礎上加了邏輯加密電路,成了加密存儲卡。邏輯加密存儲卡由於採用密碼控制邏輯來控制對EEPROM的訪問和改寫,在使用之前需要校驗密碼纔可以進行寫操作,所以對於芯片本身來說是安全的,但在應用上是不安全的。它有如下不安全性因素:
1、密碼在線路上是明文傳輸的,易被截取;
2、對於系統商來說,密碼及加密算法都是透明的。
3、邏輯加密卡是無法認證應用是否合法的。例如,假設有人僞造了ATM,你無法知道它的合法性,當您插入信用卡,輸入PIN的時候,信用卡的密碼就被截獲了。再如INTENET網上購物,如果用邏輯加密卡,購物者同樣無法確定網上商店的合法性。
正是由於邏輯加密卡使用上的不安全因素,促進了CPU卡的發展。CPU卡可以做到對人、對卡、對系統的三方的合法性認證。

二、 CPU卡的三種認證
CPU卡具有三種認證方法:
持卡者合法性認證——PIN校驗
卡合法性認證——內部認證
系統合法性認證——外部認證
持卡者合法性認證:
通過持卡人輸入個人口令來進行驗證的過程。
系統合法性認證(外部認證)過程:
系統 卡,
送隨機數X
[用指定算法、密鑰]對隨機數加密

[用指定算法、密鑰]解密Y,得結果Z
比較X,Z,如果相同則表示系統是合法的;
卡的合法性認證(內部認證)過程:
系統 卡
送隨機數X

用指定算法、密鑰]對隨機數加密

[用指定算法、密鑰]解密Y,得結果Z

比較X,Z,如果相同則表示卡是合法的;

在以上認證過程中,密鑰是不在線路上以明文出現的,它每次的送出都是經過隨機數加密的,而且因爲有隨機數的參加,確保每次傳輸的內容不同。如果截獲了沒有任何意義。這不單單是密碼對密碼的認證,是方法認證方法,就象早期在軍隊中使用的密碼電報,發送方將報文按一定的方法加密成密文發送出去,然後接收方收到後又按一定的方法將密文解密。
通過這種認證方式,線路上就沒有了攻擊點,同時卡也可以驗證應用的合法性;
但是因爲系統方用於認證的密鑰及算法是在應用程序中,還是不能去除系統商的攻擊性。

在此,我們引進了SAM卡的概念。
SAM卡是一種具有特殊性能的CPU卡,用於存放密鑰和加密算法,可完成交易中的相互認證、密碼驗證和加密、解密運算,一般用作身份標誌。
由於SAM卡的出現,我們有了一種更完整的系統解決方案。
在髮卡時,我們將主密鑰存入SAM卡中,然後由SAM卡中的主密鑰,對用戶卡的特徵字節(如:應用序列號)加密生成子密鑰,將子密鑰注入用戶卡中。由於應用序列號的唯一性,使每張用戶卡內的子密鑰都不同。
密鑰一旦注入卡中,則不會在卡外出現。在使用時,由SAM卡的主密鑰生成子密鑰存放在RAM區中,用於加密、解密數據。
上述的認證過程就成爲如下形式:

系統合法性認證(外部認證)過程:

SAM卡 系統 卡
送隨機數X

SAM卡生成子密鑰對隨機數加密

解密Y,得結果Z
比較X,Z,如果相同則表示系統是合法的;

卡的合法性認證(內部認證)過程:

SAM卡 系統 卡

送隨機數X

用指定算法、密鑰]對隨機數加密

SAM卡解密Y,得結果Z

比較X,Z,如果相同則表示卡是合法的;

這樣在應用程序中的密鑰,就轉移到了SAM卡中,認證成爲卡——卡的認證,系統商不再存在責任。

三、 線路保護
卡與外界進行數據傳輸時,若以明文方式傳輸,數據易被載獲和分析。同時,也可以對傳輸的數據進行竄改,要解決這個問題,CPU卡提供了線路保護功能。
線路保護分爲兩種,一是將傳輸的數據進行DES加密,以密文形式傳輸,以防止截獲分析。二是對傳輸的數據附加MAC(安全報文鑑別碼),接收方收到後首先進行校驗,校驗正確後才予以接收,以保證數據的真實性與完整性。

四、 硬件結構圖


EEPROM用於存放用戶數據;ROM中用於存放COS操作系統,而RAM區中用於存放COS運行時的中間變量。
COS(chip operation system),就是芯片操作系統,類似於DOS和WINDWOS,沒有COS的CPU卡就象沒有DOS和WINDOWS的PC機一樣無法使用。
COS是在芯片出廠時由芯片供應商固化到ROM區的,這個過程就稱之爲掩膜。
COS是CPU卡的核心部分,它和硬件一起實現CPU卡的安全性。


第二部分 SmartCOS簡介
SmartCOS是由明華公司自主開發的芯片操作系統,於1999年6月通過了人行認證。
COS主要分爲四部分:
一、 SMARTCOS的文件系統
CPU卡是以文件方式來管理SmartCOS支持如下文件系統。
1、文件可分爲MF文件、DF文件、EF文件
MF:主控文件,是整個文件系統的根,是唯一的,相當於根目錄;
DF:專用文件,相當於子目錄,可用於存儲某個應用的所有文件,DF下不可再建立DF。一個DF可以是一個應用,也可以多個DF用於同一個應用。
EF:基本文件,用於存儲各種應用數據和管理信息。

2、EF從存儲內容上分爲兩種:
安全基本文件:用於存放密鑰,每個目錄下只能建立一個安全基本文件,密鑰文件不能通過文件選擇來選取,密鑰內容不可以讀出,但在滿足條件時可使用和修改。
工作基本文件:用於存放應用的實際數據,個數及大小隻受空間限制。在滿足條件時可讀寫。

3、基本文件結構
基本文件的結構可分爲以下四種:

二進制文件:
數據以字節爲單位進行讀寫,每次讀寫的長度不能超過110字節;可用於存儲無序的數據。

線性定長記錄文件:
每條記錄爲固定長度,可以通過記錄號訪問記錄,記錄範圍不超過254;
每條記錄的長度不超過110字節,密鑰文件就是線性定長記錄文件,其每條記錄長度固定爲25外字節。可用於存放有規律定長的數據。
線性變長記錄文件:
每條記錄的長度可以各不相同,但最大長度不能超過110
字節,可以通過記錄號來訪問。


循環定長記錄文件結構:
相當於一個環形記錄隊列,按照先進先出的原則存儲,最新寫入的記錄號爲1,上一次寫入的記錄號爲2,以此類推,記錄寫滿後自動覆蓋最早的記錄。

4、文件結構圖
在MF下可建立EF和DF;
在DF下不可再建立DF,只能建立EF;

KEY文件:用於控制MF下的文件的創建及讀寫
數據文件
密鑰文件:
用於控制DF下的文件的創建及訪問 
數據文件(如錢包文件等)

5、文件空間的計算
MF的頭文件長度爲10個字節+文件名長度(5-16個字節)
DF的頭文件長度爲10個字節+文件名長度
EF文件所佔空間:
定義記錄和循環記錄文件的空間=文件頭空間(10字節)+記錄數*記錄長度
變長記錄結構文件的空間=文件頭空間(10個字節)+建立時申請的空間
密鑰文件所佔空間=文件頭空間(10個字節)+密鑰個數*25個字節
錢包文件的空間=文件頭(10個字節)+文件體(17個字節)
存摺文件的空間=文件頭(10個字節)+文件體(20個字節)
建立了文件系統,那麼怎樣才能保證文件的安全,下面講述安全系統。

二、SMARTCOS的安全系統
1、 狀態機即安全狀態:
是指卡在當前所處的一種安全級別,具有(0---F)16種安全狀態。復位後自動設爲0,當前應用的安全狀態在被成功地選擇或復位後自動清0。安全狀態的改變必須通過密鑰的認證來實現。
**只有當前目錄下的PIN覈對和外部認證才能改變安全狀態。

2、 安全屬性即訪問權限
訪問權限是在建立文件的時候指定的。
它是一個區間的概念,例如,描述一個文件的讀權限爲XY,則表示當前應用的狀態機(安全狀態)M必須滿足X=〈M=〈Y。如讀權限設爲2F,就表示當前的狀態機(安全狀態)達到2及以上就可以讀這個文件。

3、 密鑰與安全狀態的關係
每個密鑰在建立的時候都定義了後續狀態,即通過密鑰認證後能達到的安全狀態,在各種密鑰中,只有PIN認證和外部認證才能改變當前目錄的安全狀態。

4、安全狀態與訪問權限的關係 
(安全狀態)
使用權限--------密鑰的使用------------後續狀態------------文件讀寫取限

5、安全狀態只在當前目錄下有效,一旦選擇別的應用,狀態機自動跳到最低權限0。各個目錄之間的安全都是獨立的。

四、復位應答

符號 字節內容 內容解釋
TS 3B 正向約定
T0 6C TB1和TC1存在,歷史字符爲12個
TB1 00 無需額外的編程電壓
TC1 02 需2個額外的保護時間
T1-TC XX 歷史字符
SMARTCOS 歷史字符的特定意義:
符號 字節內容 內容解釋
T1 XX SMARTCOS 的版本號
T2 XX 卡狀態字節
T3 86 明華公司IC卡製造機構標識號
T4 38 
T5-TC XX 卡唯一序號
卡狀態字節描述如下:
B7 B6 B5 B4 B3 B2 B1 B0 狀態
011 XXX XXX 001 XXX XXX XXX XXX 該卡已初始化,併成功該卡未被初始化該卡初始化過程被鎖
0 0 0 0 0 0 X X 該卡未個人化
0 0 1 0 X X X X 該卡個人化未結束
0 1 1 0 X X X X 該卡個人化成功
0 0 0 1 X X X X 該卡個人化沒有成功,卡被鎖
0 1 1 1 X X X X 該卡個人化成功,卡被鎖


卡片狀態字節中有關於初始化、個人化的概念,我們從卡片的生命週期來看這兩個概念,卡片的生命週期一般包括如下幾部分:

芯片 芯片生產商

掩膜COS 芯片生產商

封裝成卡片 卡片生產商

卡片的初始化(COS啓用) 卡片生產商
傳輸密碼保護
卡片的個人化 卡片發行商 

卡片的使用 卡片的使用者

卡片的回收 卡片發行商

初始化過程就是激活COS,定義COS版本,經過這個過程COS纔可以使用。
個人化過程是指建立文件,寫入用戶數據等操作。
卡片生產商在進行初始化後交付卡片發行商使用時,有傳輸密碼保護。

IC卡必須支持T=0或T=1的協議,但不是同時支持這兩種協議,而終端則必須同時支持T=0和T=1的協議。
T=0通訊協議是異步半雙工字符傳輸協議;
T=1通訊協議是異步半雙工塊傳輸協議;
在ISO7816-3標準中,具體規定了這兩種協議;
IC卡所用的協議在TD1中指定,如果在復位應答信息中沒有TD1,則表示用T=0的協議進行通訊。在復位應答後,IC卡和終端之間即用IC卡指定的協議進行通訊。

五、 指令解析
在此,我們以一個電子錢包的應用爲例,講解SmartCOS的指令。
1、文件結構:

在人行規範中定義瞭如下文件結構:
1)電子存摺ED/電子錢包EP應用的公共應用基本數據文件
文件結構:
文件標識(SFI) ‘21’(十進制)
文件類型 透明
文件大小 30
文件存取控制 讀=自由 改寫=需要安全信息
字節 數據元 長度
1-8 髮卡方標識 8
9 應用類型標識 1
10 應用版本 1
11-20 應用序列號 10
21-24 應用啓用日期 4
25-28 應用有效日期 4
29-30 髮卡方自定義FCI數據 2


2)電子存摺ED/電子錢包EP應用的持卡者基本數據文件

文件標識(SFI) ‘22’(十進制)
文件類型 透明
文件大小 39
文件存取控制 讀=自由 改寫=需要安全信息
字節 數據元 長度
1 卡類型標識 1
2 本行職工標識 1
3-22 持卡人姓名 20
23-38 持卡人證件號碼 16
39 持卡人證件類型 1

3)電子存摺ED交易明細文件

文件標識(SFI) ‘24’(十進制)
文件類型 循環
文件存取控制 讀=PIN保護
改寫=不允許
記錄大小 23
字節 數據元 長度
1-2 ED或EP聯機或脫機交易序號 2
3-5 透支限額 3
6-9 交易金額 4
10 交易類型標識 1
11-16 終端機編號 6
17-20 交易日期(終端) 4
21-23 交易時間(終端) 3

2、安全設計如下:
1) 覈對口令後可以進行外部認證;
2) 01號外部認證密鑰用於控制電子錢包的圈存;
3) 02號外部認證密鑰用於控制基本文件的修改、密鑰的修改;
4) 覈對口令後可以進行消費。

KEY文件安裝如下密鑰:
KEY類型 標識KID 使用權限 後續狀態 該KEY作用描述
0B 01 0F 1 個人密碼PIN,用於個人密碼校驗
08 01 11 2 外部認證密鑰,用於電子錢包圈存
08 02 1F F 外部認證密鑰,用於基本文件的修改、密鑰的修改
01 01 22 無 圈存密鑰,用於產生圈存MAC
00 02 01 無 電子錢包消費密鑰,用於產生錢包消費MAC
02 01 03 無 TAC密鑰,用於產生圈存、消費、取現、修改透支限額的TAC
05 01 33 無 應用維護密鑰,用於產生應用鎖定、應用解鎖、卡片鎖定、卡片鎖定和讀、更新二進制、記錄命令的MAC

3、指令序列:
1) 髮卡過程,在卡上建立文件及安裝密鑰
[Create MF] APDU命令:80(CLA) e0(INS) 00(P1) 00(P2) 18(Lc) ff ff ff ff ff ff ff ff (8字節傳輸代碼) ff (在MF下建立文件的安全屬性) 01(目錄文件的短文件標識符) 31 50 41 59 2e 53 59 53 2e 44 44 46 30 31(創建的文件名稱)

[Create DF] APDU命令:80(CLA)E0(INS)01(P1) 00(P2) 0D (Lc信息長度)2F 01(文件標識符)ff(建立文件權限) 00(COS保留) A0 00 00 00 03 86 98 07 01(ADF名稱)

建立DF下密鑰文件[Create File] APDU命令:80(CLA) E0(INS)02(P1) 00(P2) 07(文件信息長度) 6F 02(密鑰文件標識 )05(文件類型) FF(增加新密鑰的權限)00(COS保留) 09(記錄數) 19(記錄長度):

安裝個人密碼PIN [Write Key] APDU命令:80(CLA) E8(INS) 00(P1) 00(P2) 0A (密鑰信息長度)01(密鑰標識符)01(密鑰版本號) 00(算法標識)0B(密鑰類型)0F(使用權限) 01(後續狀態)2F(修改權限)33 (錯誤計數器)12 34(個人密碼)

安裝外部認證密鑰(DEAK)[Write Key] APDU命令:80 (CLA)E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 01(密鑰標識符) 01(密鑰版本號) 00(算法標識) 08(密鑰類型) 11(使用權限) 02(後續狀態) FF(修改權限) 33 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)

安裝外部認證密鑰(DEAK)[Write Key] APDU命令:80 (CLA)E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 02(密鑰標識符) 01(密鑰版本號) 00(算法標識) 08(密鑰類型) 1F(使用權限) 0F(後續狀態) FF(修改權限) 33 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)

。安裝電子錢包EP的消費密鑰DPK。[Write Key] APDU命令:80 (CLA)E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 02(密鑰標識符) 01(密鑰版本號) 00(算法標識) 00(密鑰類型) 01(使用權限) 00(後續狀態) FF(修改權限) 00 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)

安裝電子錢包的圈存密鑰DLK [Write Key] APDU命令:80 (CLA )E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 01(密鑰標識符) 01(密鑰版本號) 00(算法標識) 01(密鑰類型) 22(使用權限) 00(後續狀態) FF(修改權限) 00 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)

。安裝消費/取現中用來生成TAC的密鑰DTK[Write Key] APDU命令:80 (CLA)E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 01(密鑰標識符) 01(密鑰版本號) 00(算法標識) 07(密鑰類型) 0F(使用權限) 00(後續狀態) FF(修改權限) 00 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)

安裝應用維護密鑰DAMK[Write Key] APDU命令:80 (CLA)E8(INS) 00(P1) 00(P2) 18(密鑰信息長度) 01(密鑰標識符) 01(密鑰版本號) 00(算法標識) 05(密鑰類型) 0F(使用權限) 00(後續狀態) FF(修改權限) 00 (錯誤計數器)XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX(密鑰內容)


建立公共應用基本文件[Create File] APDU命令:80(CLA) E0(INS) 02(P1) 00(P2) 07(Lc信息長度) 00 15 (文件標識符)00 (二進制文件類型)0F(讀權限)FF(更新權限)00 1e(文件長度)

建立持卡者基本數據文件[Create File] APDU命令:80(CLA) E0(INS) 02(P1) 00(P2) 07(文件信息長度) 00 16 (文件標識符)00(二進制文件類型)0F(讀權限)FF(更新權限) 00 27(文件長度)

建立交易明細文件[Create File] APDU命令:80(CLA) E0(INS) 02(P1) 00 (P2)07 (文件信息長度)00 18(文件標識符) 03(循環記錄文件類型)1F(讀權限)10(更新權限)0a 17(文件長度)

寫公共應用基本數據文件[Update Binary] APDU命令:00(CLA)D6(INS)95(P1)00(P2)1E(信息長度)A0 00 00 00 03 00 00 01(髮卡方標識)03(應用類型標識)01(應用版本) 00 00 19 98 08 15 00 00 00 01(應用序列號) 20 00 10 01 (應用啓用日期)20 02 12 31(應用有效日期)55 66 (髮卡方自定義FCI數據)

寫卡持有者基本數據文件[Update Binary] APDU命令:00(CLA) D6(INS) 96(P1) 00(P2) 27(文件信息長度) 00(卡類型標識) 00(本行職工標識) 53 41 4d 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00(持卡人姓名) 31 31 30 31 30 38 37 30 30 33 31 37 31 38 39 00(持卡人證件號碼) 00 (持卡人證件類型)

建立電子錢包EP文件[Create File] APDU 命令:80(CLA)E0(INS)02(P1)00(P2)07(Lc)00 01(文件標識符)06(文件類型)00(權限1)00(權限2)00(LEN1)00(LEN2)

結束建立應用(DF)[Create End] APDU命令:80(CLA) E0(INS) 01(P1) 01(P2) 02 (文件標識符長度)2F 01(文件標識符)

結束建立MF [Create End] APDU命令:80(CLA) E0(INS) 00(P1) 01(P2) 02 (文件標識符長度)3F 00(文件標識符)

2) 交易過程
在此,我們以圈存過程及消費過程爲例:
A、 圈存——將金額存入卡中
在圈存前必須先校對個人口令及01號外部認證;

選擇應用[Select File]APDU命令:00(CLA)A4(INS)00(P1)00(P2)02(長度)2F 01(文件標識符)

校驗PIN[Verify] APDU命令:00(CLA) 20(INS) 00(P1) 00(P2) 02(長度) 12 34(PIN)

外部認證:[
取隨機數[Get Challenge] APDU命令:00(CLA) 84(INS) 00(P1) 00(P2) 08

用01號外部認證密鑰對隨機數進行3DES加密;

外部認證[External Authentication] APDU命令:00(CLA) 82(INS) 00(P1) 01
(P2) 08(長度)XX XX XX XX XX XX XX XX (加密後的隨機數)
]

圈存:[
初始化圈存[Initalize For Load] APDU命令:80(CLA) 50(INS) 00(P1) 02(P2) 0B(長度) 01(密鑰標識符) 00 00 10 00(交易金額) 00 00 00 00 00 01(終
端機編號)

如果初始化圈存成功,則應答數據域內容:
說明 長度(字節)
電子存摺或電子錢包舊餘額 4
電子存摺或電子錢包聯機交易序號 2
密鑰版本號 1
算法標識 1
僞隨機數ICC 4
MAC1 4


用圈存對應答內容(4字節僞隨機數ICC+2字節電子存摺或電子錢包聯機交易序號+80 00)進行3DES加密生成過程密鑰;

圈存[Credit For Load]APDU命令:80(CLA)52(INS)00(P1)00(P2)0B(LC)
YY YY MM DD (交易日期)HH MM SS (交易時間)XX XX XX XX(MAC2)

MAC2的計算:
初始值:00 00 00 00 00 00 00 00
密鑰:上面生成的過程密鑰
生成MAC2的數據:00 00 10 00(4字節交易金額)02(交易類型標識)00 00 00 00 00 01(6字節終端機編號)YY YY MM DD (交易日期)HH MM SS (交易時間)

如果圈存交易成功,電子錢包文件的聯機交易序號加1,交易金額加在電子錢包的餘額上,並且在交易明細文件中增加一條記錄。

B、消費過程:
在消費之前先校驗PIN:
校驗PIN[Verify] APDU命令:00(CLA) 20(INS) 00(P1) 00(P2) 02(長度) 12 34(PIN)

初始化消費[Initialize For Purchase] APDU命令:80(CLA) 50(INS) 01(P1) 02(P2) 0B(長度) 01(消費密鑰標識符)00 00 00 01(消費金額)00 00 00 00 00 01(終端機編號)

如果初始化消費成功,則應答數據域內容:
說明 長度(字節)
電子存摺或電子錢包舊餘額 4
電子存摺或電子錢包聯機交易序號 2
透支限額 3
密鑰版本號 1
算法標識 1
僞隨機數ICC 4

消費[Debit For Purchase]APDU命令:80(CLA)54(INS)01(P1)00(P2)0F(LC)
YY YY YY YY (終端交易序號)YY YY MM DD(終端交易日期)HH MM SS (交易時間)XX XX XX XX(MAC1)

用消費/取現密鑰對(4字節僞隨機數ICC+2字節電子存摺或電子錢包聯機交易序號+終端交易序號的最後2個字節))進行3DES加密生成過程密鑰;

MAC1的計算:
初始值:00 00 00 00 00 00 00 00 00(8個字節)
密鑰:過程密鑰
生成MAC碼的數據:4字節交易金額+1字節交易類型標識+6字節終端機編號+4字節終端交易日期+3字節終端交易時間

如果消費交易成功,電子錢包文件的聯機交易序號加1,電子錢包減去交易金額,並且在交易明細文件中增加一條記錄。

六、其它指令解析
以下指令在使用過程中有較多的疑問,解釋如下:
1、密鑰的密文安裝過程:
在3.2版本中對密鑰的密文安裝會有所不同,它的過程如下:
1)建立密鑰文件:
建立密鑰文件時,有關的文件信息如下表:
Lc 有關文件信息
07 文件標識符 (2字節) 文件類型 (1字節) 權限1 (1字節) 權限2(1字節) Len1(1字節) Len2 (1字節)
權限1指明增加新密鑰的權限,權限2指明用何種方式安裝密鑰。權限2設爲80h,表示以密文方式安裝。
2)使用上一層的應用主控密鑰(SmartCOS 3.2中規定:密鑰標識爲01的外部認證密鑰爲應用主控密鑰)對密鑰信息進行加密(密鑰信息爲:明文密鑰信息長度+密鑰信息+80 00 00 00 00 00 00),對密鑰信息的加密方式按標準的Triple DES或Single DES,如果密鑰爲16字節,則用Triple DES加密,如果爲8字節,則用Single DES加密。
3)生成MAC碼,初始值爲:4個字節的隨機數+00 00 00 00,生成MAC碼的數據爲:5個命令頭+加密後的密鑰信息。
4)其它密鑰的密文安裝都使用應用主控密鑰加密安裝。
5)密文安裝MF下的應用主控密鑰時,則使用卡片的傳輸密鑰進行安裝。

2、採用安全報文寫二進制文件
1) 在建立二進制文件時,文件類型的第4位爲1表示採用安全報文。
2)LC爲寫入的字節數+4
3)安全報文(MAC)的計算:
初始值爲:4個字節的隨機數+‘00 00 00 00’
密鑰爲:應用維護密鑰

代碼 值
CLA 04
INS D6
P1 Xx
P2 Xx
Lc 寫入數據長度+4
DATA 寫入數據+4字節MAC

8、PIN Unblock個人密碼的解鎖
命令報文編碼如下:
代碼 值
CLA 84
INS 24
P1 00
P2 01-解鎖個人密碼
Lc 0C
DATA 加密的個人密碼數據元+報文鑑別代碼(MAC)數據元,使用PIN解鎖密鑰。
其中:
加密的個人密碼數據元:
PIN解鎖密鑰對 PIN明文長度+PIN+80 00(補足8的倍數)進行加密生成
MAC的生成:
初始值:4字節隨機數+00 00 00 00
密碼:PIN解鎖密鑰
生成MAC碼的數據:CLA+INS+P1+P2+LC+加密的PIN(8字節)

六、CPUDEMO的使用

七、RD讀寫器函數庫的使用說明
(1) int cpu_reset(int icdev,unsigned char *data_buffer);
說明: CPU卡復位操作
參數: icdev: 初始化返回的設備標識符
data_buffer:復位響應返回的字符串 
返回: = 0 正確
< 0 錯誤(見錯誤代碼) 


(2) int cpu_protocol(int icdev,int len, unsigned char *send_cmd, 
unsigned char *receive_data)
說明: 按照CPU卡T=1的傳輸協議向讀寫器發送命令串
參數: icdev: 初始化返回的設備標識符
send_cmd: 對卡操作的命令串(T=1格式) 
len: 命令串的長度 
receive_data: CPU卡返回的數據串 
返回: = 0 正確
< 0 錯誤(見錯誤代碼)

(3) int cpu_comres(int icdev,int len, unsigned char *send_cmd, 
unsigned char *receive_data)

注意事項:
1)不管是T=0或T=1的卡,RD讀寫器都是按T=1格式來傳輸命令的。
發送的命令串send_cmd包括:
NAD+PCB+LEN+COMMAND+BCC
對於T=0的卡,NAD、PCB可填‘00’;
返回值receive_data結構與Send_cmd相同。

2)cpu_comres與cpu_protocol()的不同
a. 當上層函數庫收到狀態字節SW1SW=61XX時,Cpu_protocol()函數做進一步處理,向讀寫器下發取應答字節指令(Get Respond),並將數據和狀態字節一併返回;而cpu_comres()函數不做任何處理,直接將狀態字節SW1SW2返回。
b. 當上層函數庫接收到狀態字節SW1SW=6CXX時,Cpu_protocol()函數做進一步處理,將XX賦予le後重新發送上次指令,並將數據和狀態字節一併返回;而cpu_comres()函數不做任何處理,直接將狀態字節SW1SW2返回。

發佈了15 篇原創文章 · 獲贊 33 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章