首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能像读取RFID标签一样读取iPhone的NFC芯片?

有没有可能像读取RFID标签一样读取iPhone的NFC芯片?
EN

Stack Overflow用户
提问于 2015-08-04 08:10:47
回答 3查看 11.1K关注 0票数 6

我知道iPhone6不可能读取RFID标签,我也知道iPhone只允许在iPhone Pay中使用近场通信,但能像读取RFID标签一样读取iPhone6的近场通信芯片吗?

也就是说,通过使用带有Arduino或Raspberry Pi的RFID读取器,RFID读取器是否能够检索任何类型的被动信息,如芯片的唯一ID或类似性质的东西?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-04 08:16:42

当你按住大拇指尝试苹果支付时,似乎可以检测到来自iPhone的信号。但是,它会在每次按下时发出不同的ID号。这使得几乎不可能做任何与安全相关的事情。

这是一个让它工作的人的视频。https://www.youtube.com/watch?v=fhpMVFte2mE

因为iPhone每次都会吐出不同的NFC标签号。阅读器被设置为使用任何标签,这对于像上面视频中的锁这样的安全应用程序是不好的。

票数 6
EN

Stack Overflow用户

发布于 2015-08-07 13:54:20

正如Michael Gillett已经写过的,防冲突标识符(经常用作RFID中的ID )是动态的,并且在每次激活iPhone中的安全元件时改变。您可以尝试访问安全元素上的EMV支付卡(“标记化”信用卡)。此信用卡至少包含PAN (标记化的主帐户号),并且可能还包含用于签名验证的公钥。该信息应该是静态的(即使在标记化的情况下也是如此),因此可以用来识别设备。

看看非接触式支付系统(http://emvco.com)的EMV规范,了解如何访问支付应用程序。基本上,您将执行类似以下的操作:

对于包含PAN/ response

  • SELECT公钥的记录,在select payment

  • (by AID)

  • READ RECORD (文件+记录号)中选择PPSE

  • Find AID of payment application (按AID)

  • READ record (文件+记录号)

不过,你需要一些非接触式智能卡读卡器来发送必要的APDU命令。仅执行防冲突以获得ID的RFID读取器是不够的。然而,对于Arduino和RPI,都有这样的读取器(例如NFC屏蔽)。

票数 8
EN

Stack Overflow用户

发布于 2019-10-11 03:10:06

使用PN532板。使用this library简化基于Arduino主机的工作。

定义连接。

代码语言:javascript
复制
#include <Arduino.h>
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>

PN532_SPI intfc(SPI,5);
PN532 nfc(intfc);

检查是否有卡/电话:

代码语言:javascript
复制
success = nfc.inListPassiveTarget();
   if (success) { ...

定义通信缓冲区:

代码语言:javascript
复制
   uint8_t apdubuffer[255] = {};
   uint8_t apdulen;

并发送SELECT PPSE命令:

代码语言:javascript
复制
apdulen = 255;
success2 = sendAPDU(0x00, 0xA4, 0x04, 0x00, "2PAY.SYS.DDF01", 0x00, &apdubuffer[0], &apdulen);

如果成功,则:

代码语言:javascript
复制
//fromHEX("A0000000031010") - VISA
//fromHEX("A0000000041010") - MC
success2 = sendAPDU(0x00, 0xA4, 0x04, 0x00, fromHEX("A0000000031010"), 0x00, &apdubuffer[0], &apdulen);

并且您可以很好地读取卡的内部文件(SFI/REC),例如:

代码语言:javascript
复制
success2 = sendAPDU(0x00, 0xB2, rec_num, (sfi_num << 3)+4, 0x00, &apdubuffer[0], &apdulen);

最好是找到PAN/ICC公钥,实际上,它对于卡来说是唯一,但在PAN/ICC之前会出现许多字节,imho非常独特,足以执行身份验证

毕竟,你需要这个重载:

代码语言:javascript
复制
bool sendAPDU(byte cla, byte ins, byte p1, byte p2, String aid, byte le, uint8_t *response, uint8_t *resp_len)
{
  uint8_t cmdbuf[255];
  memset(&cmdbuf[0],0,255);
  cmdbuf[0] = cla;
  cmdbuf[1] = ins;
  cmdbuf[2] = p1;
  cmdbuf[3] = p2;
  cmdbuf[4] = aid.length();  
  int i;
  for (i=0;i<aid.length();i++)
    cmdbuf[5+i] = aid[i];
  cmdbuf[6+i] = le;
  //printbuf((char*)&cmdbuf[0],5+aid.length());
  return nfc.inDataExchange(&cmdbuf[0], 5+aid.length(), response, resp_len);
}

bool sendAPDU(byte cla, byte ins, byte p1, byte p2, uint8_t* aid, byte le, uint8_t *response, uint8_t *resp_len)
{
  uint8_t cmdbuf[255];
  memset(&cmdbuf[0],0,255);
  cmdbuf[0] = cla;
  cmdbuf[1] = ins;
  cmdbuf[2] = p1;
  cmdbuf[3] = p2;
  cmdbuf[4] = aid[0];  
  int i;
  for (i=0;i<aid[0];i++)
    cmdbuf[5+i] = aid[i+1];
  cmdbuf[6+i] = le;
  //printbuf((char*)&cmdbuf[0],5+cmdbuf[4]);
  return nfc.inDataExchange(&cmdbuf[0], 5+cmdbuf[4], response, resp_len);
}

bool sendAPDU(byte cla, byte ins, byte p1, byte p2, byte le, uint8_t *response, uint8_t *resp_len)
{
  uint8_t cmdbuf[255];
  memset(&cmdbuf[0],0,255);
  cmdbuf[0] = cla;
  cmdbuf[1] = ins;
  cmdbuf[2] = p1;
  cmdbuf[3] = p2;
  cmdbuf[4] = le;
  //printbuf((char*)&cmdbuf[0],5);
  return nfc.inDataExchange(&cmdbuf[0], 5, response, resp_len);
}

还有这个:

代码语言:javascript
复制
/*
  Funny, non-C approach to return array from a function
  Returns ptr to global static buf... 
  Just to improve readability of sendAPDU() function...
  Not really needed in real app,
*/
uint8_t fromHexBuf[255];  
uint8_t* fromHEX(String hexs) {
  int i = hexs.length()/2;
  fromHexBuf[0] = i;
  int x=0;
  while (i) {
    char buf[3];
    char *tmp;
    buf[0] = hexs[2*x];
    buf[1] = hexs[2*x+1];
    buf[2] = 0;    
    uint8_t v = strtol(&buf[0], &tmp, 16);
    //Serial.printf("-> %s = %x\n", buf, v);
    fromHexBuf[x+1] = v;
    x=x+1;
    i--;
  }
  return &fromHexBuf[0];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31798709

复制
相关文章

相似问题

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