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 呢,解決方案要么是本地軟件的模擬,要么是云端服務器的模擬。負責安全的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 | - |