我想写一个响应NFC阅读器的Java Card小程序,好像它是一个常规的MIFARE Ultralight或NTAG NFC标签。
我知道MIFARE协议是专有的,可能会有点困难,但我必须能够实现对NTAG协议的仿真。
如果我匹配NTAG规范并响应正确的APDU,那么我肯定可以模拟NTAG吗?
更新至原始问题
我想我错误地问了原来的问题。我不打算模仿每个sé的特定标签。我实际上要做的是使用Java Card驱动的卡,以便能够使用新的Core NFC API向智能手机(如Android或Apple iPhone)提供动态信息。请注意,这个API据说支持1到5类型的标签。我希望能够编写一个可以在非接触式智能卡上运行的Java Card小程序,并允许(单工)与智能手机进行通信。
我想我的问题是:如何确定来自Core NFC API的APDU流量,以便我可以编写一个能够做出适当响应的applet?
答案 0 :(得分:5)
不,那是不可能的。 MIFARE Ultralight,NTAG和其他NFC论坛类型2标签在ISO / IEC 14443-3A(也称为NFC-A)中定义的防冲突和成帧协议之上运行。
Java Card小程序(通常)使用APDU命令(ISO / IEC 7816-4中定义的协议层)进行通信。 Java Card运行时环境仅将APDU命令传递给applet。非接触式智能卡在ISO-DEP半双工传输协议(ISO / IEC 14443-4中规定)之上交换这些APDU命令。反过来,该传输协议位于ISO / IEC 14443-3(也称为NFC-A和NFC-B)中定义的一种成帧协议之上。
+-------------------------+ +-------------------------+ | MIFARE Ultralight/NTAG | | Contactless Java Card | +-------------------------+ +-------------------------+ +-------------------------+ | Commands: APDUs | | (ISO/IEC 7816-4) | +-------------------------+ +-------------------------+ | Commands: Proprietary | | ISO-DEP | | or NFC Forum Type 2ary | | (ISO/IEC 14443-4) | +-------------------------+ +-------------------------+ | Framing: NFC-A | | Framing: NFC-A or NFC-B | | (ISO/IEC 14443-3 A) | | (ISO/IEC 14443-3 A/B) | +-------------------------+ +-------------------------+ | ... | | ... | +-------------------------+ +-------------------------+
因此,虽然两种技术共享通用协议层,但Java Card小程序只能交换APDU命令,无法直接控制大部分较低协议层。
修改(基于ErikM's remark):
虽然无法在Java Card上模拟NFC论坛类型2标签(除非您的智能卡平台上有专用的硬件支持---我认为目前不存在这种情况。),您可以轻松模拟任何Java Card非接触式智能卡上的NFC论坛类型4标签。因此,如果您的目标是模拟提供NDEF消息的NFC标记,例如智能手机,那么你可以采用这种方法。甚至还有这种applet的开源实现,例如
答案 1 :(得分:2)
虽然NTAG 2xx不可行,但正如Michael Roland上面所解释的那样,人们可以编写一个applet acc。到T4T。不确定是否值得努力,因为NTAG 2xx以及DESFire或NTAG 413 DNA都可能更便宜。当然,作为技术挑战,它可能值得做。