安卓和塞班NFC移动开发问答(FAQ)

8
让我们就NFC开发和技术在一个公共场所分享想法… 我欢迎您的任何评论 - 无论是关于Android或Symbian SDK还是关于NFC总体而言。
从我的角度来看,总的问题是我们可以开发什么,即我们可以使用NFC技术开发哪些应用程序并推向市场?我们作为开发人员如何获得收益并从NFC中受益?
我认为人们期望NFC将为开发人员开启无数服务和可能性 - 但这是真的吗? NFC与其他无线技术(BT,WiFi)之间的区别在于它已经具有主要用例 - 付款,交通票据和钥匙(建筑准入)。但是,所有这些用例都需要安全元素,其
要么由手机制造商控制,例如Google-请参见仅使用Nexus S上内置NXP SecureMX的Google Wallet(如果我们不想损害安全性,则很难更改这一点), 或者通过SIM卡上的UICC(在Android和Symbian /和MeeGO /电话上)访问;此处必须与运营商达成协议。
但是,在一个国家中拥有3或4个运营商,对于一个中等规模的公司,他们允许在SIM卡上运行其应用程序的可能性有多大?还有更广泛的解决方案呢?上述所有服务/用例都需要所有参与者的大量协调和良好建立的生态系统(银行,MNO,NFC芯片制造商,手机制造商,TSM…)。
仍然存在点对点应用程序,标签阅读等选项 - 但是手机中已经内置了许多功能,因此这看起来并不像金矿…
我认为,如果手机包括NFC-WI(S2C)-具有由ECMA指定的接口(SD卡协会已经指定了支持NFC-WI的微型SD卡),这将有可能允许购买具有安全元素的SD卡适用于任意公司…但它还没有进入市场,而且看起来很快也不会出现。
您对NFC和移动电话开发的看法和经验是什么?
2个回答

14
为了更具实用性,不仅仅是理论,我已经在xda-developers上发布了一些补丁,以在目前唯一支持NFC的Android手机(Nexus S)上启用卡模拟模式。您和其他人可能会对自己玩弄卡模拟模式感兴趣。请注意,这仅用于实验目的。
它们适用于AOSP源代码的gingerbread版本2.3.4_r1。他们允许:
  • 在Nexus S上启用NFC卡模拟模式。此模式始终启用。
  • 禁用读卡器模式,只允许卡模拟工作。
  • 选择外部安全元素(在UICC中)而不是嵌入式元素(在SmartMX芯片中)。
  • 尽管与此无关,但是去除了蓝牙可发现性选项的时间限制。

到目前为止,我所了解的关于Android上NFC卡模拟的内容:

  • 默认情况下,股票映像禁用卡模拟,并需要固件修改。 Nfc系统应用程序和libnfc-nxp系统库是要查看的位置。
  • Nexus S内部的嵌入式SmartMX芯片呈现为双重智能卡。一个可编程的(允许在其上安装cardlets)和一个4K Mifare的卡。
  • 4K Mifare卡具有默认密钥,因此可以从外部读取/写入。
  • 可编程卡据说与GP兼容,但除了谷歌以外,没有人可以操作它,因为访问密钥不是公开的。
  • Nexus S支持SWP并允许在UICC内部使用安全元素进行操作。
  • 应用程序不能直接访问任何安全元素的内容。一方面,嵌入式SE是无法访问的,因为我们不知道密钥。另一方面,外部元素可通过SWP(连接到NFC控制器)从外部访问,但内部不可访问,因为据我所知,SIM插槽未通过其他方式连接到NFC控制器。这让我们只有一条路,基带处理器。然而,BB固件是专有的且由制造商控制。三星在其BB固件中未实现3GPP TS 27.007技术规范与其进行交互。
  • 对外部SE的OTA访问应该是可能的,这取决于MNO。其中一些可能提供TSM服务,以允许第三方访问UICC内的SE。

顺便提一下,你提到的技术(NFC-WI)已经在Nexus S中使用,用于将NFC控制器与嵌入式安全元素相互连接。

更新

总结回答Sten的问题:

由于Mifare 4K区域具有默认密钥,任何使用外部NFC读卡器的人都可以更改密钥并在那里安全地存储值,这是正确的吗?你尝试过吗?这会有什么困难吗?

简单回答是是的,我从外部读卡器访问了Mifare 4K。我还能够修改默认密钥。困难来自于修改系统源代码并自己构建自定义固件。

外部NFC读卡器是访问Mifare空间的唯一方式吗?

理论上不是。另一种选择是向SIM发送包含要在Mifare卡上执行的Mifare命令的APDU。

