十问Android NFC手机上的卡模拟(转)

1, 问:能否在AndroidNFC手机上实现卡模拟?

答:在技术上可行,但是,对一般开发人员来讲,目前看来仅仅是技术上可行:(

2, 问:具体如何实现呢?

答:有两种方式:一种是基于硬件的,被称为虚拟卡模式(Virual Card Mode);一种是基于软件的,被称为主机卡模式(Host Card Mode)。

在虚拟卡模式下,需要提供安全模块SE,NFC芯片作为非接触通讯前端,将从外部读写器接收到命令,转发到SE,然后由SE进行回复。

外部读写器 <---> NFC芯片 <---> SE。

而在主机卡模式下,不需要提供SE,而是由在手机中运行的一个应用完成SE的功能。

外部读写器 <---> NFC芯片 <---> 主机上的应用

3, 问:SE是个什么东西,一般手机上有吗?

答:SE可以理解成一个CPU卡,一般是带有JAVA虚拟机的CPU卡,即JAVA卡。带有NFC芯片的手机一般都带有SE(也可能有例外),例如GOOGLE NEXUS手机的PN65N,就是PN544芯片加SmartMX安全模块。此外,SE也可以是特殊的SIM卡或SD卡。

4, 问:我要做基于硬件的卡模拟,如何实现?

答:首先开发在SE中运行的程序,即一个JAVA APPLET,它负责将从NFC芯片接收到命令进行解释,处理和回复。然后,需要开发一个主机应用程序,能够将APPLET下载到SE中,并激活运行。当然,如果是完整的移动支付系统,还要包括后台应用,TSM等

5, 问:SE如何与主机通信?如何才能将程序下载到SE呢?

答:根据SE硬件的不同,SE与主机的硬件接口也有所不同。对内置的SE,一般是NFCWI接口,而SIM和SD卡可能是SWP接口。应用接口协议是ISO7816-4,即CPU卡APDU命令。熟悉CPU卡的都知道,没有密钥,根本无法完成对卡的写操作。因此需要SE的操作密钥。但不幸的是,这些密钥都掌握在手机厂商(内置SE的情况),例如三星,HTC,或移动运营商(SIM的情况),或者银行等安全模块提供商(SD卡的情况)手中,一般开发人员是得不到这些权限的。

6, 问:那么没有密钥的情况下,基于硬件能做到什么程度呢?

答:目前看来,对SE进行只读访问应该是可能的。例如在安装GOOGLE钱包后,在SE中会创建GOOGLE钱包的APPLET,我们可以通过程序选择该APPLET并发送一些查询命令。仅此而已…

7, 问:如何实现基于软件的卡模拟?

答:目前,官方Android版本不支持,可以通过刷第三方ROM实现基于软件的卡模拟,例如Cyanogenmod。(具了解,Android4.4 KitKat能支持NFC软件卡模拟,支持ISODEP类型(CPU卡),UID为随机ID,不能在关机和关屏幕下使用,通过AID路由可以与硬件卡模拟应用程序共存。)

8, 问:卡模拟一般能模拟什么卡?

答:取决于软件和硬件双方的限制。一般虚拟卡模拟主要取决于硬件,通常支持TYPE A/B的卡,对于专有协议的卡,就看芯片厂商是否支持了。例如用NXP的芯片,可以方便的模拟M1和ULTRALIGHT等,而是用其它家的芯片就不一定支持了。主机卡模拟一般只支持ISO14443-4以上的卡。

9, 问:基于软件的卡模拟有什么问题吗?

答:主要是安全问题,对应用在移动支付领域的应用,安全总是最重要的,而手机上的运行环境很不安全。

10,问:总体看来,对一般开发人员,有没有实现在android NFC手机上卡模拟,并进行商业化的可能 ?

答:综上所述,主机卡模式存在严重的安全问题,而且在目前官方Android版本不支持的情况下,不可能要求用户刷机以支持一个应用。因此主机卡模式目前只能是一个技术上的研究,而没有商业应用的可能性。对虚拟卡模式,SE掌握在手机厂商,移动运营商或银行等行业巨头手中,根据目前的趋势,一般应用开发者可以采用与这些巨头合作,取得SE的部分使用权,一般是建立一个应用的安全域,以加载自己的虚拟卡。中小应用开发者也可以考虑自己发行基于SD或外置模块的SE,但是自行发卡的成本很高,终端用户一般也不会认可。

NXP的四款芯片

荣耀6P 用的是NXP PN65T,支持eSE方案。而经过确认荣耀6、MATE7没有SE安全芯片,所以不支持eSE方案

2014年7月推出的NXPNFC芯片为PN544/PN65O和PN547/PN65T,分述如下:

  PN544与PN65O系列

PN544符合欧洲电信标准协会(ETSI)制定的最新NFC规范,能够为手机制造商和移动运营商提供完全兼容的平台,用以推出下一代NFC设备和服务。PN544完全兼容现已发布的所有透过单线连接协议(SingleWireProtocol;SWP)连接的SIM卡和人机界面(Human-ComputerInteraction;HCI)的NFC规范。此外,NXP与Gemalto、OberthurTechnologies,和Giesecke&Devrient等领先SIM卡制造商密切合作,以确保包括MIFARE技术在内的SWP接口的互通。

PN65O即为PN544加上NXP的SMARTMX安全模块,PN544和PN65O硬件针脚完全兼容。PN65O/PN544提供多种主机接口选择,确保手机制造商能轻松整合所需功能。

  PN547与PN65T系列

PN547C2是最新一代NFC芯片,支持最新NCI标准协议,PN547的效能超越当前所有NFC无线控制器。与PN544相比,其射频范围提高一倍,无线数据吞吐量提高五倍,封装尺寸与功耗量均减少一半。PN547具备绝佳的全球互操作性,可兼容所有非接触式读卡器和NFC标签,在不久的未来将提供全新的使用者体验。此外,NXP新一代移动支付解决方案支持各种应用场合,不但与MIFARE系列的技术完全兼容(包含Classic1K、 Classic4K、DESFire、Plus),还可实现手持移动POS机和移动票务等NFC扩展应用。PN547全面支持全球超过70%的非接触式交通系统中使用的MIFARE。此外,PN547的卓越设计不仅提升了RF效能,更以较小的天线及较低材料成本,轻松取得EMVCo和NFC论坛的认证。

PN65T内建SE与PN547C2(BGA),硬件针脚完全兼容。软件方面成功整合于Android最新版本KitKat4.4。