首页 > 解决方案 > 发送数据、使用 HCE 还是使用安全元件?(Android、Kotlin、Mifare 1k)

问题描述

我正在尝试实现模拟 Mifare One(1K/S50,ISO14443A)芯片的功能,以便能够使用具有 NFC 功能的手机而不是物理 Mifare 卡,或者如果可能仅将数据发送到读卡器。

我有这种类型的阅读器/编写器:https ://www.evelta.com/er302-high-frequency-nfc-writer-usb/

在浏览了论坛,stackoverflow 问题后,我发现这篇文章是最好的例子:

https://medium.com/the-almanac/how-to-build-a-simple-smart-card-emulator-reader-for-android-7975fae4040f

我实现了 HCE 部分,运行程序,读者认为我的手机是 Mifare 芯片,到目前为止一切都很好。

我的问题:

读完之后,我发现我不能 100% 模拟物理卡,所以我必须以某种方式在我的 APDU 响应中发送我想要的所有数据(我相信这是收发部分)。

但是我什至无法进行身份验证。

我试图寻找其他可能的解决方案:

所以总的来说,我只需要做一件事:获取数据并将其发送给阅读器。

我意识到这是一个童话般的幻想,相信它听起来很简单,但我希望有办法做到这一点。

如果我可以自己发送数据,而无需模拟 Mifare 或其他任何东西……毕竟重要的是卡上的数据,而不是芯片的类型,解决方案越简单越好。

对于可能的英语语法错误,我们深表歉意。

标签: nfcmifarehcenfc-p2psecure-element

解决方案


问题是您不能在 Android 上使用 HCE 来模拟 Mifare Classic 1K ( https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf ),因为这是自定义类型 NFC 卡。因为 HCE 是关于模拟 Type 4 卡。请参阅https://developer.android.com/guide/topics/connectivity/nfc/hce#SupportedProtocols

下图有助于理解类型。

在此处输入图像描述

您可以从它的数据表中看到这一点,它没有谈论 AID 和标准 4 型 NFC 命令

尽管 Type 2 和 Type 4 可以共享防冲突机制和读取 UID(这是该过程的一部分),但不共享任何其他访问方法。

供参考的 Type 4 规范位于http://apps4android.org/nfc-specifications/NFCForum-TS-Type-4-Tag_2.0.pdf

我已经看到一些 USB 读卡器提供其他卡类型的读卡器仿真,但不是 HCE,其中主机进行仿真而不是 NFC 硬件。

对 4 类卡或模拟卡的身份验证处理方式不同。

您可以模拟 MIFARE DESFire 卡,因为它是 4 类卡。

您的读卡器的规格没有很好地记录,它看起来非常“精简”,并且它不支持与非 Mifare Classic 卡通信所需的任何更高级别的协议。它可以支持它们,但由于 Mifare 协议是原始规范,它可能是旧设计并且仅支持 Mifare 协议。


推荐阅读