1. 程式人生 > >CPu卡髮卡總結

CPu卡髮卡總結

概述:CPU卡包含一個微處理器,其功能相當於一臺微型計算機。CPU卡內積體電路中包括中央處理器(CPU)、只讀儲存器(ROM)、隨機儲存器(RAM)、電可擦除可程式設計只讀儲存器(EEPROM)等。

使用FMCOS,由傳輸管理、檔案管理、安全體系、命令解釋四個功能模組組成。

傳輸管理:監督卡與終端之間的通訊,保證資料正確地傳輸。

檔案管理:區別於其他卡按區塊儲存資料的方式。CPU卡將使用者資料以檔案的形式儲存在EEPROM中,保證訪問檔案的快速性和安全性。

安全體系:涉及對卡的鑑別與核實,對檔案訪問時的許可權控制機制。

命令解釋:根據接收到的命令檢查各項引數是否正確,執行相應的操作。

以上這些概念性的東西都是卡與在文件中查到的,因此只說了大概,下面詳細講一下CPU卡髮卡的具體流程。

安全機制:

FMCOS的每個目錄都有一個安全狀態暫存器,共有16中安全狀態,用十六進位制數0-F來表示。當前目錄的安全狀態在復位或者重新選擇目錄後被置為0,在當前目錄下的口令校驗或者外部認證指令通過後更改安全狀態的值為金鑰規定的後續狀態。

        對於FMCOS的所有檔案,在建立時都需要設定它的訪問許可權,包括讀許可權、寫許可權、使用許可權、更改許可權等。用1個位元組的十六進位制XY數表示。當該目錄此時的安全狀態值>=Y並且<=X時,則你擁有該檔案相應的許可權;若X=0,則安全狀態>=Y時,你擁有該檔案相應的許可權;當X=Y時,安全狀態=Y才會擁有該檔案相應的許可權。如果你不想讓人讓問某個檔案,你可以將該檔案的操作許可權設為XY(Y>X)

髮卡:

所需裝置:

1、  復旦CPU卡

2、  D8非接觸式讀卡器

3、  ESAM卡(髮卡母卡,裡面儲存了需要裝載到CPU卡內的所有金鑰)

4、  PC機

5、  開發語言使用VB2005

髮卡流程:

1、  連線讀卡器,開啟讀卡器埠。

2、  尋卡,CPU卡和ESAM卡上電覆位,檢查CPU卡和ESAM卡是否放在讀卡器的正確位置。

3、  首先需要記住的是,無論是對CPU卡還是ESAM卡做任何操作,你都需要選擇對應的目錄。

4、  對CPU卡做外部認證:

CPU卡MF目錄下的Key檔案裡有一個主控金鑰,由該金鑰的屬性設定來決定你是否有許可權對CPU卡進行卡片初始化、MF擦除以及卡結構修改等許可權。

所謂外部認證,就是檢查你是否有合法的許可權對CPU卡進行各種操作。首先你需要擁有主控金鑰,通常你並不知道主控金鑰的內容(除非是未經初始化過的卡,初始主控金鑰由卡片製造商決定,我用的卡初始金鑰為全F),主控金鑰儲存在ESAM卡中,你需要通過SAM卡提供的分散指令(兩次通用DES計算),得到主控金鑰CCk。然後通過CPU卡提供的取隨機數指令,取得8位元組隨機數sRandom(這個隨機數不僅返回給終端,而且還儲存在CPU卡內某一位置),用CCK對sRandom做DES加密,得到結果sRet。然後使用外部認證指令將sRet傳送到CPU卡,CPU卡使用MF下的主控金鑰對sRet做解密,將得到的結果與剛才送給終端的隨機數比較,如果相同,則外部認證通過,CPU卡的安全暫存器狀態置為主控金鑰設定的後續狀態,同時你也擁有了該後續狀態值所對應的操作的許可權。如果認證不通過,錯誤次數減一,你可以使用另外的主控金鑰繼續做外部認證,成功則錯誤次數清0。千萬記住錯誤次數不能超過主控金鑰設定的允許最大錯誤次數(空卡預設是3次),否則將被鎖卡。

