李艳俊,汪书北,杨晓桐,曹贻森
北京电子科技学院 密码科学与技术系,北京 100070
NFC(Near Field Communication)技术兴起后,为了保障它的安全性,国外的学者专家很早就对NFC通信认证协议进行了多方面的研究与探索。2003年Sarma等人[1]提出了一种哈希锁协议,但是该协议容易受到重放和假冒攻击。于是Ohkubo等人[2]于2004年对其进行了改进,提出了哈希链协议,但是由于其局限性只能完成单向而无法做到双向认证。2012年Ceipidor等人[3]提出了采用对称加密来实现NFC移动设备和POS机相互认证的方案。他们认为该方案满足消息认证、机密性,相互认证属性,但是缺乏消息完整性,并且其会话密钥是静态参数,容易发生暴力攻击的情况。2013 年Lee 等人[4]提出了采用非对称加密以及哈希函数来实现防御中间人攻击的认证方法。该方案尽管能够防止重放和中间人攻击,并提供身份验证,但是仍然缺乏相互身份验证和必要的安全属性。为了改进 NFC-SEC[5]中使用固定公钥进行密钥协商的安全协议。Eun等人[6]首次提出了通过随机公钥作为假名的方法来实现隐私保护的安全协议 uPM(Self-updateable Pseudonym Based Method)。2015 年 Thammarat 等人[7]提出了 NFC 移动设备与认证服务器之间,NFC移动设备通过POS机与认证服务器之间的两种认证方案。该方案弥补了Lee 等人方案中的不足之处,但是第二种方案需要事先在三方之间建立安全通道交换相关参数,缺乏灵活性和实用性,并且其安全强度并没有他们所提出的那么高。He等人在文献[8]中提出了基于可信第三方TSM(Trust Server Management)颁发的伪身份的密钥协商与认证协议PBNFCP。2016年Odelu等人[9]发现He等人的PBNFCP存在内部冒充攻击漏洞,他们在文章中对PBNFCP 进行了攻击,并提出协议SEAP,声明其能抵抗内部冒充攻击,但经过分析发现SEAP 协议依旧不能成功防御内部冒充攻击。2017 年Chen等人[10]提出了使用双线性对进行NFC移动支付服务的安全高效的密钥认证,为移动支付提供了新的方案。
目前,国内有关NFC 研究的学者和院校相较于国外起步晚,因此研究成果较少。2011年吴俊军等人[11]针对NFC 支付所引发的用户隐私泄露问题,设计并提出了一个NFC设备认证模型。该模型直接采用匿名认证的方法实现了移动平台和服务提供商的双向认证。2014 年杨颖设计了一种能够将PKI(Public Key Infrastructure)技术与智能卡验证技术结合的认证方案[12]。该方案针对移动身份认证中所存在的问题利用RSA非对称加密算法来实现用户身份的验证以及数据的加解密,并同时解决数据完整性问题、不可否认性问题等。2016年徐伟等人[13]提出了一种新型的NFC 认证协议。该协议基于超椭圆曲线密码体制简化了密钥管理,可以提供双向认证[14]服务,为认证各方提供不可否认特性。2017 年柳毅等人[15]提出了基于CoSE 的NFC 安全支付协议,他们让虚拟的SE代替原来的硬件安全模块,使得所有交易都在云平台完成。2018 年邹蜀荣[16]提出了一种NFC 点对点协议SPPAP 和NFC 卡模式协议RODAAKE,能够防止内部冒充攻击和抵御离线字典攻击,为NFC认证提供了一种新的解决方案。
通过分析研究以前学者的NFC 协议成果,可以发现双线性对是一种简单高效且易于实现的数学方法,于是本文结合双线性对与椭圆曲线密码学ECC 的特点,提出了一种能够弥补以前不足的并且更利于移动端实现的方案,为NFC双向认证提供了一种新方法、新思路。
NFC 即“近场通信”,也叫“近距离无线通信”,是一种以13.56 MHz RFID(Radio Frequency Identification)技术为基础的近距离无线通信技术,它的通信距离小于10 cm,分为卡模式、读卡器模式和点对点模式,数据传输速率有 106 kb/s、212 kb/s 和 424 kb/s 三种,允许电子设备之间进行非接触式点对点数据传输。NFC与RFID在物理层面看上去很相似,但实际上是两个完全不同的领域,因为RFID 本质上属于识别技术,而NFC 属于通信技术。它不仅符合ISO18092、ISO21481,ECMA(340,352 以及356)和ETSITS 102 190 标准,而且与采用ISO14443A、B标准广泛应用的非接触智能卡基础设备兼容,如NXP 的MIFARE 技术以及索尼的Felica 技术[17]。与其他短距离无线通信技术相比,NFC 更安全,反应时间更短,具体参数对比见表1。NFC与蓝牙、WiFi、红外技术对比见表2[17]。由于NFC与现有非接触智能卡的技术兼容,目前已经得到越来越多的厂商支持,并成为正式标准。
表1 各种无线通信技术参数
表2 NFC与蓝牙、WiFi、红外技术对比
假设G1、G2是两个阶为素数q的循环加法群或者乘法循环群,G3是一个阶为素数q的乘法循环群。满足以下条件的映射e^:G1×G2→G3叫作双线性映射[18],条件为:
(1)双线性:对于任意的P∈G1,Q∈G2且a,b∈,存在。
(2)非退化性:对于任意的P∈G1,Q∈G2有IG3,这里的IG3表示G3的生成元。如果P是G1的生成元,则e^(P,P)是G3的生成元。
(3)可计算性:对于任意的P∈G1,Q∈G2,容易计算e^(P,Q),如果G1=G2,则表明双线性对是对称的。
在实际应用中,如果对于任意的P∈G1,Q∈G2,S∈G1或G2且a,b,c∈,那么双线性对拥有如下性质:
通过对之前文献资料的研究,并根据NFC 实际应用场景,本文设计了一种能够双向认证并协商会话密钥的协议。协议中用到的符号说明见表3所示,协议过程如图1所示。
表3 符号说明
假设认证的双方都拥有由椭圆曲线上产生的公私钥对,并且拥有相同的基点。在协议认证前,主动认证的一方需要通过安全可信渠道获得另一方的公钥。认证过程如下所示:
步骤1 用户A要与用户B相互认证,用户A先从安全渠道与用户B交换公钥,然后使用式(1)计算秘密值EA,最后发送消息{f(EA,r1),r1}给用户B,r1是用户A产生的随机数序列。
步骤2 用户B接收到消息之后先使用式(2)计算秘密值EB,然后用自己的私钥PRB验证消息的完整性和用户A的真实性,验证公式如下:
验证成功后,用户B产生一个随机数序列r2并分别计算验证消息MactagB和会话密钥SKB,计算公式如下:
计算完成后发送消息{MactagB,r2}给用户A。
步骤3 用户A收到消息后先计算式(6),然后再验证消息的完整性和用户B的真实性,验证公式如下:
图1 NFC安全认证方案
验证成功后,计算A的会话密钥SKA,计算公式如下:
由式(5)、(8)和(6)可知用户A和B的共同会话密钥SK=SKA=SKB,至此,认证双方就完成了相互验证,并协商出了共同会话密钥。
本文协议是专门针对移动端而设计的,因此要求协议可以用更低的计算复杂度来达到更高的安全性要求。本文将从以下五方面对协议的安全性做出分析:
(1)抗中间人攻击。在本文提出的方案中,用户A向用户B发送消息,只需要知道B的公钥,而B可以用自己的私钥和A的公钥去验证A的真实性,如果获取用户A、B的公钥都是真实的,那么根据式(9)可知,攻击者是无法进行冒充攻击的,除非发送信息的一方密钥泄露。
(2)双向认证。用户A通过式(1)计算认证信息,然后发送给用户B,接收到A的消息后,B通过式(2)来验证A的真实性,当验证成功后,B通过式(4)计算认证消息发送给A,然后A通过式(6)来验证B的真实性,这样就实现了双向认证。
(3)匿名性。如果攻击者能够截获用户A、B之间的通信信息{f(EA,r1),r1}和{MactagB,r2},在这两条消息中每条消息只包含了一个哈希值和一个随机数,攻击者无法通过哈希值分析出用户A、B的任何信息,这就保证了通信的匿名性。
(4)防止重放攻击。为了防止攻击者利用网络监听或者其他方式盗取认证消息,之后再把它重新发给认证者,在每条信息中都加入了随机数,通信双方都记住所发过的随机数,如果信息中有以前使用过的随机数,就认为是重放攻击。
(5)不可追踪性。不可追踪性要求攻击者不能通过收集同一用户与其他用户之间的历史会话消息来分析出他们之间存在的共同特征和联系,从而达到无法跟踪用户的目的。在本协议中,两个用户之间的通信只包含哈希值和随机数,并且这两个值在同一用户与其他用户的通信中是不同的,也不存在特定的数学逻辑关系,因此具有不可追踪性。
4.2.1 实现效率
本文以斯坦福大学开发的JPBC(Java Pairing-Based Cryptography)库为基础,选取A 类型的配对,其构造是在有限域Fq(q为素数且q≡3 mod 4)中的椭圆曲线y2=x3+x上[19]。然后在华为手机(型号Honor 6x,处理器Kirin 655,Android版本8.0)上进行了效率测试,测试结果如表4 所示。表中Q,U∈G1且a∈1为乘法循环群,阶为q=87807107996633125224377819847540498 15806883199414208211028653399266475630880222957 07862517942266222142315585876958231745927771336 7317481324925129998224791,为一个有限域,其中r=730750818665451621361119245571504901405976559 617,Q、U、a是随机生成的符合要求的数据。
表4 双线性对计算时间表 ms
从表5 可以看出,用户A向用户B发起认证请求到用户B响应请求一共花费时间为(233+237+284)ms,用户A验证B所用时间为267 ms,因此如果不协商密钥,整个认证过程需要花费时间为1 021 ms,即1.021 s,如果加上密钥协商,整个过程需要花费1 559 ms,即1.559 s。
表5 协议各部分计算时间表 ms
4.2.2 协议比较
用本协议与文献[10][16]进行了比较,其中S表示标量计算,H 代表哈希运算,P 表示双线性对运算,具体比较项目见表6。
表6 协议比较表
通过表6可以发现,本协议与其他协议相比不需要第三方可信机构,且通信次数更少。
因为本协议不需要第三方可信中心,所以对移动端的计算能力具有较高的要求,计算能力越强的设备可以产生的公私钥对的比特位数越长,安全性越高,双线性对计算时间越短。因为协议的通信次数较少,所以在每次通信前与其他协议相比需要做更多的计算工作,从而使得单次通信的时间变长,但总体时间与其他协议持平。
总体来说,本协议与其他协议的通信方式相似,但是更加灵活,易实现。虽然协议对设备的计算能力有一定的要求,但是当前市场上普通的智能设备已经能够达到协议的安全性需求。在安全性方面,本协议的安全性与设备的计算能力呈正相关,而其他协议的安全性则由第三方可信中心来保证。在实现效率方面,因为本协议不需要第三方的参与,所以能够忽略网络时延等外部因素的影响,从而使得其实现效率更高。
文中4.2.1 小节所描述的环境中实现了本协议,每一个步骤的实现时间见表5,实现结果见图2,实现代码如下所示:
图2 协议实现结果
本文首先分析了移动端NFC协议在实际生活中的应用,发现这些协议大多都需要第三方可信机构的参与才能够实现相互认证,为了减少对第三方的依赖,利用椭圆曲线和双线性对的基本性质,让通信双方能够自由灵活地进行认证。本协议中通信双方都使用自己的私钥验证对方发过来的消息,能够实现一次认证,减少通信次数,节省认证时间。目前学者们对NFC 认证的研究主要应用于移动支付,而本协议则是更多应用于会议签到、会员卡验证、共享单车认证等场景,因此具有很广泛的用途。