例如,Android手机上安装的应用程序是否可以使用某些API(通过NFC控制器和NFC-WI路径)读/写一些数据到Mifare 4K? seek-for-android 可以提供帮助吗?

目前不行。虽然你可以使用seek-for-android补丁修改AOSP源代码(我自己做过),但你的应用程序仍将与原始手机崩溃。原因是它们尚未实现3GPP TS 27.007技术规范,该规范允许应用处理器直接向SIM(UICC)发送APDU。

然而,隧道尽头可能会有一些希望,因为法国的citizy项目已经在使用安卓手机的安全元素模式,采用了UICC安全元素方法。事实上,现在正在使用一个改进的三星Galaxy SII型号,并且新的宏碁Liquid Express也很快就会推出,以集成到citizy中。这些手机必须将所需的TS 27.007规范实现在它们的基带处理器固件中。至于应用程序处理器,我不知道他们是否采用了G&D路径的SEEK-for-android还是Insecure的OpenNFC。作为法国人,我会把赌注全压在后者上。

嗨,不错的贡献:简而言之,除非Google与相应公司分享密钥或通过TSM租用空间,否则无法访问Mifare 4K——我认为这对于一些公司在理论上是可能的,因为仍然应该有很多可用的自由扇区(除非Google Wallet占用了全部3440个字节)。但是,即使获得Google的许可,在这种情况下(即在内置SmartMX智能卡上安装cardlets),我不确定是否可以通过OTA实现。 待续 - STeN
另一种选择是SIM卡——可以通过SWP或直接(BB)通过USB或类似的方式通过NFC访问它——但要在SIM卡上上传程序,有与内置安全元件相同的限制......这让我们只剩下Micro SD卡了。 - STeN
1
好的,你不能从手机访问Mifare 4K,但可以通过外部RFID读卡器访问(密钥具有默认值)。如果你指的是OTA正常的MNO OTA,我认为它无法以这种方式访问,因为OTA旨在访问SIM卡而不是手机内部本身。 - Fernando Miguélez
1
就我所了解的使用 Nexus S 进行实验,SWP 只用于在无线电通信中连接 UICC <-> NFC 控制器。该通道(我还没有找到如何)不能从应用程序处理器访问。通过 NFC 控制器从应用程序处理器访问 SE 的唯一“路径”是 NFC-WI 接口,该接口专门用于嵌入式 SE 通信。从应用程序处理器访问 UICC 的唯一推测方式是通过基带处理器(已连接到 UICC),必须实现适当的 AT 命令以导出该功能。 - Fernando Miguélez
如果您通过上述修改启用了卡模拟模式,则无法同时使用UICC / SmartMX的卡模拟。问题是:如何告诉UICC在不更改程序的情况下禁用卡模拟?在我看来,这是一个死胡同。 - Nils Pipenbrinck
您可以使用嵌入式SmartMX SE或UICC内部的外部SE来处理卡模拟。虽然不能同时进行,但是通过提供的补丁,您可以指定是否优先选择可用的外部SE或嵌入式SE。 - Fernando Miguélez

2
为了继续讨论,我将概括一下:NXP SmartMX 微控制器由两个独立的安全元件组成。第一个可编程,运行某些操作系统(例如 MULTOS 或 Sm@rtCafe 或其他操作系统)和 JavaCard 虚拟机,但它被锁定,生产访问密钥仅由 Google 或 TSM 管理。这里没有办法安装 JavaCard 应用程序进行测试,因为无法为测试目的解锁安全元素。
另外,即使技术上可能存在利用 SIM 卡的方法,商业应用涉及与移动网络运营商的交易。让我们暂停一下,看看似乎最有前途的 Mifare 4K:
由于 Mifare 4K 区域具有默认密钥,任何使用外部 NFC 读卡器的人都可以更改密钥并在其中安全存储值 - 是这样吗?你试过了吗?这是否有任何困难?
使用外部 NFC 读卡器是访问 Mifare 存储空间的唯一方式吗?例如,安装在 Android 手机上的应用程序是否可以使用某些 API(通过 NFC 控制器和 NFC-WI 通道)读写 Mifare 4K 中的一些数据?例如, can e.g. seek-for-android 有帮助吗?
谢谢 STeN

我怀疑这不是我们喜欢的格式,在问答网站上。(不是讨论论坛!) - Arjan
2
Mifare4K已经走到了尽头,因为除了NXP家族之外,没有其他的NFC控制器支持这种标签。这并不是NFC标准所要求的,并且NXP还希望对他们破解的Crypto-1算法进行许可。因此,所有我所知道的即将推出的NFC芯片都不支持Mifare经典标签。 - Nils Pipenbrinck

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