nfc

来看看 Android 4.4 的 主机端卡模拟

NFC 有三种模式:  读写器模式、点对点模式、卡模拟模式。读写器模式,一般的非接读写器就足以胜任。而对于后两者,特别是卡模拟模式,其实应用场景非常广泛,它可以把设备模拟成卡片(银行卡、忠诚卡、交通卡...),确有两种形态:一是使用硬件的安全芯片,比如 SWP-SIM, SWP-SD, ...,二是使用主机程序来处理外部读写器发来的 APDU 指令,并将响应数据返回。


所以,卡模拟模式的控制权,就有多种形式了,通常,比如运营商掌控的 SWP-SIM (如北京 2013 年 7 月份的多应用卡),比如金融机构掌控的 SWP-SD(如2012年银联的 CUPMobile 应用),当然还有手机厂商的 eSE 模式(如 Google Wallet)。除了硬件芯片的卡模拟,基于主机端的卡模拟,情况怎样呢?


在 Android 系统上,主机端的卡模拟 2012 年的早些时候,知名的第三方 ROM: Cyanogenmod 就由 D. Yeager 提交了一份补丁,使得 cm-9.0 最早支持了主机端的卡模拟,他本人也在 SimplyTapp 上最早将此技术投入商业使用。官方的支持则晚一些,是在 2013 年下半年推出的 Android 4.4 (KitKat) 中予以支持。在其说明文档中,


Android 4.4 introduces new platform support for secure NFC-based transactions through Host Card Emulation (HCE), for payments, loyalty programs, card access, transit passes, and other custom services. With HCE, any app on an Android device can emulate an NFC smart card, letting users tap to initiate transactions with an app of their choice — no provisioned secure element (SE) in the device is needed.(http://developer.android.com/about/versions/android-4.4.html)


当然从技术上来说,主机端的卡模拟并不是新技术,NXP 在其 NFC 控制器上,其实早就予以实现,而在 Android 开源代码中,针对 PN544 的功能,并没有直接引出。BlackBerry 上也有类似的主机端卡模拟支持。无论如何,这个官方功能的支持,对于某些场景下的特定应用(比如访问控制、会员制),意义重大:可以使用云端的虚拟卡,从而摆脱受控于安全芯片持有者的羁绊。


对于主机端卡模拟来说,技术上它也有些许限制,包括:

1. 关机状态下,不可用。这是和使用硬件安全芯片(SWP-SIM/SWP-SD/eSE)的显著区别。

2. 主机上的处理器并非安全芯片,所以,卡模拟应用需要进行额外的安全处理,以保障用户权益及系统的安全性。所以,对于支付应用、公共交通、高安全级别的访问控制等,则并不适合使用此模式;

3. 交易时间可能与实际卡片有较大差别,且可能受到系统中其他应用的影响。

4. 采用 ISO14443-A/B,且使用 ISO7816-4 的 APDUs 处理机制, 遵循 ISO7816-5 的应用选择机制。对于现有系统采用了非此框架的应用,则无法简单移植。


如何使用官方卡模拟 API,编写卡模拟应用

首先,确认一下这个 API 需要支持 Android 4.4 的设备,以及获取最新的 Android SDK (API 19.x 据说 19.0 的工具链有点问题)。
然后就可以开始按照 API 介绍的步骤开始编码了,参考:

(http://developer.android.com/reference/android/nfc/cardemulation/HostApduService.html)

1. 在 Android.manifest 中声明创建一个 HostApduService 服务以及关联一个/多个 AID;

2. 实现 processCommandApdu 方法以接收来自外部读写器的 C-APDU 指令,并进行处理后返回 R-APDU 作为响应。如果当前处理并不能及时完成(比如在云端去处理),那么在 processCommandApdu 里面,返回一个 null 告知框架,应用将调用 sendResponseApdu 进行响应,这样,NFC 控制器会自动处理 WTX,以保持与外部读写器的通讯不断开。

3. 实现 onDeactivated 方法以执行一些应用取消选择后的一些操作。

智能卡 COS 开发者,或者是平台卡开发者 (比如 JavaCard/MultiOS 应用开发者)对这些恐怕并不陌生,这是典型的卡上应用的流程。

这里有一个实例,可资参考:
https://github.com/grundid/host-card-emulation-sample

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值