李艷俊,汪書北,楊曉桐,曹貽森
北京電子科技學院 密碼科學與技術系,北京 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 認證的研究主要應用于移動支付,而本協議則是更多應用于會議簽到、會員卡驗證、共享單車認證等場景,因此具有很廣泛的用途。