因為我們不清楚要用來發卡的CPU卡是空卡還是已經初始化過的,所以在做外部認證的時候我們需要先使用廠商提供的初始金鑰,再使用ESAM卡中的主控金鑰。

5、  擦除MF:

MF預設建立,你只能清除MF下的所有內容,不能刪除MF。

6、  建立MF下的檔案:

MF的目錄結構包括:

-            金鑰檔案

-            目錄資料檔案

-            基本檔案EF(包括二進位制檔案、記錄檔案等)

-            目錄檔案DF

金鑰檔案是你在建立一個目錄時首先需要建立的,金鑰檔案裡的各種金鑰控制你對該目錄以及該目錄下內容的操作許可權。

指令:80E00000073F005001AAFFFF

檔案標識:0000

檔案型別:3F

檔案空間:0050(關於檔案空間的設定,參加:檔案空間

讀許可權:01

寫許可權:AA

金鑰檔案建立後,你需要向其中寫入各種金鑰,包括主控金鑰、維護金鑰等。

然後是建立目錄資料檔案,變長記錄檔案,說明MF下有哪些目錄。

最後建立EF和DF

7、  建立3F01目錄下的檔案

通用先建立Key檔案並向Key檔案中裝載金鑰

由於3F01是ADF,所以不需要建立目錄資料檔案

再建立電子錢包/存摺檔案、電子錢包交易明細記錄檔案等

電子錢包/存摺檔案、電子錢包交易明細檔案都是由PBOC規定了如何來建立維護的。

8、  其他目錄的建立方法同上

檔案空間

檔案頭:11位元組(檔案型別+檔案識別符號+檔案主體空間大小+許可權+校驗等)

每個基本檔案所佔的EEPROM空間:11位元組檔案頭+檔案主體空間

定長、普通錢包和迴圈檔案的主體空間:記錄個數x記錄長度(金鑰檔案的記錄長度為資料長度+8)

每個DF所佔的EEPROM空間:11位元組DF頭+DF下所有檔案的空間和+DF名稱長度

安全報文傳送

三種情況:

- 線路保護:對傳輸的資料附加4位元組的MAC碼,接收方收到後首先進行校驗,只有校驗正確的資料才予以接受,這樣就防止了對傳輸資料的篡改。

- 線路加密:對傳輸的資料進行DES加密,這樣傳輸的就是密文,攻擊者即使獲得了資料也沒有意義。

- 線路加密保護:對傳輸的資料進行DES加密後再附加4byte MAC碼

如何使用安全報文傳送:

在建立檔案時改變檔案型別,使用線路保護則最高位置為1,使用線路加密則次高位置為1,使用線路加密保護則最高位和次高位都置為1.

在對檔案進行讀寫或使用金鑰時,如需採用安全報文傳送,必須置CLA的後半位元組為十六進位制“4”

線路保護MAC計算:

假設建立了一個二進位制檔案,使用線路保護,檔案標識0x16,檔案空間0x20。

則向二進位制檔案中寫資料的指令為:

04D6960024 + val + mac

其中CLA為04,因為檔案使用線路保護,所以後半位元組為4

INS為D6

P1為96,其中高3位為100,低5位為檔案標識

P2為00,為欲寫檔案的偏移量

Lc為24

val為要寫入到二進位制檔案中的資料,0x20個位元組

mac就是我們需要計算的線路保護mac

而mac又是根據寫指令去除mac部分計算得到的,即是根據“04D6960024 + val”計算得到的。

Mac計算步驟:

1、 終端向CPU卡傳送GET CHALLENGE指令,取得4位元組隨機數,後補“0x00000000”,得到的8位元組結果作為MAC計算的初始值。

2、 檢查“04D6960024 + val”的位元組數是否為8的倍數,不是則補“0x8000…”,是則補“0x8000000000000000”,然後將得到的結果按8位元組每塊分成D1、D2、D3…

3、 判斷金鑰的長度。

如果金鑰長度為8位元組,則按如下方式計算MAC:

image

如果金鑰長度為16位元組,則按如下方式計算MAC:

image

使用SAM卡計算MAC:

1、 終端向CPU卡傳送GET CHALLENGE指令,取得4位元組隨機數,後補“0x00000000”,得到的8位元組結果作為MAC計算的初始值。

2、 通用DES初始化

80 1A + P1(金鑰用途)+ P2(金鑰版本)+ Lc + DATA(分散因子)

3、 通用DES計算

80 FA + P1 + P2(00) + Lc + DATA(8位元組隨機數+)+ “04D6960024 + val + 0x8000…”

這裡P1的取值是關鍵:00001001,即05,代表有初始值的MAC計算

返回資料即為4位元組MAC

線路加密計算:

具體計算方式同DES/3DES演算法,這裡介紹的是如何使用SAM卡加密。

1、通用DES初始化

80 1A + P1(金鑰用途)+ P2(金鑰版本)+ Lc + DATA(分散因子)

2、通用DES計算

80 FA + P1 + P2(00) + Lc + “明文”

這裡P1的取值是關鍵:00000000,即00,代表無後續快的加密計算

返回資料即為加密得到的密文

充值

離線充值

1、  選擇要充值的應用目錄。

2、  驗證口令金鑰。

3、  取得充值金鑰(這裡使用加密機提供的分散指令,用ATS作為分散因子對00B0金鑰進行分散得到充值金鑰)。

4、  圈存交易初始化。

5、  生成過程金鑰。

6、  用過程金鑰計算MAC1與初始化交易返回的MAC1進行比對,若一致,則繼續執行。

7、  用過程金鑰計算MAC2。

8、  使用圈存指令將MAC2傳送給CPU卡,完成充值交易。

聯機充值

1、2、3、4步同離線充值。

將圈存交易初始化返回的資料傳送給後臺,後臺算出過程金鑰,並得到MAC1。由後臺對MAC1作比較,如果一致,則後臺再算出MAC2,返回給前臺,前臺使用圈存指令將MAC2傳送給CPU卡,完成充值交易。

消費

1、  選擇要消費的應用目錄。

2、  取得消費金鑰(這裡使用加密機提供的分散指令,用城市程式碼和ATS作為分散因子對00B1金鑰進行分散得到消費金鑰)。

3、  消費交易初始化

4、  生成過程金鑰

5、  用過程金鑰計算MAC1

6、  用消費指令將MAC1傳送給CPU卡進行消費交易

7、  得到TAC和MAC2,驗證…


複合消費主要面向於交通領域的應用,既可以滿足高速公路不停車收費系統的需求,也可以滿足城市公共交通的應用需求。

複合消費相對於普通消費來說多了一個對複合記錄檔案的更新。比如在高速公路入口或者乘客上車時先做一次金額為0的複合消費,從而正確記錄入口或者上車站點的相關資訊,之後在高速公路出口或者乘客下車時,讀取之前記錄的資訊,計算出實際費用,做一次完整的複合消費交易,這樣就可以實現高速公路或者公共交通中的分段收費功能。

具體消費流程:

1、  選擇要充值的應用

2、  得到PSAM卡或加密機中得到消費子金鑰

3、  進行復合交易初始化

4、  計算過程金鑰

5、  利用過程金鑰計算MAC1,這裡交易型別為09

6、  更新複合應用資料快取(P1為卡中複合記錄檔案原記錄的複合消費標誌)

7、  傳送MAC1進行消費

ps:複合記錄檔案的命令報文資料域的byte7為EF(使用線路保護讀,讀寫都使用標識為00的金鑰)