Android NFC API如何支持Mifare Desfire?

时间:2012-07-17 13:40:53

标签: android nfc mifare

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

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

4 个答案:

答案 0 :(得分:15)

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。然而,这是与卡和读卡器之间使用的协议不同的协议。

答案 1 :(得分:13)

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

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

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

有两个小警告:

  • 您的读者必须在使用您选择的固定应用ID(辅助)轮询" card",ISO SELECT(辅助)之后发布问题。此AID必须在您的应用清单中注册。 Android将拦截此ISO SELECT,阅读帮助,并且仅当它与清单中的那个匹配时才打电话给您。 然后你可以交换任何东西,它甚至不必是ISO APDU(ISO 14443封装是由android完成的)。因此,例如, 如果您想要 ,您甚至可以模拟desfire的质询响应身份验证(0xA0 key_num,0xAF质询,0xAF响应,0x00 session_key)

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

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

模拟身份验证(挑战 - 响应事物)可能很棘手,但我们已经完成了它,反过来" (使用NFC读取desfire卡),这对我们来说很容易。

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

答案 2 :(得分:1)

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

  1. 阅读现有卡片中的信息。
  2. 使用您从卡片中读取的信息制作应用程序。
  3. 第1部分:

    您唯一的担心就是阅读DESFire卡。如果DESFire卡中的信息以NDEF格式存储,则会使事情变得更加容易。

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

    以上假设卡未受保护。如果是,则必须使用transceive函数使用原始字节通信进行交互。这将解锁其他信息以供阅读。从这里你可以阅读NDEF记录。

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

    如果已经在现有解决方案中读取卡的设备连接到Android设备,那么Android Beam就是可行的方法。哪个只是Android App到Android App的通讯! Android已经完成了繁重的工作,所以你的大部分工作都很容易。

    卡上的信息可以存储为ndef消息并通过波束发送,或者您只需创建一个自定义对象并通过它发送。

答案 3 :(得分:0)

您可能需要关注Mifare4Mobile,这是一项旨在从Mifare卡过渡到NFC设备的计划:

http://mifare4mobile.org/