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 参数字节的编码