7

我可能正在开展一个项目,将现有的 Desfire 卡(用于访问付费服务)替换为支持 NFC 的移动设备。任何人都可以向我指出任何资源以帮助我了解 a) 将 Desfire 卡的数据复制到移动设备上,以便它可以代替卡,以及 b) 应用程序提供 NFC 数据以呈现给读卡器就像一张卡片。所有相关的密钥和访问权限都将由发卡机构提供(如果项目继续进行),但我很想提前了解这个过程。

我还需要了解 Android NFC API 对 Desfire 的支持程度,因为据我所知,它只能正确支持 Classic。http://developer.android.com/reference/android/nfc/tech/package-summary.html

4

4 回答 4

16

NFC 家伙的回答非​​常好,但有点过时,所以我决定添加更新。

从 KitKat (4.4) 开始,您现在可以模拟没有安全元素的卡片。

它被称为基于主机的卡仿真 ( Hce ),您可以使用它来仿真 ISO 14443 A 型卡。就像 desfire 卡一样。

有两个小警告:

  • 您的阅读器必须在轮询“卡”后发布一个 ISO SELECT (aid),并带有您选择的固定应用程序 id (aid)。此 AID 必须在您的应用清单中注册。Android 将拦截此 ISO SELECT,阅读帮助,并仅在它与您的清单中的那个匹配时才给您打电话。然后你可以交换任何东西,它甚至不必是 ISO APDU(ISO 14443 封装由 android 完成)。所以举个例子,如果你想,你甚至可以模拟desfire的challenge response authentication (0xA0 key_num, 0xAF challenge, 0xAF response, 0x00 session_key)

  • 你不能依赖 UID(但你不依赖,对吧?无论如何这是一种不好的做法,所以没有人这样做......对吗?:))因为它是随机的,并且它不断变化(而不是在单个会话,当然,但是...)

我们正在模拟我们的 desfire 卡,我们必须做的唯一更改是从最初的 desfire 选择应用程序 (0x5A) 切换到 ISO SELECT (0x00 0xA4 0x04)。

模拟身份验证(挑战-响应的事情)可能很棘手,但我们已经“以相反的方式”完成了它(使用 NFC 读取 desfire 卡),所以对我们来说很容易。

如果您依赖卡 UID 进行身份验证.. 现在是更改它的好时机 :)

于 2014-11-06T08:57:59.620 回答
16

MIFARE DESFire 符合 ISO 14443-4 标准。Android 中对 ISO 14443-4(以及 MIFARE DESFire)的支持由IsoDep该类完成。transceive()您可以使用该类的方法发送任何 DESFire 命令。

除此之外,DESFire 可以配置为符合 NFC 论坛类型 4 标签。在这种情况下,Android 会自动从标签中读取任何 NDEF 消息,并在一个意图中调度它。因此,您可以在扫描特定标签时让您的应用程序自动启动。(Android 也可以将 DESFire 芯片格式化为包含 NDEF 并将 NDEF 数据写入其中。)

用移动 NFC 设备替换 DESFire 卡是另一回事。当前可用的 Android 设备上的卡模拟由连接到 NFC 芯片的嵌入式安全元件完成。Android 应用程序无法模拟卡(也没有用于此的 API),并且安全元件无法模拟 DESFire 芯片。此外,没有开放的 API 可以从应用程序访问安全元件。

Android NFC 应用程序可以通过 NFC 与另一台设备(不是卡)进行通信的唯一方法是使用Android Beam。然而,这是与卡和读卡器之间使用的协议不同的协议。

于 2012-07-17T14:20:00.607 回答
1

鉴于您的情况,我会说 Android SDK 足以解决您的问题。您的案例有两个部分:

  1. 从现有卡片中读取信息。
  2. 使用您从卡片中读取的信息制作应用程序。

第1部分:

您唯一需要担心的是阅读 DESFire 卡。如果 DESFire 卡中的信息以 NDEF 格式存储,事情就变得更简单了。

Ndef是 SDK 中的一个类,可用于检索NdefMessage类型中的信息,然后您可以使用该类型将检索到的信息保存到您的存储设施中,无论是本地数据库、远程数据库还是仅在应用程序内存中。

以上假设卡不受保护。如果是,那么您必须使用transceive函数来使用原始字节通信进行交互。这将为要读取的其余信息解锁。从这里您可以读取 NDEF 记录。

第 2 部分:我的建议是跳过它的卡仿真方面。你会在某个时间点碰壁。

如果将现有解决方案中一直在读卡的设备连接到 android 设备,那么 Android Beam 就是要走的路。这不过是 Android App 到 Android App 的通信!Android 已经完成了繁重的工作,因此您的大部分工作都将变得很容易。

卡上的信息可以存储为 ndef 消息并通过梁发送,或者您可以简单地创建自定义对象并通过它发送。

于 2012-07-18T07:04:57.060 回答
0

您可能想查看 Mifare4Mobile,该计划旨在从 Mifare 卡过渡到 NFC 设备:

http://mifare4mobile.org/

于 2012-07-20T18:19:10.190 回答