菜鸟笔记
提升您的技术认知

nfc技术简介-ag真人游戏

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进行通信。具体讲,需要在手机中支持三个标准:

  1. sim alliance open mobile api:为应用客户端提供与sim卡通信的通道

  2. global platform/gsma:secure element access control:授权应用客户端访问sim卡中对应的applet

  3. 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进行通信。具体讲,需要在手机中支持三个标准:

  1. sim alliance open mobile api:为应用客户端提供与sim卡通信的通道

  2. global platform/gsma:secure element access control:授权应用客户端访问sim卡中对应的applet

  3. 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 -
网站地图