首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以锁定命令,保护克隆,或者其他应用程序不能擦除MIFARE卡1k?

是否可以锁定命令,保护克隆,或者其他应用程序不能擦除MIFARE卡1k?
EN

Stack Overflow用户
提问于 2020-01-09 09:42:06
回答 3查看 1K关注 0票数 7

我想这样做,以保护卡的可擦除或复制卡。我读了很多文档,有些告诉用户第四个块可以设置读写权限。

@Michael

MIFARE卡的每个扇区的认证密钥和访问条件位于该扇区的最后一块(扇区拖车)。可以使用常规写命令使用新的访问条件和身份验证密钥更新此块。

扇形拖车的样子如下:

代码语言:javascript
复制
+-----------------------------+--------------+----+-----------------------------+
|  0 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 | 10 | 11 | 12 | 13 | 14 | 15 |
+-----------------------------+--------------+----+-----------------------------+
|            Key A            | Access Bits  | GP |            Key B            |
|          (6 bytes)          |  (3 bytes)   | B  |          (6 bytes)          |
+-----------------------------+--------------+----+-----------------------------+

因此,访问位位于字节6-8中,如下所示:

代码语言:javascript
复制
        +-------+-------+-------+-------+-------+-------+-------+-------+
        | Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 6: | nC2_3 | nC2_2 | nC2_1 | nC2_0 | nC1_3 | nC1_2 | nC1_1 | nC1_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 7: |  C1_3 |  C1_2 |  C1_1 |  C1_0 | nC3_3 | nC3_2 | nC3_1 | nC3_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+
Byte 8: |  C3_3 |  C3_2 |  C3_1 |  C3_0 |  C2_3 |  C2_2 |  C2_1 |  C2_0 |
        +-------+-------+-------+-------+-------+-------+-------+-------+

Where nCx_y = not Cx_y and "C1_x, C2_x, C3_x" is the access condition for block x:

C1_3, C2_3, C3_3: sector trailer (block 3 in this sector)
C1_2, C2_2, C3_2: block 2 in this sector
C1_1, C2_1, C3_1: block 1 in this sector
C1_0, C2_0, C3_0: block 0 in this sector

我是如何在我正在进行的项目中执行这个任务的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-05 11:40:00

最后,我解决了这个问题

为此,我们需要更改第四块上每个扇区的访问位。

例如,第5区的

就像第5区一样,我们需要改变它的23块的访问位

我们得先确认第5区.

默认键是

代码语言:javascript
复制
byte keya[] = { (byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF};

那就是000000000000FF078069FFFFFFFFFFFF

第一个位6用于键A,为000000000000,最后为his用于键B,为FFFFFFFFFFFF十六进制字符串。

FF078069十六进制字符串是访问位。

因此,为了改变这一点,我们需要第一次像这样实现,我们需要使用默认密钥进行身份验证。

代码语言:javascript
复制
  MifareClassic mfc = MifareClassic.get(tag);

        try {
            mfc.connect();
            auth = mfc.authenticateSectorWithKeyA(5, 
 MifareClassic.KEY_DEFAULT);
        if(auth)
        {
         String nkeya = "key123";// 6 length only
                nkeya = toHex(nkeya).toUpperCase();
                nkeya = nkeya.substring(28,40);

                String nkeyb = "key123"; // 6 length only
                nkeyb = toHex(nkeyb).toUpperCase();
                nkeyb = nkeyb.substring(28,40);

                String nkey = nkeya+"FF078069"+nkeyb;
                int len = nkey.length();

                byte[] nkeyab = new BigInteger(nkey, 16).toByteArray();
                // 5 is sector and 5*4+3 is fourth block of sector 5
                mfc.writeBlock((5*4)+3,nkeyab);

}
catch(Execption e)
 {
 }

成功写入保护后的默认身份验证失败,因此我们需要使用我们创建的访问密钥进行身份验证

代码语言:javascript
复制
try {
 MifareClassic mfc = MifareClassic.get(tag);
 String key = getKeya();

 key = toHex(key).toUpperCase();
  int len = key.length();
   key = key.substring(28,40);
   keya = new BigInteger(key, 16).toByteArray();

  //for key A or for Keb b


            mfc.connect();
            auth = mfc.authenticateSectorWithKeyA(5, keya);
        if(auth)
        {


  byte[] readblock4=    mfc.readBlock(20);

  }
  }
 catch(Exeption e)
 {

 }
票数 1
EN

Stack Overflow用户

发布于 2020-01-09 09:49:58

你不能保护一张卡在自己身上复制。(这种方法很容易应用于这项技术)

可以做的是对所有块进行哈希,包括存储在card.In上的UID,您的程序只需比较数据哈希和存储的哈希。

要在python中实现非常基本的散列并将其存储在块中,可以使用双重伪随机:

代码语言:javascript
复制
def CRYPT_hashage(data,UID):
    seed(str(data)+str(UID))
    seed(random())
return str(random()).replace("0.","")[:8]

它可以防止在另一张牌上发出叮当声。用户仍然可以修改自己的卡。但是你可以用同样的技术对“敏感者”数据进行散列。

在这2种证券之后,它只留下了“克隆在自己身上”的技术,例如:-你复制你的数据-你支付(一个无现金支付系统)-你把你的旧数据粘贴在你的卡上)。

防止这种情况的唯一方法是使用卡的UID作为主密钥将所有数据存储在服务器上。

有一张卡你可以更改UID。

票数 2
EN

Stack Overflow用户

发布于 2020-01-09 09:49:06

你可以用A键或B键保护每个扇区。

也就是说,Mifare经典卡的安全性在这一点上已经被破坏了。你不可能真的保护任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59661083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档