Mifare认证

Posted

技术标签:

【中文标题】Mifare认证【英文标题】:Mifare authentication 【发布时间】:2013-09-16 09:42:33 【问题描述】:

假设我想向 Mifare Classic 进行身份验证。

我如何知道要发送到卡的确切 APDU 类型?

示例。

这段代码:

bcla = 0xFF;
bins = 0x86;
bp1 =  0x0;
bp2 =  0x0; // currentBlock
len =  0x5;

sendBuffer[0] = bcla;
sendBuffer[1] = bins;
sendBuffer[2] = bp1;
sendBuffer[3] = bp2;
sendBuffer[4] = len;
sendBuffer[5] = 0x1;                // Version
sendBuffer[6] = 0x0;                // Address MSB
sendBuffer[7] = currentBlock;
if(keyradioButton->Checked==true)   // Address LSB
     sendBuffer[8] = 0x60;              // Key Type A
else if(keynumberradioButton->Checked ==true)
    sendBuffer[8] = 0x61;               // Key Type B
sendBuffer[9] = keynumber;          // Key Number

sendbufferlen = 0xA;
receivebufferlen = 255;

//Invoke the Transmit command
retval = SCardTransmit(hCard,  // A reference value returned from the SCardConnect function.
                                 &sioreq, 
                              sendBuffer,  // Send buffer
                           sendbufferlen,  // Send buffer length
                                 &rioreq, 
                           receiveBuffer,  // Receive butter
                      &receivebufferlen);  // Length of received buffer

是一个尝试向 Mifare Classic 进行身份验证的示例程序。 我的问题基本上是,我怎么知道要向卡发送什么样的 APDU?例如,我怎么知道sendBuffer 中应该包含什么?

【问题讨论】:

很抱歉,但我无法理解这个问题......你能描述一下这个问题吗? @vikky:嘿,vikky,请看编辑 MIFARE Classic 本身不使用 APDU。 APDU 的使用是读卡器的扩展:它在内部将 APDU 转换为实际的 MIFARE Classic 命令。为了澄清这个问题,我建议您添加您正在使用的读卡器的品牌和类型 @NFCguy:我很惊讶 Classic 不使用 APDU。你能给我介绍一些解释这一点的文档吗?以及您提到的读者将 APDU 转换为经典命令的内容?我想了解更多相关信息。 @NFCguy:是的,我看过了。实际上,没有提到我用于身份验证的完整 APDU 命令。文档只是说例如 60h 是 command 用于使用密钥 A 进行身份验证。其他类型的 Mifare 卡也是如此(例如,Plus 等)吗?他们不接受 APDU 的? 【参考方案1】:

在 Mifare Classic 1K 标签中有 16 个扇区,每个扇区包含 4 个块,每个块包含 16 个字节。

    扇区 0 包含块 (0,1,2,3) 扇区 1 包含块 (4,5,6,7) 扇区 2 包含块 (8,9,10,11) 扇区 3 包含块 (12,13,14,15)....

在读取或写入块之前,您必须使用该扇区的密钥 A 或密钥 B 验证其相应的扇区。身份验证完成后,您可以读取或写入。使用此命令,您可以使用 KEY A(60) 验证扇区 0

byte[] authenticationByte = new byte[10];  

authenticationByte = new byte[]  (byte) 0xFF, (byte) 0x86, (byte) 0x00,
 (byte) 0x00, (byte) 0x05, (byte) 0x00,(byte) 0x00, (byte) 0x04, 
                                    (byte) 0x60,(byte) 0x00 ;

当身份验证成功时,您将获得 90 00。那是成功消息。否则响应为 63 00 ,表示身份验证失败。身份验证完成后,您可以读取块 (0,1,2,3),因为扇区 0 包含 4 个块,它们是块 (0,1,2,3)。

更多详情请阅读this Answer。对不起英语不好

【讨论】:

【参考方案2】:

阅读此Article。在这里您将找到与 Mifare 卡通信的 APDU 结构...

【讨论】:

谢谢维基。似乎密钥也存储在 阅读器上? 是的,在认证之前,您必须在阅读器中加载密钥。 谢谢。另外看看 NFC 人的反应,当他说 Mifare Classic 不使用 APDU 时,我很惊讶....

以上是关于Mifare认证的主要内容,如果未能解决你的问题,请参考以下文章

NFC的mifare卡与ntag具体区别

2. OSPF认证

模组使用之常见认证,CCC认证,SRRC认证,ROHS认证,NAL认证

短说社区论坛系统之用户认证

AWS认证权威考经(助理级认证篇)

79- drf三大认证的配置及使用方法