非接触式IC卡性能简介2(M1)
3.6 存储器组织
1024 x 8 bit EEPROM存储器分为16区,每区4块,每块16字节。
在擦处后的状态下,EEPROM的单元读为逻辑“0”,写后的状态下读为“1”。
3.6.1 厂商代码块
这是第1区的第1块(块0)。它含有集成电路制造商数据。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。
3.6.2 数据块
各区均有3个16字节的块用于存储数据(区0只有两个数据块以及一个只读的厂商代码块)。
数据块可以通过读写控制位设置为:
· 读写块,例如用于非接触门禁管理
· 数值块,例如用于电子钱包,另有可直接控制存储值的命令,如增值、减值。
在任何存储器操作之前必须执行认证命令。
3.6.2.1数值块
数值块具有电子钱包功能(有效命令:read, write, increment,decrement, restore, transfer)。
数值块有固定的数据格式,以便于错误检测、纠错和备份管理。
数值块只能通过以数值块格式的写操作生成:
· 数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。
· 地址(Adr):1字节地址,当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它只能通过write命令更改。
各区均有一个尾块,存有:
· 密钥A和B(可选),读时返回逻辑“0”。
· 该区四个块的读写条件,存储在字节6至9 。读写控制位也指定了数据块的类型(读写块或数值块)。
如果不需要密钥B,块3的最后6字节可以用作数据字节。
尾块的字节9可用于用户数据。因为此字节享有与字节6、7、8相同的读写权限。
3.7 存储器读写
必须如前所述,先选定卡并通过认证,才能执行存储器操作。
存储器操作 |
||
操作 |
说明 |
使用块型 |
读 |
读存储器块 |
读写、数值和尾块 |
写 |
写存储器块 |
读写、数值和尾块 |
增值 |
增加块的内容,并将结果存入内部寄存器 |
数值 |
减值 |
减少块的内容,并将结果存入内部寄存器 |
数值 |
转存 |
将内部寄存器内容写入块中 |
数值 |
恢复 |
将块中内容写入内部寄存器 |
数值 |
对指定块可以执行的存储器操作取决于所用的密钥和存储在相应尾块中的读写条件。
3.7.1 读写条件
每个数据块和尾块的读写条件均由3个bit定义,并以非取反和取反形式保存在各个区的尾块中。
读写控制位管理着使用密钥A和B读写存储器的权限。如果知道相关的密钥,并且当前读写条件允许,读写条件是可以更改的。
注意:在每一次存储器读写时,内部逻辑会验证存储条件的格式。如果发现个是错误,这个区将被永久性锁死。
注意:在下列说明中,读写控制位是仅以非取反形式表述的。
MF1的内部逻辑保证了命令只有在通过认证后才被执行。
3.7.2 尾块的读写条件
对密钥和控制位的读写取决于尾块(块3)的访问控制位,分为“禁止”、“KEY A”、“KEY B”和“KEY A|B”( KEY A或KEY B)。
注:灰色行为key B可读并可用于存储数据的访问控制条件。
尾块和key A被预定义为传输配置状态。因为在传输配置状态下key B可读,新卡必须用key A认证。
因为访问控制位本身也可以禁止访问,所以个人化时应当特别小心。
3.7.3 数据块的访问控制条件
对数据块(块0至2)的读写访问取决于其访问控制位,分为“禁止”、“KEY A”、“KEY B”和“kEY A|B”( KEY A或KEY B)。相关访问控制位的设置确定了其用途以及相应的可用命令。
· 读写块:允许读、写操作。
· 数值块:运行另外的数值操作——加值、减值、转存和恢复。在用于非充值卡的一种情况(‘001’)下,只能够读和减值。在另一种情况(‘110‘)下,可以用key B充值。
· 制造厂商块:只读,不受访位控制位设置的影响!
· 密钥管理:在传输配置状态下,必须用key A 认证。
1 如果相应扇区尾块Key B可读,则不得用作认证(前表中所有灰色行)。后果:如果读写器试图用灰色行的访问控制条件以Key B认证任何扇区的任何块,卡将在认证后拒绝所有后续存储器访问。