CPU 卡操作系統--FMCOS
FMCOS 特點
支持 Single DES、Triple DES 算法:可自動根據密鑰的長度選擇 Single DES、Triple DES 算法
支持線路加密、線路保護功能:防止通信數據被非法竊取或篡改
支持在一張卡上實現多個不同的應用:可建立三級目錄 z 支持電子錢包功能:錢包大小可由用戶自行設定
支持多種文件類型:包括二進制文件、定長記錄文件、變長記錄文件、循環文件、錢包文件 z 支持 ISO14443-4:T=CL 通訊協議
滿足銀行標準:符合《中國金融集成電路(IC)卡規范》電子錢包/存折規范。
防插拔功能:交易處理過程中非正常拔出的卡片自動恢復
功能模塊
FMCOS 由傳輸管理、文件管理、安全體系、命令解釋四個功能模塊組成。
傳輸管理:按 ISO7816-3、ISO14443-4 標準監督卡與終端之間的通信,保證數據正確地傳輸,防止卡與終端之間通訊數據被非法竊取和篡改。
文件管理:將用戶數據以文件形式存儲在 EEPROM 中,保證訪問文件時快速性和數據安全性。 z 安全體系:安全體系是 FMCOS 的核心部分,它涉及到卡的鑒別與核實,對文件訪問時的權限控制機制。
命令解釋:根據接收到的命令檢查各項參數是否正確,執行相應的操作。
防沖突和選擇
每個串聯級別范圍內地防沖突環
下面算法應適用于防沖突環:
步驟 1:PCD 為選擇的防沖突類型和串聯級別分配了帶有編碼的 SEL。
步驟 2:PCD 分配了帶有值為‘20’的 NVB。
注:該值定義了該 PCD 將不發送 UID CLn 的任何部分。因此該命令迫使工作場內的所有 PICC 以其完整的 UID CLn 表示響應。
步驟 3:PCD 發送 SEL 和 NVB
步驟 4:工作場內的所有 PICC 擁有唯一序列號,那么,如果一個以上的 PICC 響應,則沖突發生。
如果沒有沖突發生,則步驟 6 到步驟 10 可被跳過。
步驟 6:PCD 應識別除第一個沖突的位置。
步驟 7:PCD 分配了帶有值的 NVB,該值規定了 UID CLn 有效比特數。這些有效位應是 PCD 所決定的沖突發生之前的被接受到的 UID CLn 的一部分再加上(0)b 或(1)b。典型的是實現是增加
(1)b。
步驟 8:PCD 發送 SEL 和 NVB,后隨有效位本身。
步驟 9:只有 PICC 的 UID CLn 中的一部分等于 PCD 所發送的有效位時,PICC 才應發送其 UID CLn
的其余部分。
步驟 10:如果出現進一步沖突,則重復步驟 6~9。最大環數是 32。
步驟 11:如果不出現進一步沖突,則 PCD 分配帶有值為“70”的 NVB。
步驟 12:PCD 發送 SEL 和 NVB,后隨 UID CLn 的所有 40 個位,后面有緊跟 CRC_A 校驗和。
步驟 13:它的 UID CLn 與 40 個比特匹配,則該 PICC 以其 SAK 表示響應。
步驟 14:如果 UID 完整,則 PICC 應發送帶有清空的串聯級別位的 SAK,并從 READY 狀態轉換到 ACTIVE 狀態。
步驟 15:PCD 應校驗 SAK 的串聯比特是否被設置,以決定帶有遞增串聯級別的進一步防沖突環時候應繼續進行。
如果 PICC 的 UID 是已知的,則 PCD 可以跳過步驟 2~10 來選擇該 PICC,而無需執行防沖突環。
圖 2-9 PCD 防沖突環流程圖
NVB 的編碼長度:1 字節
較高 4 位稱為字節計數,規定所有被 8 分開的有效數據位的數,包括被 PCD 發送的 NVB 和 SEL。
這樣,字節奇數的最小值是 2 而最大值是 7。
較低 4 位稱為比特計數,規定由 PCD 發送的模 8 所有有效數據位的數。
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含義 |
0 | 0 | 1 | 0 | - | - | - | - | 字節計數=2 |
0 | 0 | 1 | 1 | - | - | - | - | 字節計數=3 |
0 | 1 | 0 | 0 | - | - | - | - | 字節計數=4 |
0 | 1 | 0 | 1 | - | - | - | - | 字節計數=5 |
0 | 1 | 1 | 0 | - | - | - | - | 字節計數=6 |
0 | 1 | 1 | 1 | - | - | - | - | 字節計數=7 |
- | - | - | - | 0 | 0 | 0 | 0 | 比特計數=0 |
- | - | - | - | 0 | 0 | 0 | 1 | 比特計數=1 |
- | - | - | - | 0 | 0 | 1 | 0 | 比特計數=2 |
- | - | - | - | 0 | 0 | 1 | 1 | 比特計數=3 |
- | - | - | - | 0 | 1 | 0 | 0 | 比特計數=4 |
- | - | - | - | 0 | 1 | 0 | 1 | 比特計數=5 |
- | - | - | - | 0 | 1 | 1 | 0 | 比特計數=6 |
- | - | - | - | 0 | 1 | 1 | 1 | 比特計數=7 |
表 2.7 NVB 的編碼
SAK 的編碼(選擇確認)
當 NVB 規定 40 個有效位并且當所有這么數據位與 UID CLn 相配時,SAK 由 PICC 來發送。
第一字節 | 第二、第三字節 | |
SAK | CRC_A | |
(1字節) | (兩字節) |
圖 2-10 選擇確認(SAK)
位 b3(串聯位)和 b6 的編碼在表 2.8 中給出。
表 2.8 SAK 的編碼
b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | 含義 |
X | X | X | X | X | 1 | X | X | 串聯比特設置,UID 不完整 |
X | X | 1 | X | X | 0 | X | X | UID 完整,PICC 遵循 ISO/IEC 14443-4 |
X | X | 0 | X | X | 0 | X | X | UID 完整,PICC 不遵循 ISO/IEC 14443-4 |
UID 內容和串聯級別
UID 由 4、7 或 10 個 UID 字母組成。因此,PICC 最多處理 3 個串聯級別,以得到所有 UID 字節。在每個串聯級別內,由 5 個數據字節組成的 UID 的一部分應被發送到 PCD。根據最大串聯級別,定義了 UID 長度的三個類型。該 UID 長度應與表 2.9 一致表 2.9 UID 長度
UID0 | 描述 |
“08” | UID1 到 UID3 為動態生成的隨機數 |
“x0”-“x7” | 專有固定數 |
“x9”-“xE” | |
“18”-“F8” | RFU |
“xF” |
UID 是一個固定的唯一數或由 PICC 動態生成的隨機數。UID 的第一個字節(uid0)分配后隨 UID 字節的內容。
表 2.10 單個長度的 UID
UID0 | 描述 |
制造商 ID 根據 ISO/IEC 7816-6/AM1* | 每個制造商對唯一編號的其他字節的值得唯一性負責。 |
值”81”到”FE”在 ISO/IEC 7816-6/AM1 中定義為“私用”,在這里不允許出現 |
串聯標記 CT 的值“88”因不用于單個長度 UID 中的 uid0。
表 2.10 兩個和三個長度的 UID
在 ISO/IEC 7816-6/AM1 中為“私用”標出的值“81”到“FE”在本上下文中應不予允許。
圖 2-11 串聯級別的使用
注:串聯標記的途是迫使造成與具育較小 UID 長度的 PICC 沖究.下列算法應適用于 PCD 以獲得完整 UID;步驟 l:PCD 選擇串聯級別 1 步驟 2:應執行防沖突環
步驟 3:PCD 應檢驗 SAK 的串聯比特
步驟 4:如果設置了串聯比特,PCD 應增加串聯綴別并初始化一個新的防沖突環
傳輸協議
類型 A PICC 的協議激活
圖 3-1 從 PCD 角度來看的類型 A PICC 激活
選擇應答請求
圖 3-2 選擇應答請求
參數字節由兩部分組成(見下圖):
——最高有效半字節 b8 到 b5 稱為 FSDI.它用于編碼 FSD。FSD 定義了 PCD 能收到的幀的最大長度。FSD 的編碼在 25 中給出。
——最低有效半字節 b4 到 bl 命名為 CID。它定義編址了的 PICC 的邏輯號在 0 到 14 范圍內。值
15 為 RFU。CID 由 PCD 規定,并且對同一時刻處在 ACTIVE 狀態中的所有 PICC,它應是唯一的。
CID 在 PICC 被激活期間是固定的.并且 PICC 應使用 CID 作為其邏輯標識符,它包含在接收到的第一個無差錯的 RATS。
圖 3-3 RATS 參數字節的編碼