nfc简介
nfc(近场通信,near field communication)是一种短距高频的无线电技术,由非接触式射频识别(rfid)演变而来。
nfc工作频率为13.56hz,通常只有在距离不超过4厘米时才能启动连接,其传输速度有106 kbit/秒、212 kbit/秒或者424 kbit/秒三种。
nfc有3种工作模式:读卡器模式、点对点模式、卡模拟模式。
- 读取器/写入器模式(reader/writer mode):nfc设备产生射频场从外部采用相同标准的nfc标签中读写数据,支持 nfc 设备读取和/或写入被动 nfc 标签和贴纸。
- 点对点模式(p2p mode):支持 nfc 设备与其他 nfc 对等设备交换数据,android beam 使用的就是此操作模式。
- 卡模拟模式(card emulation mode):读卡器是主动设备,产生射频场;nfc设备为被动设备,模拟一张符合nfc标准的非接触式卡片与读卡器进行交互。
- 外部读写器 <---> nfc芯片 <---> se
基于android的nfc终端
android 4.4版本开始,通过hce(host-based card emulation,基于主机的卡模拟),方式提供nfc功能支持。
nfc终端主要包括非接触性前端clf(也叫nfc控制器)、天线(antenna)、安全模块(secure element,se)三个主要部件,其中,非接前端、天线一般都集成在手机终端中,而安全模块可根据情况存放在不同的位置。
- clf:非接触性前端,也称为nfc控制器,其功能包括射频信号的调制解调,非接触通信的协议处理。
非接触前端一方面连接射频天线,实现13.56mhz信号的发送与接收,另一方面与安全模块通信。在clf中提供了识读接口、p2p接口、卡模拟接口,分别对应上面所说的三种工作模式。 - 天线,通常集成在终端内部,与非接前端相连,实现13.56mhz射频信号的发送与接收。
- 安全模块se,主要功能是实现应用和数据的安全存储,对外提供安全运算服务,它是卡模拟的核心。
安全模块还通过非接前端与外部读写设备进行通信,实现数据存储及交易过程的安全性。
根据安全模块存放的位置不同,nfc可分为不同的实现方案。
基于硬件的虚拟卡模式(virtual card mode)
在虚拟卡模式下,需要提供安全模块se(secure elemen),se提供对敏感信息的安全存储和对交易事务提供一个安全的执行环境。nfc芯片作为非接触通讯前端,将从外部读写器接收到的命令转发到se,然后由se处理,并通过nfc控制器回复。
基于软件的主机卡模式(host card mode)
在主机卡模式下,不需要提供se,而是由在手机中运行的一个应用或云端的服务器完成se的功能,此时nfc芯片接收到的数据由操作系统或发送至手机中的应用,或通过移动网络发送至云端的服务器来完成交互。两种方式的特点都是绕过了手机内置的se的限制。
那么,如何通过hce技术在手机上实现nfc卡模拟呢?首先要创建一个处理交易事务的hce 服务,android4.4为hce服务提供了一个非常方便的基类,我们可以通过继承基类来实现自己的hce服务。如果要开发已存在的nfc系统,我们只需要在 hce 服务中实现nfc 读卡器期望的应用层协议。反之如果要开发自己的新的nfc 系统,我们就需要定义自己的协议和apdu 序列。一般而言我们应该保证数据交换时使用很少的apdu包数量和很小的数据量,这样用户就不必花很长时间将手机放在nfc 读卡器上。
hce 技术只是实现了将nfc 读卡器的数据送至操作系统的hce 服务或者将回复数据返回给nfc 读卡器,而对于数据的处理和敏感信息的存储则没有具体实现细,所以说到底hce 技术是模拟nfc 和se 通信的协议和实现。但是hce 并没有实现se,只是用nfc 与se 通信的方式告诉nfc 读卡器后面有se的支持,从而以虚拟se 的方式完成nfc 业务的安全保证。既然没有se,那么hce 用什么来充当se 呢,ag真人游戏的解决方案要么是本地软件的模拟,要么是云端服务器的模拟。负责安全的se如何通过本地化的软件或者远程的云端实现,并且能够保障安全性,需要hce厂商自己考虑和实现。
超级sim卡是基于sim se芯片的技术方案,因此属于基于硬件的虚拟卡模式,但同时也可以为hce提供支持。
双模(dual mode)
对比分析
hce的协议栈
为支持nfc射频卡,hce主要实现了两个iso协议,分别是硬件标准iso/iec 14443
和应用协议iso/iec 7816
。
iso/iec 14443
android 4.4 支持基于nfc-forum iso-dep
规范(基于iso/iec 14443-4
)的模拟卡,要求仅使用 nfc-a (iso/iec 14443-3 type a
) 技术模拟 iso-dep,但也可以支持 nfc-b (iso/iec 14443-4 type b
) 技术。
该标准包含四个部分:
iso/iec14443-1
:制定了有关非接触卡的物理特性;iso/iec14443-2
:制定了有关射频功率及信号界面的特性;iso/iec14443-3
:则为非接触卡的初始化及防冲突机制;iso/iec14443-4
:位有关的交易协定。
iso/iec14443-3 定义了 type a、typeb 两种卡型(与飞利浦的 mifare 标准兼容),均通过13.56mhz的射频载波传送信号,此外索尼公司开发了felica 标准,也成为type f。
不同type的主要的区别在于信号发送的载波调制深度、二进制数编码方式存在差异。
此外,防冲突机制的原理也完全不同,type a是基于 bit 冲突检测协议,type b则是通过字节、帧及命令完成防冲突。
swp单线协议(single wire protocol)
手机与普通非接触ic卡最大的不同体现在拥有网络功能和人机交互两部分,因此,nfc手机可以从事传统非接触ic所不能完成的丰富业务,如空中充值、余额查询。所有这些业务均需要一个技术前提即需要一个标准的sim卡访问接口,能够使得应用客户端访问sim卡并与sim卡中的applet进行通信。具体讲,需要在手机中支持三个标准:
-
sim alliance open mobile api:为应用客户端提供与sim卡通信的通道
-
global platform/gsma:secure element access control:授权应用客户端访问sim卡中对应的applet
-
modem:需完全支持3gpp 27.007标准,支持打开sim卡逻辑通道,并能够在逻辑通信上真正实现apdu的透传
swp(single wire protocol)是采用c6引脚的单线连接方案。在swp方案中,接口界面包括三根线:vcc(c1)、gnd(c5)和swp(c6),其中swp一根信号线上基于电压和负载调制原理实现全双工通讯,这样可以实现sim卡在iso7816界面定义下同时支持7816和swp两个接口,并预留了扩展第三个高速(usb)接口的引脚。支持swp的sim卡必须同时支持iso和swp两个协议栈,需要sim的cos是多任务的os系统,并且这两部分需要独立管理的,iso界面的rst信号不能对swp部分产生影响。
swp是在一根单线上实现全双工通讯,定义了s1和s2两个方向的信号, swp传输的波特率可以从106kbps最高上升至2mbps。从swp的定义看,swp方案同时满足iso7816、nfc和大容量高速接口,并且是全双工通讯,可以实现较高波特率。swp系统地定义了从物理层、链路层到应用层的多层协议,并已经上升成为etsi的标准,正在争取成为iso的标准,目前得到业界较多的支持。从另一个角度看,swp方案要求sim卡和nfc模拟前端芯片同时重新设计,涉及的面比较广,市场推进的难度较大。另外,nfc应用非常关注掉电模式下的应用,swp的s2负载调制通讯方式带来接口的功耗损失,对掉电模式下的性能有不利影响。
iso/iec 7816
android处理应用协议数据单元 (apdu)遵循的是iso/iec 7816-4
规范。
android系统上的hce技术是通过系统服务实现的(hce服务)。使用服务的一大优势是它可以一直在后台运行而不需要有用户界面。这个特点就使得hce技术非常适合像会员卡、交通卡、门禁卡这类的交易,当用户使用时无需打开程序,只需要将手机放到nfc读卡器的识别范围内,交易就会在后台进行。当然如果有必要的话,用户也可以打开ui界面。这时的手机和普通的智能卡片已经没有区别了。
服务选择aid
交易中我们有一个重要问题需要解决,当用户将手机放到nfc读卡器的识别范围时,android系统需要知道读卡器真正想要和哪个hce服务交互,这样它才能将接收到的数据发送至相应的服务。iso/iec 7816-4规范正是解决服务选择的问题,它定义了一种通过应用程序id(aid)来选择相应服务的方法。
一个aid占16位,如果手机模拟的是一个已经存在的nfc读卡设施,那么这些nfc读卡设施会去寻找那些经公共注册而广为人知的aid(类似于端口号)。像visa卡和万事达卡等这些智能卡可以注册 aid号作为他们专用的识别标志。反之,如果要为自己的新的读卡设施部署nfc应用,你就需要注册自己的aid。aid注册过程在iso/iec 7816-5规格中定义,为防止和其他的android程序冲突,google建议aid号按此规格中推荐的注册。
当用户将设备接近 nfc 读写器时,android 系统需要知道 nfc 读写器实际上想要与哪个 hce 服务对话。这就是iso/iec 7816-4
规范的来源:它定义了一种以应用程序 id(aid)为中心的选择应用程序的方法。
aid 由 16 个字节组成。如果您正在为现有的 nfc 读写器基础设施模拟卡片,这些读者正在寻找的 aid 通常是众所周知的和公开注册的(例如,支付网络的 aid,如 visa 和 mastercard)。
如果您想为自己的应用程序部署新的读取器基础设施,则需要注册您自己的 aid。aid 的注册过程在iso/iec 7816-5
规范中定义。谷歌建议,如果您正在为 android 部署 hce 应用程序,可以按照 7816-5 注册一个 aid,它可避免与其他应用程序发生冲突。
aid组
在某些情况下,hce 服务可能需要注册多个 aid 才能实现某个应用程序,并且需要确保它是所有这些 aid 的默认处理程序(与另一服务的组中的某些 aid 相反)。
aid 组是一系列被视为属于共同的操作系统 aid 。对于一个 aid 组中的 aid,android 可以保证以下一项:
组中的所有 aid 都被路由至此 hce 服务。
组中没有任何 aid 被路由至此 hce 服务(例如,服务请求组中的一个或多个 aid,而用户优先选择另一服务)。
换句话说,不存在中间状态,其中该组中的一些 aid 可以被路由到一个 hce 服务,而另一些可以路由到另一个 hce 服务。
aid组和类别
每个 aid 组都与一个类别关联。这使得 android 可以按类别将 hce 服务分组,并且反过来允许用户在类别级别上设置默认值而不是 aid 级别。通常,避免在应用程序中任何面向用户的部分中提到 aid:它们对普通用户没有任何意义。
android 4.4 支持两种类别:category_payment
(覆盖行业标准支付应用)和category_other
(对应于所有其它 hce 应用)。
注意:在任何给定时间,在系统中只能启用category_payment类别中的一个 aid 组。通常,这将是一个应用程序,了解主要的信用卡支付协议,可以在任何商家工作。
对于仅在一个商家(例如储值卡)工作的闭环支付应用,您应该使用category_other。该类别中的 aid 组可以总是活动的,并且在必要时可以在 aid 选择期间由 nfc 读写器给予优先级。
超级sim卡的通信接口
通信接口指的是 sim 卡与外部终端设备进行通信的接口,应支持 iso7816 和 swp 两种接口。
- iso7816 接口是 sim 卡与外部终端设备进行通信的接触式 i/o 接口,遵循 etsi 102.221 的要求。
- swp 接口是 sim 卡与外部非接触终端设备进行通信,实现近场通信相关业务 的物理接口。
超级 sim 卡支持 swp 协议,遵循 etsi ts 102.613 的要求。支持卡 模拟模式、读卡器模式,可选支持点对点传输模式。
移动终端若支持 nfc 功能,则应支持 swp 接口,与超级 sim 卡协同实现刷卡 操作,为用户提供基于非接触感应的线下应用场景。
应用层的技术标准
nfc手机可以从事传统非接触ic所不能完成的丰富业务,如空中充值、余额查询。所有这些业务均需要一个技术前提即需要一个标准的sim卡访问接口,能够使得应用客户端访问sim卡并与sim卡中的applet进行通信。具体讲,需要在手机中支持三个标准:
-
sim alliance open mobile api:为应用客户端提供与sim卡通信的通道
-
global platform/gsma:secure element access control:授权应用客户端访问sim卡中对应的applet
-
modem:需完全支持3gpp 27.007标准,支持打开sim卡逻辑通道,并能够在逻辑通信上真正实现apdu的透传
附录一:sim卡的技术标准
sim卡是一个装有微处理器的芯片卡,它的内部有5个模块,并且每个模块都对应一个功能:、
- 微处理器cpu(8位)
- 程序存储器rom(3–8kbit)
- 工作存储器ram(6–16kbit)
- 数据存储器eeprom(128–256kbit)
- 串行通信单元。
这5个模块被胶封在sim卡铜制接口后与普通ic卡封装方式相同。这五个模块必须集成在一块集成电路中,否则其安全性会受到威胁。因为,芯片间的连线可能成为非法存取和盗用sim卡的重要线索。
sim卡同手机连接时至少需要5条连接线(通常编程口未定义)
- 数据i/o口(data)
- 复位(rst)
- 接地端(gnd)
- 电源(vcc)
- 时钟(clk)
如上图所示。
sim卡的供电分为5v(1998年前发行)、5v与3v兼容、3v、1.8v等,当然这些卡必须与相应的移动电话机配合使用,即移动电话机产生的sim卡供电电压与该sim卡所需的电压相匹配。卡电路中的电源vcc、地gnd是卡电路工作的必要条件。卡电源用万用表就可以检测到。sim卡插入移动电话机后,电源端口提供电源给sim卡内各模块。
附录二:主流nfc硬件厂商和芯片型号
射频前端芯片 | 读卡器/nfc芯片 | 卡芯片 |
---|---|---|
德州仪器:ti trf7970a | 恩智浦:nxp pn532 | 复旦微电子:fmsh fm1208 |
复旦微电子:fmsh fm11nc08s | 恩智浦:nxp pn7150 | 华翼微电子 hym4616a1/2/3/4/5/6 |
- | 意法半导体:st cr95hf | 华翼微电子: hym4616a7 |
- | 华大电子:hed cie72d01 | - |