天天看點

智能卡CPU卡開卡指令

參考文檔:

《新版FMCOS2.0使用者手冊.pdf》

《Cpu卡操作的基本方法指令.pdf》

00 B0 96 00 06

3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30

3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30

00 B0 96 00 06 B0 01 53 00 02 9D 95 90 00

00 B0 95 00 0A B0 53 01 01 01 00 00 00 17 14 13 90 00

3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30

3B 79 18 00 00 50 53 4D 5F 54 43 31 30 30

00 B0 96 00 06 B0 01 53 00 02 9D 95 90 00

00 B0 95 00 0A B0 53 01 01 01 00 00 00 17 14 13 90 00

00,B0,83,00,06,

00A4000000

00C000000F

BYTE ucSendBuf[5] = {0x00,0xC0,0x00,0x00};
    ucSendBuf[4] = SW2;
           

00a40000023f00

00 B0 96 00 06

01 53 00 02 9D 95 90 00

代碼
CLA 00
INS B0
P1 xx
P2 xx
Lc 不存在;(CLA=04 時除外)
Data 不存在;(CLA=04 時,應包括MAC)
Le 要讀取資料的長度

若P1 的高三位為100,則低5 位為短的檔案辨別符,P2 為讀的偏移量。

若P1 的最高位不為1,則P1 P2 為欲讀檔案的偏移量(P1 為偏移量高位元組,P2 為低字

節),所讀的檔案為目前檔案。

例子:

1]:檔案辨別符為0005 的二進制檔案,檔案主體空間的大小為8 個位元組,建立時不采

用線路保護。

讀出自偏移量01 開始到檔案結束的所有資料,不進行線路保護,則指令為:

00 B0 85 01 00

由卡片傳回的響應資料為:

11 22 33 44 55 66 77 9000

INS = E0 :Create File建立檔案,包括MF,DF 和EF

80E000160728001EF0F0FF02

最後的02 是和密鑰相關的

代碼 例子
CLA 80 80
INS E0 E0
P1 檔案标示(File ID) 00
P2 16
Data 檔案控制資訊和DF 名稱 0728001EF0F0FF02
Le 要讀取資料的長度

目錄檔案格式:(包括DF MF ,不包括 EF)

80,E0,3F,01,0D,

38,05,20,F0,F0,95,FF,FF,44,44,46,30,31,

長度 檔案類型 檔案空間 建立權限 擦除權限 應用檔案ID 保留字 DF名稱
1位元組 1位元組 2位元組 1位元組 1位元組 XX FF FF 5到16位元組
byte1 byte2-3 byte4 byte5-6
0D 38 05 20 F0 F0 95 FF FF 44 44 46 30 31
智能卡CPU卡開卡指令

基本檔案EF格式(包括密鑰檔案,不包括DF,MF)

檔案類型 檔案類型 檔案空間 讀權限 寫權限 保留字A 保留字B
檔案類型 byte1 byte2-3 byte4 byte5 byte6 byte7
二進制檔案 28 檔案空間 讀權限 寫權限 FF 見說明
定長記錄檔案 2A 檔案空間 讀權限 寫權限 FF 見說明
循環檔案 2E 檔案空間 讀權限 寫權限 FF 見說明
PBOC ED/EP 2F 02 08 使用權限 保留(00) FF 交易記錄短辨別
變長記錄檔案 2C 檔案空間 讀權限 寫權限 FF 見說明
密鑰檔案 3F 檔案空間 DF檔案短辨別符 增權重限 FF FF
智能卡CPU卡開卡指令

所有檔案建立後不能被自動選擇

Send Data :00,A4,00,00,00,

Recv Data:61,0F,

Send Data :00,C0,00,00,0F,

Recv Data:6F,0D,84,06,46,4D,53,48,4D,46,A5,03,88,01,01,90,00,

Send Data :00,84,00,00,04,

Recv Data:CA,E9,FD,62,90,00,

Send Data :00,82,00,00,08,DD,4D,2C,FC,5F,31,D6,7E,

Recv Data:90,00,

Send Data :80,0E,00,00,00,

Recv Data:90,00,

