NFC手机上基于软件的卡模拟的利与弊

2018-12-02 21:38:23 1028

  摘要


  基于软件的卡模拟是实现NFC手机与现存非接触智能卡系统之间交互的一个新方法,最早是由RIM(Research In Motion)在黑莓手机上实现。该方法使复杂的,而且在严格控制下的卡模拟功能变得更加简单和开放。通过这种方法,开发者可以绕过安全单元(通常由“业界巨头们”控制),为实现创新性的NFC应用提供了机会。但与此同时,该方法也可能使NFC应用的安全性降低,并为恶意攻击提供了可能。基于当前的应用情况以及最新的研究成果,本文评估了软件卡模拟方法的利弊。


  1、介绍


  随着NFC的出现,越来越多的NFC设备和应用出现在市场上。但是,NFC的全部潜力还不能被所有开发者掌控。尤其是安全单元SE(secure element),一种用于实现安全的,基于硬件的卡模拟智能卡芯片,仍然在设备制造商和移动运营商的严格控制之下。


  同时,为了与现存的RFID系统,包括门禁,票卡和支付系统交互,NFC设备上必须实现某种方式的卡模拟。在NFC设备上,安全单元用于存储重要的安全应用,包括信用卡,门禁和公共交通应用等。通过设备上的NFC控制器,可以像使用常规的非接触智能卡一样使用安全单元。


  在支付领域,这个NFC技术最有希望获得回报的地方,目前其应用严重依赖于安全单元。很多公司希望能够获准使用安全单元,以便在该领域分得一杯羹。因此,很多开发者呼吁实现某种更简便的卡模拟功能。


  其中一种方法就是RIM在黑莓平台上实现的软件卡模拟方法(简称为软件SE)。NFC手机上的应用可以无需安全单元就可以与现存的RFID系统交互。对这个技术的第一感觉是它将为NFC设备带来重大的进展。首先,该技术为广大开发人员开启了实现卡模拟功能的大门,该功能之前是被严格控制的。其次,这将会增加 NFC技术使用的范围,从而导致对NFC设备需求的增加。最后,它将推动NFC成为一个真正的有着广泛应用的技术。然而在这些好处之外,随之而来的是很多负面的问题。


  本文一开始介绍NFC技术和它的操作模式,进一步解释了卡模拟的种类以及它们在目前NFC设备中的使用情况。最后基于当前的应用情况以及最新的研究成果,本文评估了软件卡模拟的利弊。


  2、NFC


  Near FieldCommunication (NFC)近场通讯技术,最早由 ECMA(ECMA-340, ECMA-352)进行标准化,而后被ISO/IEC采纳 (ISO/IEC18092, ISO/IEC 21481)。NFC为感应耦合近距离射频标识(RFID)技术的一个进步。基于ISO/IEC 14443 和FeliCa (JIS X 6319-4)标准,NFC可以与现存的智能卡系统兼容。最近的标准化工作包括与ISO/IEC 15693 近距感应耦合系统兼容。在标准化工作之外,更具体的数据格式,协议,互操作性,需求书,设备认证和NFC应用等方面的工作由NFC论坛(NFC Forum:http://www.nfc-forum.org/)推动。


  NFC技术的一个基本原则是“在一次接触时完成”。这意味着让一个物体或NFC设备与另外一个NFC设备之间进行简单的接触就会触发交互动作。这些物体被称为NFC标签(基于RFID感应器的非接触存储芯片)。这些标签可以存储类似互联网地址URL, 电话号码,文本短信SMS或电子商业卡等内容。用户可以使用标签接触NFC设备来获取这些信息。


  NFC终端可在主动、被和双向三种方式下工作;


  1,卡模拟模式,NFC模拟为一张卡


  2,读写器模式,NFC模拟为读写器,对卡进行读写


  3,双向数据分享模式,两个NFC终端互相交换数据,可以用于蓝牙和无线连接的初始验证

IC卡读写卡器,充电桩计费阅读器,RFID阅读器,金融IC卡QuickPass读卡器,NFC读写器,二代证阅读器,工业物联网,串口转以太网模块

  图1显示了中NFC手机中NFC数据的传输。应用处理器是手机的主处理单元,NFC控制器为设备中NFC功能的核心部件。它包括NFC调制解调器,以及进行命令和数据的预处理。安全单元为一个智能卡芯片,能够进行安全的基于硬件的卡模拟。路径1为应用处理器与NFC控制器之间的命令和数据流,该路径在点对点模式,读卡器模式和软件卡模拟这三种模式中都存在。路径2为安全单元与NFC控制器之间的命令和数据交互,在安全的基于硬件的卡模拟方式中存在。安全单元不仅可以通过NFC接口与外部交互之外,也可以与主控制器进行连接。这样,安全单元中的信息可以通过手机或者蜂窝网络控制。路径4表示安全单元与主控制器连接,或通过路径3与NFC接口连接。这路径2和路径3两种方式通常只选择其中一种,也就是说这两个模式在同一时间只有一个是被激活的。


  译者注:在NFC工作在卡模拟模式下时,路径1就是基于软件的卡模拟,即Host Card(主机卡)模式。路径2就是基于硬件的卡模拟,即Virtual Card(虚拟卡)模式。路径3,4表示通过手机对安全单元的控制,使用哪个路径取决于SE的硬件类型。手机访问SE即所谓的WIRED CARD模式,例如初始化或给SE下载应用时,就需要通过这种方式。在WIRED CARD模式下,虚拟卡模式或主机卡模式被屏蔽。


  2.1 卡模拟


  NFC卡模拟有多种方式可以选择。模拟的方式可以通过通讯标准,支持协议层,支持命令集以及具体进行模拟操作的NFC设备部件上的不同而加以区分。


  对于通讯标准,有三种选择,ISO/IEC 14443 Type A, ISO/IEC 14443 TypeB 和FeliCa (JIS X 6319-4),对这三种标准的支持取决于NFC控制器,安全单元和应用的地理位置。例如,ISO/IEC 14443Type A, ISO/IEC 14443 TypeB在欧洲广泛应用,而FeliCa (JIS X 6319-4)主要用于日本。


  另外一个区别在于具体进行模拟操作的NFC设备部件,一方面,卡模拟可以在软件,也就是设备应用处理器上进行,另外一方面,卡模拟可以由一个专用的智能卡芯片,即安全单元上进行。


  2.2 安全单元


  安全单元为NFC设备上专用的微处理芯片。该芯片可以与NFC控制器集成在一起。另外也可以集成在NFC设备中的其它智能卡/安全设备中,这些集成的芯片可以是UICC多功能集成电路卡(大多数情况下是SIM卡)或SD安全数字记忆卡。


  很多安全单元(例如NXP的SmartMX)使用的是标准的智能卡芯片,包括接触式或非接触式智能卡。其软件和硬件架构是相同的。唯一的区别是它们对外的接口有所不同,普通的智能卡具有ISO/IEC 7816-3 (接触式)或天线(非接触式)接口,而安全单元在这些接口之外,还通过一个直接的接口与NFC控制器连接(例如NFC线接口NFC-WI,或单线协议 SWP)。


  安全单元具备与常规智能卡同样的高安全标准。它可以提供安全存储,安全执行环境和基于硬件的加密算法。安全单元芯片用于对存储数据的读取和操作,并可以抵御各种攻击。其芯片,操作系统和设计流程都经过高安全标准的评估和认证。例如智能卡芯片通用标准保护条例(Common Criteria protection profiles for smartcardmicrochips)等。因此,安全单元满足安全相关的应用,例如支付和门禁管理系统。


  智能卡中一个重要的未解决安全问题是接力攻击场景。“接力攻击”是指与智能卡的通讯通过另一个载体接力传播到一个比较远的距离。攻击者可以在远程非法使用受害者的智能卡。这种对非接触智能卡的接力攻击最早被Hancke证实,他通过智能卡和RFID读卡器之间信号层通讯实现了接力攻击。Kfir和Wool则显著提高了通讯距离,可以在用户不知情的情况下轻易使用其智能卡。Roland etal揭示了安全单元不仅能通过非接触接口进行攻击,而且能够通过手机应用处理器上运行的软件进行。Anderson 表明NFC手机是对非接触智能卡进行接力攻击的理想场所。 Francis et显示可以通过两部NFC手机的蓝牙或其它无线通讯方式组成的攻击平台,对NFC点对点通讯和非接触智能卡通讯进行接力攻击。


  3、基于软件的卡模拟


  软件卡模拟是NFC手机上进行卡模拟的新方法。最早由RIM公司在黑莓平台上引入。在支持多种安全单元之外,黑莓7平台支持通过手机应用控制器模拟NFC标签和智能卡。


  通过指定一条NDEF消息,应用程序能够模拟NFC Forum 类型4的标签,该消息可以保存在一个虚拟标签中。这种类型4标签协议由黑莓系统自动处理。工作在该模式下的NFC设备可用于与另外一个工作在读写器模式下的NFC设备交换数据。


  应用程序也可以全方位的模拟符合ISO/IEC 14443-4标准的智能卡,包括类型A和类型B。应用程序可以指定模拟卡的静态属性(例如唯一ID(UID) 以及ISO/IEC 14443 Type A卡的历史数据),并在ISO/IEC14443-4规定的块交换协议基础上进行信息协议数据单元交换(尽管API允许应用程序随便定义UID,但考虑到安全因素,在现存设备上没有提供该功能)。开发人员可以通过在黑莓系统上进行注册将应用程序模拟为智能卡。当从外部RFID/NFC读写器得到命令时,系统通过一个回调函数通知该应用程序,并将得到的命令作为参数传递给该回调函数。应用程序可以通过参数进行相应的处理,该回调函数的返回值可以返回到读写器。

IC卡读写卡器,充电桩计费阅读器,RFID阅读器,金融IC卡QuickPass读卡器,NFC读写器,二代证阅读器,工业物联网,串口转以太网模块

  图2 演示了软件卡模拟的命令流程,箭头1到4显示了RFID/NFC读写器到应用程序注册的回调函数的命令流程,而箭头5到8表明从应用程序反馈给RFID/NFC读写器的流程。


  目前为止,黑莓手机是唯一能够支持软件卡模拟的手机。但是,最近发布的基于第三方固件CyanogenMod补丁包能够让带有NXP PN544的NFC手机具有软件卡模拟的功能。


  除了NFC手机之外,其它设备,例如NFC读写器,可以实现无安全单元的软件卡模拟。例如ACS ACR 122U NFC读写器,另外还有专用的卡模拟设备(例如Proxmark,OpenPICC, IAIK HF RFID DemoTag等)


  3.1 软件卡模拟的优点


  卡模拟被视为NFC技术中最具前景的领域。主要原因是相比其它工作模式,卡模拟最有盈利的前景。而且,现存的支付,票务,门禁等智能卡系统一般由固定的读写器设备和带有智能卡/非接触标签的用户组成。因此将用户端功能(智能卡/非接触标签)加入手机中是一个现实和迫切的要求。


  尽管NFC社区一直要求提供卡模拟功能,但是,卡模拟,特别涉及安全单元的卡模拟一直是个复杂的领域。到目前为止,嵌入式系统中的安全单元通常在手持设备制造商控制中或TSM的运营下。如果将UICC(SIM)作为安全单元,则是移动网络运营商(Mobile Network Operator MNO)控制着安全单元。NFC手机中的安全单元控制权之争早已打响。因此实现对安全单元访问的第一个障碍就是不同的安全单元由不同的部门控制。另一个障碍是一个安全单元的运营商不太可能允许其竞争对手在他们的模块中运行类似的服务。例如谷歌钱包不太可能与Isis钱包中一个手机中共存,尤其是共享一个安全单元。第三个障碍是应用程序访问安全单元的开销。除了安全单元上存储空间的开销外,共存在一个安全单元上的安全相关的应用程序应该需要某种模式的安全认证。


  所有这些障碍限制了一般开发人员的应用程序使用安全单元的可能性(也许在手机和支付领域的巨头可以除外)。作为上述问题的解决方案,RIM在其黑莓手机上提供了软件卡模拟方法。在这种模式下,任何开发者都可以开发基于卡模拟技术的应用程序,为开发与现存具有固定读写器的基础设施交互的应用程序的提供了可能。也就是说,开发者可以开发基于手机的门禁,支付,公共交通和票务应用程序,用于使用RFID票卡和智能卡的系统中。


  软件卡模拟的另外一个好处是可以实现与不具备全功能点对点模式的NFC设备通讯。例如,Android系统仅支持Android Beam来实现点对点通讯。然而Android Beam是基于谷歌的NDEF推协议 (NDEF Push Protocol NPP)和简单NDEF交换协议 (Simple NDEF ExchangeProtocol SNEP),在两个NFC手机接触时仅能实现单方向单条的消息通讯。因此,软件卡模拟可以作为NFC手机之间点对点通讯的替代方式。另外许多基于PC平台的非接触智能卡读写器也不支持点对点模式。例如 Reiner SCTcyberJack RFID basic (在新的德国身份证系统中使用)和HID OMNIKEY 5321。但是,这些设备可以与卡模拟方式下的NFC手机进行通讯,因此,不需要增加额外的NFC硬件,软件卡模拟方式能够实现了手机与这些PC系统的通讯。


  更进一步的好处是相比点对点模式,在PC平台上对软件卡模拟的软件和驱动支持更好。非接触智能卡读写器在PC/SC上已经标准化,而且缺省的集成到大多数操作系统中。即使Java SE这样的平台也具有非接触式智能卡的标准API。点对点模式则只有有限的支持,而且仅仅被有些第三方库,例如libnfc4和libnfc-llcp5 支持。另外,NFC点对点模式协议栈为


  应用层协议(NDEF消息)


  基于


  NPP,SNEP (或者直接使用另外的应用层协议)


  基于


  LLCP (NFC LogicalLink Control Protocol NFC逻辑链路控制协议)


  基于


  NFC-DEP (NFC DataExchange Protocol NFC数据交换协议,例如符合ISO/IEC 18092的底层点对点通讯协议)


  比较而言,下面的读写器模式的协议栈更简单:


  应用层协议 (符合ISO/IEC 7816-4)


  基于


  ISO-DEP (符合ISO/IEC 14443-4定义的通讯协议)


  总体来讲,软件卡模拟方式是一般开发者,而不是那些“业界巨头们”,能够从简单的NFC标签应用上进行功能扩展的很好契机。


  3.2 缺点和安全问题


  所有上述的好处是有代价的。在当前软件卡模拟存在的技术限制之外,有重大的安全问题。手机应用处理器中运行的应用程序不具有安全单元中的数据安全存储和可信度执行环境。除非应用处理器自己能够提供某种形式的可信计算技术。但是目前的绝大多数手机没有这个功能。


  没有安全存储功能,因此卡模拟应用程序不得不自行保存敏感的数据(例如门禁系统的口令,支付系统的私钥,票卡帐号等)。而且没有安全的执行环境,导致其它应用程序(包括恶意的应用程序)的干扰。例如最近发现谷歌钱包存在重大安全隐患,尽管谷歌钱包使用安全单元,但是应用程序将重要的安全数据作为应用程序私有数据缓存到手机内存中,攻击者可以通过这些缓存得到信用卡号,帐户余额,卡持有人信息甚至钱包的PIN码。


  根据这些敏感信息的价值,也许在某些情况下值得冒险。例如,公共交通中的单程票,或一张主题公园的门票。但是对于支付系统或门禁系统,情况就不一样了。例如信用卡或大楼的门禁卡的信息,就不能简单的存放在容易被窃取的手机内存中了。


  但是,使用软件卡模拟也可以实现某种程度上的安全应用。一个关键是将“虚拟卡(virtual card)”存放在一个安全的远程的地点,而手机仅仅充当一个访问代理。

IC卡读写卡器,充电桩计费阅读器,RFID阅读器,金融IC卡QuickPass读卡器,NFC读写器,二代证阅读器,工业物联网,串口转以太网模块


  图3显示了这种基于虚拟卡的在线卡模拟系统。手机将从POS机得到的命令转发到存放在远程服务器中的虚拟卡,虚拟卡的回复通过手机反馈给POS终端。


  虚拟卡的访问必须是安全的,可以防止通讯中的截获已经未经授权的信用卡使用。例如,通过加密和认证的通道,以及用户输入口令进行保护。但是,鉴于在手机应用程序中存放数据易于被窃取的现实,创建不能被其它应用窃取的安全信道是很困难的。另外,由于需要与远程服务建立安全连接,需要稳定的互联网连接,而并不是所有应用环境有这个条件。


  软件卡模拟中的安全问题不仅仅是数据存储的问题。另一个问题是使用软件卡模拟应用的手机作为攻击工具。Francis et al的研究表明具有NFC功能的手机能够实现远距离的点对点模式接力攻击。类似的也可以攻击非接触智能卡系统。(cf. Hancke, Kr 和 Wool, Hanckeet al)。过去,攻击者必须准备专用的设备(例如,用于在RFID/NFC读写器和接力处理器之间转发智能卡信号的卡模拟器)。目前这些专用设备不具备一般 NFC设备的外观形态(例如智能卡或手机的外观)。然而,支持软件卡模拟的手机具有理想的外形,而且具备建立接力通道所需的多种网络接口(蓝牙,WIFI,GSM,UMTS等)。


  Francis et al证明非接触智能卡能够轻易的被两部NFC手机进行接力攻击:一个NFC手机作为智能卡和接力通道之间的代理,工作在读写器模式。另一部NFC手机作为 RFID/NFC读写器(例如POS机)和接力通道之间的代理,工作在卡模拟模式。Roland et al甚至演示了受害者手机中的纯软件应用就足以充当进行安全单元和接力通道之间的代理。


  软件卡模拟还存在技术和安全相关的限制。在NXP的NFC控制器中,基于软件的卡模拟只能使用一段范围内的UID(被保留为随机号码的UID号码段)。在黑莓平台上的API中,有使用指定 UID的功能,但这个功能因为安全问题而被替换。因此在现存的设备中,也只能使用随机的UID。该限制妨碍了软件卡模拟在基于UID的系统中的应用,但也防止了在纯UID应用系统(例如某些门禁系统)中的卡克隆攻击。


  而且,黑莓的软件卡模拟功能,包括Android的第三方 CyanogenMod固件最近加入的功能,仅仅支持符合ISO/IEC 14443-4标准的智能卡。底层协议为专有协议的系统,例如NXP的MIFARE Classic,就不能被模拟。因此,软件卡模拟不能在所有的现存RFID 系统中使用。


  4、结论


  本文评估了基于软件的卡模拟存在的优缺点。软件卡模拟突破了现有的基于安全单元解决方案的束缚,为开发人员提供了新的机会。该技术可以方便的将具有NFC功能的手机和现存的非接触智能卡系统集成在一起。而且与点对点模式相比,读写器模式设备和卡模拟设备之间的通讯更具优势,因为读写器模式的应用比点对点模式更为普遍。这些优点的代价是安全上的问题。在这种情况下,模拟卡中的内容更加难以保护,而且,软件卡模拟将NFC手机变成对智能卡或其它卡模拟设备实施接力工具的一个理想的工具平台。最后,设备和芯片制造商对某些应用上的软件卡模拟进行了限制。虽然大多数软件卡模拟应用都可以使用点对点方式实现,但是使用点对点模式通常需要对现有基础设施进行大量升级改造。


  本人认为,在多个NFC设备之间通信上不需要通过软件卡模拟实现,因为应用程序可以使用点对点模式,这种模式是为NFC设备之间通信而特别设计的。然而,使用软件卡模拟的优势是能够支持现有的硬件系统。所以不能仅仅因为开发人员会创建无安全的应用,或者这种技术会被恶意使用,就将禁止软件卡模拟功能的开发。应用的安全不能靠限制可能被恶意使用的技术,而是应该依靠提升系统对攻击的抵抗力实现。毕竟,从CyanogenMod的补丁包上就能看出限制该功能的使用是不现实的。(来源:firefight的专栏)