zoukankan      html  css  js  c++  java
  • MIFARE系列5《存储结构》

         Mifare S50把1K字节的容量分为16个扇区(Sector0-Sector15)。每一个扇区包括4个数据块(Block0-Block3)。我们也将16个扇区的64个块按绝对地址编号为0~63。每一个数据块包括16个字节(Byte0-Byte15)。64*16=1024。

         Mifare S70把4K字节的容量分为40个扇区(Sector0-Sector39),当中前32个扇区(Sector0-Sector31)的结构和Mifare S50全然一样,每一个扇区包含4个数据块(Block0-Block3)。后8个扇区每一个扇区包含16个数据块(Block0-Block15)。我们也将40个扇区的256个块按绝对地址编号为0~255。每一个数据块包含16个字节(Byte0-Byte15),256*16=4096。

    型号

    扇区号

    名称

    绝对块

    Mifare S50

     

                  sector0                   

    厂商代码                      

    B0                                                                       

    数据块

    B1

    B2

    扇区尾块

    B3

    -

    -

    -

    Sector15

     

    数据块

    B60

    B61

    B62

    扇区尾块

    B63

                 Mifare S70                

    -

    -

    -

    Sector31

     

    数据块

    B124

    B125

    B126

    扇区尾块

    B127

    -

    -

    -

    -

    -

    -

    -

    -

    -

    Sector39

     

     

     

     

     

     

    数据块

    B240

    B241

    B242

    B243

    B244

    B245

    B246

    B247

    B248

    B249

    B250

    B251

    B252

    B253

    B254

    扇区尾块

    B255




    1. 制造商块

    0扇区0块是特殊的数据块,用于存放制造商代码,包含芯片序列号。此块仅仅读。出于安全和系统需求,此块是制造商在生产过程中编程后写保护的。



    2. 普通数据块

         普通数据块可通过数据块备份进行数据完整性的管理。

    一般每块16个字节中有两个用来存放校验码和备份块的地址。各区均有3个16字节的块用于存储数据(区0仅仅有两个数据块以及一个仅仅读的厂商代码块)。


    数据块可作两种应用:

    1)  用作一般的数据保存,能够进行读、写操作。比如用于非接触门禁管理。

    2)  用作数值块,能够进行加值、减值、转存和恢复。比如用于电子钱包。可直接控制存储值,如增值、减值。在用于非充值卡的一种情况(‘001’)下。仅仅能够读和减值。在还有一种情况(‘110‘)下。能够用key B充值。

    数值块具有电子钱包功能(有效命令:read,write, increment,decrement, restore, transfer)。数值块有固定的数据格式。它採用冗余存储方法以保证其数据的正确性。

    以便于错误检測、纠错和备份管理。数值块格式例如以下:

              字节号           

    15  

    14  

    13  

    12  

    11

    10

    9  

    7

    6

    5

    4

    3   

    1   

    0

    存储形式

    VALUE              

     VALUE-1

    VALUE

    A

    A-1

    A

      A-1

                   说明                  

    数值  

    地址 



    Ø  数值:有符号4字节数值。数值的最低字节存储在最低地址字节。负值以标准的2的补码形式存储。出于数据完整性和安全原因,数值存储三次,两次不取反,一次取反。

    Ø  地址(Adr):1字节地址。当进行备份管理时,可用于保存块的地址。地址保存四次。两次取反,两次不取反。在increment、decrement、restore和transfer 操作中,地址保持不变。它仅仅能通过write命令更改。



    3. 尾块的读写条件

         对密钥和控制位的读写取决于尾块(块3)的訪问控制位,分为“禁止”、“KEYA”、“KEY B”和“KEY A|B”( KEY A或KEY B)。


    字节号

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

             说明          

      密钥A  

    读写控制

    密钥B(可选)


          在每一个扇区最后一个块即区尾中存放有密钥A、訪问条件、密钥B等内容。它们用于控制对该扇区的操作。

    当中第0-5字节为48位的密钥A;第6-8字节为訪问控制条件;第9字节为备用区可用于存放特殊的应用数据,如存放数据备份区的地址;剩下的6个字节存放密钥B,如用户不须要密钥B,则可用于存放一般的应用数据。因为区尾中訪问条件的数据非常重要,因此使用了冗余存储的方法。

      

     控制位字节详细说明例如以下:

           bit           

           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

     

     

     

     

     

     

     

     


    比如:M1的卡片初始控制字为:7F078800,我们对它分析例如以下:

    字节6-7F:01111111

    字节7-07:00000111

    字节8-88:10001000

    字节9-00:0000 0000  

    那么我们能够得出:

                      块0                    

                     C10                   

                  C20              

                C30             

                0 0 0            

    块1

    C11

    C21

    C31

    0 0 0

    块2

    C12

    C22

    C32

    0 0 0

    块3

    C13

    C23

    C33

    0 1 1

     

    块3的訪问控制位为011,依据下表查得:

    passwordA:不可读。验证KEYB正确后。可写(更改)。

    存取控制:验证KEYA或KEYB正确后。可读。验证KEYB正确后。可写。

    passwordB:不可读;验证KEYB正确后,可写。


     訪问控制位                            

    所控制的訪问对象

    凝视

    KEY A

    訪问控制位

    KEY B

          C1        

          C2  

              C3     

                读            

                            

           读         

                        

           读         

                  

     

    0

    0

    0

    禁止

    Key A

    Key A

    Key B

    Key A

    Key A

    Key B可读                 

    0

    1

    0

    禁止

    禁止

    Key A

    禁止

    Key A

    禁止

    Key B可读

    1

    0

    0

    禁止

    Key B

    Key A|B

    禁止

    禁止

    Key B

     

    1

    1

    0

    禁止

    禁止

    Key A|B

    禁止

    禁止

    禁止

     

    0

    0

    1

    禁止

    Key A

    Key A

    Key A

    Key A

    Key A

    Key B可读

    传输配置状态

    0

    1

    1

    禁止

    Key B

    Key A|B

    Key B

    禁止

    Key B

     

    1

    0

    1

    禁止

    禁止

    Key A|B

    Key B

    禁止

    禁止

     

    1

    1

    1

    禁止

    禁止

    Key A|B

    禁止

    禁止

    禁止

     



    4. 数据块的訪问控制条件


    訪问控制位

    所控制的訪问操作

    用途

          C1    

            C2        

            C3         

                   读              

                          

               加值           

               减值           

    转存

    恢复

     

    0

    0

    0

    key A|B1

    key A|B1

    key A|B1

    key A|B1

        传输配置状态    

    0

    1

    0

    key A|B1

    key B1

    禁止

    禁止

    读写块

    1

    0

    0

    key A|B1

    key B1

    禁止

    禁止

    读写块

    1

    1

    0

    key A|B1

    key B1

    key B1

    key A|B1

    数值块

    0

    0

    1

    key A|B1

    禁止

    禁止

    key A|B1

    数值块

    0

    1

    1

    key B1

    key B1

    禁止

    禁止

    读写块

    1

    0

    1

    key B1

    禁止

    禁止

    禁止

    读写块

    1

    1

    1

    禁止

    禁止

    禁止

    禁止

    读写块


    注:在传输配置状态下,必须用key A认证。

          假设对应扇区尾块Key B可读,则不得用作认证。假设读写器试图用灰色行的訪问控制条件以Key B认证不论什么扇区的不论什么块。卡将在认证后拒绝全部兴许存储器訪问。




  • 相关阅读:
    MP3 Lame 转换 参数 设置(转)
    数据库SQL优化大总结之 百万级数据库优化方案(转)
    IndexedDB:浏览器里内置的数据库(转)
    【译】微型ORM:PetaPoco【不完整的翻译】(转)
    'NoneType' object has no attribute '__getitem__'
    关于python的整形(int)自动转长整形(long)的问题
    1-redis使用笔记
    Flask deployment on gunicorn with flask script
    Celery从入门到放弃
    SELECT中的CAST
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5145461.html
Copyright © 2011-2022 走看看