Send Data :00,A4,00,00,00,

Recv Data:61,0A,

Send Data :00,C0,00,00,0A,

Recv Data:6F,08,84,06,46,4D,53,48,4D,46,90,00,

Send Data :80,E0,00,00,07,3F,00,B0,01,F0,FF,FF,

Recv Data:90,00,

Send Data :80,D4,01,00,0D,39,F0,F0,AA,55,FF,FF,FF,FF,FF,FF,FF,FF,

Recv Data:90,00,

Send Data :80,E0,3F,01,0D,38,05,20,F0,F0,95,FF,FF,44,44,46,30,31,

Recv Data:90,00,

Send Data :80,E0,00,01,07,3F,01,8F,95,F0,FF,FF,

Recv Data:90,00,

Send Data :80,D4,01,01,08,3A,F0,EF,44,55,12,34,56,

Recv Data:90,00,

Send Data :80,E0,00,03,07,28,00,1E,F0,F0,FF,02,

Recv Data:90,00,

Send Data :80,E0,00,04,07,28,00,0F,F4,F0,FF,02,

Recv Data:90,00,

Send Data :00,A4,00,00,02,00,03,

Recv Data:90,00,

Send Data :00,D6,00,00,05,01,02,03,04,05,

Recv Data:90,00,

Send Data :00,A4,00,00,02,00,04,

Recv Data:90,00,

Send Data :00,D6,00,00,06,11,22,33,44,55,66,

Recv Data:90,00,

Send Data :00,B0,83,00,06,

Recv Data:01,02,03,04,05,00,90,00,

SmartCard Reader Cnt dw =1,

i=0,Gemplus USB Smart Card Reader 0

Gemplus USB Smart Card Reader 0

連接配接讀卡器: Gemplus USB Smart Card Reader 0

通訊協定: T0

Send Data :00,B0,83,00,06,

Recv Data:01,02,03,04,05,00,90,00,

00,A4,00,00,02,3F,01,

80E000160728001EF0F0FF02

80E000150728001EF0F0FF02

00,A4,00,00,02,00,16,

00,D6,00,00,06,01 ,53 ,00 ,02 ,9D ,95

00,A4,00,00,02,00,15,

00,D6,00,00,0A,53 ,01,01 ,01 ,00, 00, 00, 17 ,14 ,13

00 B0 96 00 06

00 B0 95 00 0A

FM1216 開卡指令:

SmartCard Reader Cnt dw =1,

i=0,Gemplus USB Smart Card Reader 0

Gemplus USB Smart Card Reader 0

連接配接讀卡器: Gemplus USB Smart Card Reader 0

通訊協定: T0

Send Data :00,84,00,00,04,

Recv Data:80,3E,F2,2C,90,00,

Send Data :00,82,00,00,08,6B,23,4F,74,12,6F,4C,9A,

Recv Data:90,00,

Send Data :80,0E,00,00,00,

Recv Data:90,00,

Send Data :00,A4,00,00,00,

Recv Data:61,12,

Send Data :00,C0,00,00,12,

Recv Data:6F,10,84,0E,31,50,41,59,2E,53,59,53,2E,44,44,46,30,31,90,00,

Send Data :80,E0,00,00,07,3F,00,B0,01,F0,FF,FF,

Recv Data:90,00,

Send Data :80,D4,01,00,0D,39,F0,F0,AA,55,FF,FF,FF,FF,FF,FF,FF,FF,

Recv Data:90,00,

Send Data :80,E0,00,16,07,28,00,1E,F0,F0,FF,02,

Recv Data:90,00,

Send Data :80,E0,00,15,07,28,00,1E,F0,F0,FF,02,

Recv Data:90,00,

Send Data :00,A4,00,00,02,00,16,

Recv Data:90,00,

Send Data :00,D6,00,00,06,01,53,00,02,9D,95,

Recv Data:90,00,

Send Data :00,A4,00,00,02,00,15,

Recv Data:90,00,

Send Data :00,D6,00,00,0A,53,01,01,01,00,00,00,17,14,13,

Recv Data:90,00,

Send Data :00,B0,96,00,06,

