JavaCard可以模拟MIFARE Ultralight或NTAG NFC标签吗?

5
我想编写一个Java Card应用程序,使其响应NFC读卡器,就像普通的MIFARE Ultralight或NTAG NFC标签一样。
我知道MIFARE协议是专有的,可能会更加困难,但我肯定可以实现NTAG协议的仿真。
如果我匹配NTAG规范并响应正确的APDU,那么我肯定可以模拟NTAG吗?
原问题的更新
我认为我没有正确地提出我的问题。实际上,我想做的不是仿真特定的标签。我正在尝试使用Java Card供电的卡片,使用新的Core NFC API向智能手机(如Android或Apple iPhone)提供动态信息。请注意,据说此API支持类型1到5的标签。我想编写一个Java Card应用程序,可以在非接触式智能卡上运行,并允许(单向)与智能手机进行通信。
我的问题是:我如何确定来自Core NFC API的APDU流,以便编写一个适当响应的应用程序?
2个回答

6

不,这是不可能的。MIFARE Ultralight、NTAG和其他NFC Forum Type 2标签都是在ISO/IEC 14443-3A(也称为NFC-A)定义的防冲突和帧协议之上运行的。

Java Card应用程序(一般情况下)使用APDU命令进行通信(这是ISO/IEC 7816-4中定义的一个协议层)。Java Card运行时环境只会将APDU命令传递给应用程序。非接触式智能卡使用ISO-DEP半双工传输协议(如ISO/IEC 14443-4中所指定)在其中一种ISO/IEC 14443-3(也称为NFC-A和NFC-B)定义的帧协议之上交换这些APDU命令。

+-------------------------+  +-------------------------+
| MIFARE Ultralight/NTAG  |  | 刷卡式Java卡            |
+-------------------------+  +-------------------------+
+-------------------------+ | 命令:APDU | | (ISO/IEC 7816-4) | +-------------------------+ +-------------------------+ | 命令:专有或NFC Forum Type 2ary | ISO-DEP | | | (ISO/IEC 14443-4) | +-------------------------+ +-------------------------+ | Framing: NFC-A | | Framing: NFC-A或NFC-B | | (ISO/IEC 14443-3 A) | | (ISO/IEC 14443-3 A/B) | +-------------------------+ +-------------------------+ | ... | | ... | +-------------------------+ +-------------------------+

因此,尽管这两种技术共享通用的协议层,但Java卡应用程序只能交换APDU命令,不能直接控制许多较低的协议层。

编辑(基于ErikM's remark):

虽然在Java Card上模拟NFC Forum Type 2标签不可能(除非您的智能卡平台有专门的硬件支持,但我认为目前不存在这样的支持),但是您可以在任何Java Card非接触式智能卡上轻松模拟NFC Forum Type 4标签。因此,如果您的目标是模拟一个向智能手机呈现NDEF消息的NFC标签,则可以采用此方法。甚至有开源实现的应用程序,例如。


感谢您的有趣回答。我现在已经更新了我的问题,使其更加具体。 - jim
1
@conor 那个问题的答案基本上就是ErikM所写的和我在我的回答底部编辑的内容。你需要实现一个类型4标签。 - Michael Roland

2

虽然如Michael Roland所解释的那样,NTAG 2xx是不可行的,但可以根据T4T编写一个applet。不确定是否值得这样做,因为NTAG 2xx、DESFire或NTAG 413 DNA可能都要便宜得多。当然,作为技术挑战,这可能值得一做。


感谢您的有趣回答。我现在已经更新了我的问题,使其更加具体。 - jim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接