• M1卡区块控制位详解


    M1卡区块控制位详解
    Mifare 1S50/Mifare 1S70
    每个扇区的密码和存取控制都是独立的,可以根据实际需要设定各自的密码及存取 控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据块和控制块)的存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有相应的三个控制位,定义如下:
    块0: C10 C20 C30
    块1: C11 C21 C31
    块2: C12 C22 C32
    块3: C13 C23 C33
    三个控制位以正和反两种形式存在于存取控制字节中,决定了该块的访问权限(如 进行减值操作必须验证KEY A,进行加值操作必须验证KEY B,等等)。三个控制 位在存取控制字节中的位置,以块0为例:
    注意高字节和低字节顺序不同。
     
     
    (一),以常用设置"08 77 8F 69"控制条件为例,先搞清楚它――具有的访问权限。
     
    1、对"08 77 8F 69"值进行计算,该值定位于各区块3的6,7,8,9四个字节内,字节6=08,字节7=77, 字节8=8F,   字节9=69(默认值,不予计算)。
     
    2、例如:字节6=08,对应其二进制值=00001000, 则对6,7,8这三个字节进行二进制转换结果见下表:
    字节6 = 0 0 0 0 1 0 0 0
    字节7 = 0 1 1 1 0 1 1 1
    字节8 = 1 0 0 0 1 1 1 1
    3、参照表2及表4算法,字节6的全部二进制值取反,字节7的低四位二进制值取反,字节8不变,
     
    得到:
    字节号
    对应二进制值
    位置
    高4位
    位置
    低4位
    字节6
    字节7
    字节8
    0 0 0 0 1 0 0 0
    0 1 1 1 0 1 1 1
    1 0 0 0 1 1 1 1
    C2Y
    C1Y
    C3Y
    1 1 1 1
    0 1 1 1
    1 0 0 0
    C1Y
    C3Y
    C2Y
    0 1 1 1
    1 0 0 0
    1 1 1 1
    所属块位
       
    块3块2块1块0
     
    块3块2块1块0
    4、对以上6,7,8字节的存取/控制二进制已取反值,依照表2,表4块位转换为各块控制值,如下表:
    块3位
    字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1
    块2位
    块1位
    块0位
    字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0
    字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0
    字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0
    注意: 
    1、高4位的各块值=低4位的各块值时,其值可用。高4位值≠低4位值时,其值不可用!
    2、高位和低位的顺序是不一样的。高位从上向下是C2,C1,C3。低位是C1,C3,C2
     
     
     
     
    7
    6
    5
    4
    3
    2
    1
    0
    6
    c23_b
    c22_b
    c21_b
    c20_b
    c13_b
    c12_b
    c11_b
    c10_b
    7
    c13
    c12
    c11
    c10
    c33_b
    c32_b
    c31_b
    c30_b
    8
    c33
    c32
    c31
    c30
    c23
    c22
    c21
    c20
    9
                   
     
     
     
    5、查对访问权限(数据存取控制依照表3,块3存取控制依照表5),该例"08 77 8F 69"的访问权限为:
     
    ◆ 块3 = 011:权限为:KeyA,KeyB均不可读,验证KeyB正确后可改写KeyA和KeyB,验证KeyA或KeyB正确后可读"控制位"。在此可见密钥KeyB的重要性,KeyB不正确是无法看到块3控制值,更无法修改密钥。
     
    ◆ 块2 = 块1 = 块0 = 110:权限为:验证KeyA或KeyB后可读该块数据,减值以及初始化值,只有验证KeyB 正确后才可改写该块数据,在此可以看到密钥KeyB对改写数据块也起着关键性作用。
     
    (二)、"08 77 8F 69" 控制条件设置步骤:
     
    由(一)可知:KeyB设置后为不可读,并且改写数据和改写控制位都需要正确验证它,故KeyB设置后程序
     
    操作员必须妥善保管KeyB值,否则以后改写数据和控制位时,不正确的KeyB值将无法实现卡的任何操作!!!
     
    1、修改块3控制位的值:最初的各区块3内的KeyA,KeyB都是厂商12个"F"默认值(KeyA在任何条件下均为不可读,大部分读写机程序表现KeyA为未知的12个"0" ),在修改控制值时,先不要修改默认密码KeyA和KeyB,在控制位修改成功后,再去更改新密码值。即先对块3的控制位进行修改(默认值FF 07 80 69改为新值08 77 8F 69)并执行写操作。控制位写成功后,KeyB亦为12个"0"不可读了,但仍是隐藏的12个"f"默认值。
     
    2、修改块3的KeyA和KeyB值:控制位08 77 8F 69值写成功后,验证KeyB正确后方可改写KeyA和KeyB新密码。在密码操作模式键入要改写区块之先前密码B(先前密码为默认值时,则不需改动和加载),加载后反回数据操作模式,再进行读值,KeyA和KeyB值的改写。
     
    3、修改块0~块2中数据:由新的控制条件08778F69可知,要修改数据,必须先验证KeyB,故先设置密码操作为KeyB认证方式,加载后再返回数据操作模式,对要修改的数据块进行值的改写操作。
     
    4、上例中分析了"08 77 8F 69"的访问条件及其改写步骤,对用户的其它控制条件亦可参照应用。
     
    块012权限说明:
     
     
    块3权限说明:
    复旦微电子文档中说明如下:
     
    比较常见的控制位
    FF 07 80 69
    默认值
    字节6 FF= 1 1 1 1 1 1 1 1
    字节7 07= 0 0 0 0 0 1 1 1
    字节8 80= 1 0 0 0 0 0 0 0
     
    字节号
    对应二进制值
    位置
    高4位
    位置
    低4位
    字节6
    字节7
    字节8
    1 1 1 1 1 1 1 1
    0 0 0 0 0 1 1 1
    1 0 0 0 0 0 0 0
    C2Y
    C1Y
    C3Y
    0 0 0 0
    0 0 0 0
    1 0 0 0
    C1Y
    C3Y
    C2Y
    0 0 0 0
    1 0 0 0
    0 0 0 0
    所属块位
       
    块3块2块1块0
     
    块3块2块1块0
     
    块3位
    字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 0 1
    块2位
    块1位
    块0位
    字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 0 0 0
    字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 0 0 0
    字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 0 0 0
    权限解释:数据块012的权限为000,表示keyA和keyB都可读可写。权限最高。
     
    块3为001,密码A为任何时候不可读出,可以通过AB写。
    密码B可以通过AB读写。
    控制字节可以通过AB读写。
     
    -------------------------------------------------------------------------------------------------------------
    08 77 8F 69【适合实际使用,权限控制相对较好】
    字节6 = 0 0 0 0 1 0 0 0
    字节7 = 0 1 1 1 0 1 1 1
    字节8 = 1 0 0 0 1 1 1 1
     
    字节号
    对应二进制值
    位置
    高4位
    位置
    低4位
    字节6
    字节7
    字节8
    0 0 0 0 1 0 0 0
    0 1 1 1 0 1 1 1
    1 0 0 0 1 1 1 1
    C2Y
    C1Y
    C3Y
    1 1 1 1
    0 1 1 1
    1 0 0 0
    C1Y
    C3Y
    C2Y
    0 1 1 1
    1 0 0 0
    1 1 1 1
    所属块位
       
    块3块2块1块0
     
    块3块2块1块0
     
    块3位
    字节7,字节6,字节8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1
    块2位
    块1位
    块0位
    字节7,字节6,字节8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0
    字节7,字节6,字节8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0
    字节7,字节6,字节8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0
    权限解释:数据块012的权限为110,密码AB都可读,只有密码B可写。密码B可增减。比如,可在实际业务中密码A用于消费,密码B用于充值。
    块3
    011,密码A和密码B任何时间不允许读,只能用密码B写。控制字节AB都可读,只有B可写。
     
    07 8F 0F 69【冰冻,永远只可读不可写】
     
    00 F0 FF 69【自杀,永远不可读不可写】自杀模式还有很多,把控制字写的不认识也无法使用,在实际中新手经常干的事,所以一定要控制好。
     
    对数据块的操作
    读 (Read):读一个块;
    写 (Write):写一个块;
    加(Increment):对数值块进行加值;
    减(Decrement):对数值块进行减值;
    存储(Restore):将块中的内容存到数据寄存器中;
    传输(Transfer):将数据寄存器中的内容写入块中;
    中止(Halt):将卡置于暂停工作状态;

    作者:朱鹏飞 加我个人微信(zhupengfeivip)进入郑州IT微信交流群
    个人博客:https://zhupengfeivip.github.io/
    image.png
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    JAVA_SE基础——59.权限访问修饰符
    JAVA_SE基础——58.如何用jar命令对java工程进行打包
    JAVA_SE基础——57.有了包之后类与类之间的访问使用import语句
    JAVA_SE基础——56.包的创建
    JAVA_SE基础——55.自定义异常类
    JAVA_SE基础——54.异常
    JAVA_SE基础——53.什么是异常?
    Spring整合Mybatis
    Mybatis的ResultMap结果集映射、日志、分页
    Java中的值传递机制
  • 原文地址:https://www.cnblogs.com/zhupengfei/p/8983666.html
Copyright © 2020-2023  润新知