Recv Data:01,53,00,02,9D,95,90,00,

Send Data :00,B0,95,00,0A,

Recv Data:53,01,01,01,00,00,00,17,14,13,90,00,

上述開卡是使用的是如下的軟體:

用到的卡片為 複旦FM1216-109 純16k 雙界面卡(即可以接觸式,也可以非接觸式),淘寶買的

複旦卡的初始密鑰為: FFFFFFFFFFFFFFFF

在主目錄下建立密鑰檔案,和建立 16和15兩個二進制檔案,需要在開卡的時候一次性完成,卡片掉電之後,在主目錄再次建立别的二進制檔案,會出錯。具體原因應該是和卡的機制有關。這句話可能是個人的一個錯誤的判斷,有空驗證一下。

智能卡CPU卡開卡指令

\ETC_SmartCard\my_doc\CardIssue1\CardIssue1

複旦 1208出廠初始主要密鑰為 8 個位元組的FF,即 FFFFFFFFFFFFFFFF

執行指令時傳回有 9000表示執行成功!

  1. 00A4000000 選擇 MF 下的根目錄 傳回值為

    6F15840E315041592E5359532E4444463031A5038801019000 具體意思查閱卡系

    統手冊(FMCOS)

2.外部認證

2.1 取 4 個位元組的随機數 0084000004

2.2 用 8 個位元組的 初始密鑰 FFFFFFFFFFFFFFFF 和 4 随機數 +00000000 進

行解密 生成 8位元組解密資料 (用DES 函數計算得出)

注意,對密鑰的加密解密是一個逆過程,原理一樣的.

2.3 發送 0082000008+8位元組密文資料

例: 取出的随機數為 73 87 10 10 然後在 DES程式裡,輸入如下:

src1[0]=0x73;

src1[1]=0x87;

src1[2]=0x10;

src1[3]=0x10;

src1[4]=0x00;

src1[5]=0x00;

src1[6]=0x00;

src1[7]=0x00;

卡密鑰:

key1[0]=0xff;

key1[1]=0xff;

key1[2]=0xff;

key1[3]=0xff;

key1[4]=0xff;

key1[5]=0xff;

key1[6]=0xff;

key1[7]=0xff;

然後執行函數:Single_DES_Decrypt_Encrypt(1,src,key1,result); // 1 表 示 解 密 ,

src 明文 KEY1 密鑰, result密文

result1傳回的 8 個位元組就是你要的密文資料了,如下圖:

result1[0]=0X1B;

result1[1]=0XE4;

result1[2]=0X98;

result1[3]=0X0C;

result1[4]=0X1F;

result1[5]=0X32;

result1[6]=0XF2;

result1[7]=0X61;

  1. 删除 MF下的所有檔案指令:800E000000

    傳回 01 由于擦除指令時間較長需等待,當傳回0900 後,表示擦除成功!

  2. 建立 MF目錄下的密鑰檔案

    先選擇根目錄: 00A4000000

    然後執行建密鑰檔案指令: 80E0 0000 07 3F00B0 01F0 FFFF

    說明: 80E0 :指令類别和指令碼; 0000 :檔案辨別; 07:長度; 3F :檔案類型,此為密鑰

    檔案.

    00B0: 所建檔案可用的空間,即可用 0XB0 個位元組的空間; 01 :讀權限; F0 :寫權

    限.

    07表示後面有7個位元組

    01 :讀權限;

    01表示沒有讀的權限

    F0表示可以任意寫

  3. 密鑰檔案建好後就要給其增加密鑰了

    執行指令: 80D4 0100 0D 39 F0F0 AA55 FFFFFFFFFFFFFFFF

    說明: 80D4 :指令類别和指令碼; 0100 :檔案辨別; 0D:長度; 39 :檔案類型,此為外部

    認證密鑰

    0D表示後面有13個位元組

    F0 :讀權限; F0 :寫權限 ;AA:後續狀态; 55 :錯誤計數,目前為 5次機會,傳回錯

    誤代碼是 63 CX, X就是次數了,當X為0時卡永久補鎖,操作主要密鑰時請注

    意!

  4. 建立目錄檔案 DF

    執行指令: 80E0 3F01 0D 38 0520 F0F0 95 FFFF 4444463031

    說明: 80E0 :指令類别和指令碼; 3F01 :檔案辨別; 0D:長度; 38 :檔案類型

    0520 :檔案的空間大小 ; F0 :讀權限; F0 :寫權限 ;

    4444463031 :檔案名 DDF01 也就是ASCII碼了

  5. 建立 DF目錄下密鑰檔案

    執行指令: 80E0 0001 07 3F018F 95F0 FFFF

    3F表示是密鑰檔案

  6. 在 DF目錄下密鑰檔案裡增加密碼密鑰

    執行指令: 80 D4 01 01 08 3A F0 EF 44 55 12 34 56

