发送数据,使用 HCE,还是使用安全元素? (Android,科特林,Mifare 1k)

Sending data, using HCE, or using secure element? (Android, Kotlin, Mifare 1k)

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

我有这种reader/writer:https://www.evelta.com/er302-high-frequency-nfc-writer-usb/

在论坛和 Whosebug 问题上四处寻找后,我发现这篇文章是最好的例子:

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

我实现了 HCE 部分,运行 程序,reader 相信我的 phone 是 Mifare 芯片,到目前为止一切顺利。

我的问题:

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

然而我什至无法验证。

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

总而言之,我只需要做一件事:获取数据并将其发送到 reader。

我意识到这是一个像幻想一样的童话故事,相信它听起来很简单,不过,我希望有办法做到。

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

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

问题是您不能在 Android 上使用 HCE 来模拟 Mifare Classic 1K (https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf) as this is a custom Type NFC card. As HCE is about emulating Type 4 cards. See https://developer.android.com/guide/topics/connectivity/nfc/hce#SupportedProtocols

下图有助于理解类型。

你可以从它的数据表中看到这一点,它没有任何地方谈论 AID 和标准 Type 4 NFC 命令

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

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

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

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

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

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