說明:

80D4 :指令類别和指令碼;

0101 :檔案辨別;

08:長度;

3A:檔案類型,即密碼密 鑰

F0 :讀權限;

EF:寫權限 ;

44 :後續狀态;

55 :錯誤計數;

12 34 56 :3個位元組的PIN 密碼

9. 基本檔案,建立二進制檔案

執行指令: 80 E0 00 03 07 28 00 1E F0 F0 FF 02

說明:

80E0 :指令類别和指令碼; 建立檔案CreateFile

00 03 :檔案辨別;

07:長度; 資料域長度

28 :檔案類型,即二進制檔案

00 1E:空間大小,即為寫入二進制檔案的位元組個數 ; 是檔案的空間大小

F0 :讀權限;

F0 :寫權限 ;

注意:此處的讀寫權限都為F0,表示讀跟寫都沒有限制,可随便讀寫,不用通路權 限

02表示寫操作的時候,使用标示為01的密鑰

執行指令: 80E0 00 04 07 28 00 0F F4 F0 FF 02

說明:

80 E0 :指令類别和指令碼; 建立檔案

00 04 :檔案辨別;

07:長度;

28 :檔案類型,即二進制檔案

00 0F:空間大小,即為寫入二進制檔案的位元組個數 ;

F4 :讀權限;

F0 :寫權限 ;

注意:此處的讀權限為

F4,表示讀權限要大于或等于 4 的情況下才能讀取,也就是 說要驗證密碼後才能讀取,因為密碼的後續狀态為4 ;

而寫呢,即可随便寫,沒有限 制

即安全狀态值 0~F都可以寫二制資料

  1. 寫二進制檔案,須先讀出該檔案所在目錄下的辨別,然後再給其寫入

    10.1:

    執行指令:比如讀取辨別為 0003的,則:00A40000020003 傳回9000 表示讀取成功

    然後寫入你要寫入内容,空間大小不能超過 1E位元組(建立該檔案時設定的)

    執行寫二進制的指令: 00D6 0000 05 0102030405

    說明: 00D6 :指令類别和指令碼; 0000 :偏移量,意思是指要讀出的内容從該位置開始

    05:長度LEN; 0102030405 : 就是你要寫入的内容與前面的長度對應

執行指令:00A40000020004 傳回 9000 表示讀取目前辨別的二進制檔案成功

執行寫二進制的指令: 00 D6 00 00 06 11 22 33 44 55 66

說明: 00D6 :指令類别和指令碼; 0000 :偏移量,意思是指要讀出的内容從該位置開始

06:長度LEN; 112233445566 : 就是你要寫入的内容與前面的長度對應

11.讀出二進制檔案

00B0830000 讀檔案辨別符為0003的檔案,從偏移量0,開始讀

  1. 驗證密碼
  2. PIN上面已設為123456

    在目前目錄下執行指令: 0020 0001 03 123456

    說明: 0020 :指令類别和指令碼; 0001:辨別; 03:為密碼個數位元組為機關; 123456:密碼

    内容

關于對檔案的通路必須在目前目錄下才能通路,否則提示:找不到該檔案

在目前目錄下讀寫該檔案時,如果設定有權限時,必須要通過密碼或外部認證方可讀寫,否則

提示:安全狀态不滿足

操作密碼時一定要注意,記得自己所設的密碼, 63 CX, 這裡的X就是還剩可用多少次了.