NFC技術簡介

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進行通信。具體講,需要在手機中支持三個標準:

  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-

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166579.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

從文本生成到數據增強:探索 AI 前沿的開源套件 | 開源專題 No.44

Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是開源 AI 代理生態系統的核心工具包。它采用模塊化和可擴展的框架&#xff0c;使您能夠專注于以下方面&#xff1a; 構建 - 為驚人之作打下基礎。測試 - 將您的代理調整到完美狀態。查看 - 觀察進展成果呈…

【Mybatis源碼】反射 - MetaClass

前面我們介紹了Reflector類,Reflector主要完成了Class類中Setter、Getter方法的封裝,可以使用屬性獲取對應的Getter、Setter方法完成方法的調用,同時也可以判斷屬性是否存在,是否存在Getter、Setter方法。 使用Reflector解決了訪問Class類中屬性的問題,但是如果屬性是成員…

HandBrake 1.7 近日發布

導讀HandBrake 1.7 近日發布&#xff0c;作為這個開源、免費和跨平臺視頻轉碼器應用程序的重大更新&#xff0c;適用于 GNU/Linux、macOS 和 Windows 系統。 在 HandBrake 1.6 發布近一年后&#xff0c;HandBrake 1.7 版本為 Linux 用戶提供了許多好處&#xff0c;包括視頻摘要…

C語言第二十八彈--輸入一個非負整數,返回組成它的數字之和

C語言求輸入一個非負整數&#xff0c;返回組成它的數字之和 方法一、遞歸法 思路&#xff1a;設計一個初始條件&#xff0c;通過遞歸獲取非負整數的個位&#xff0c;不斷接近遞歸條件即可。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h>int DigitSum(int n) {…

PGZ-SBV系列項目介紹、技術選型、技術優勢(AIO內部版)All-In-One

前情提示 項目孵化于2014年,內部正式發行于2015.隨著業務需求,部分內部高級功能逐步對外開放支持多行業(保險、金融、餐飲、旅游、電商、直播等等),多架構,支持AI集成,支持協同,只要你想到的均可集成、均已內置高安全,高可用,多技術解決方案包含av版本、gf低代碼版、…

ubuntu22.04 arrch64版在線安裝maven

腳本 if type -p mvn; thenecho "maven has been installed."elsecd /home/zenglgwget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz --no-check-certificatetar vxf apache-maven-3.9.5-bin.tar.gz rm -rf /usr/local/mav…

springboot+vue基本微信小程序的劇本殺游戲設計與實現

項目介紹 首先,論文一開始便是清楚的論述了小程序的研究內容。其次,剖析系統需求分析,弄明白“做什么”,分析包括業務分析和業務流程的分析以及用例分析,更進一步明確系統的需求。然后在明白了小程序的需求基礎上需要進一步地設計系統,主要包羅軟件架構模式、整體功能模塊、數…

通過內網穿透本地MariaDB數據庫,實現在公網環境下使用navicat圖形化工具

公網遠程連接MariaDB數據庫【cpolar內網穿透】 文章目錄 公網遠程連接MariaDB數據庫【cpolar內網穿透】1. 配置MariaDB數據庫1.1 安裝MariaDB數據庫1.2 測試局域網內遠程連接 2. 內網穿透2.1 創建隧道映射2.2 測試隨機地址公網遠程訪問3. 配置固定TCP端口地址3.1 保留一個固定的…

微信小程序 修改默認單選,多選按鈕樣式

微信小程序 修改默認單選&#xff0c;多選按鈕樣式 1.在微信開發者文檔中復制一份單選或者多選的代碼 <!--pages/index3/index.wxml--> <radio-group bindchange"radioChange"><label class"weui-cell weui-check__label" style"dis…

小程序:project.config.json / project.private.config.json / 項目配置文件 /拉取代碼產生沖突 / 如何解決

一、理解project.config.json / project.private.config.json project.config.json 文件是項目的配置文件&#xff0c;它包含了關于小程序的一些基本信息&#xff0c;例如小程序的名稱、App ID、開發者信息以及頁面路徑等。這個文件一般不會被提交到版本控制系統中&#xff0c;…

cartographer_ros使用

首先根據官方指導安裝cartographer。然后創建ros工作空間并拉取 cartographer_ros 代碼 mkdir -p carto_ws/src cd carto_ws/src catkin_init_workspace git clone https://github.com/cartographer-project/cartographer_ros.git現在需要安裝cartographer_ros依賴項。首先&a…

微信小程序使用騰訊地圖實現地點搜索并且隨著地圖的滑動加載滑動到區域的地點,本文地點使用醫院關鍵詞作為搜索地點

實現效果如下 1.頁面加載時&#xff0c;根據getLocation方法獲取用戶當前經緯度獲取20條醫院位置信息 2.頁面滑動時&#xff0c;根據滑動到的經緯度再次獲取20條醫院位置信息 獲取到的醫院位置信息 實現方法如下 1.在.wxml中添加觸發滑動的方法bindregiοnchange“onMapRegio…

【Spring集成MyBatis】核心配置文件

文章目錄 1. typeHandlers標簽2. plugins標簽通過PageHelper的API獲取分頁的信息 1. typeHandlers標簽 可以重寫類型處理器&#xff0c;或創建類型處理器來處理不支持/非標準的類型。選擇性地將它映射到一個JDBC類型&#xff1a;如Java中的Date類型&#xff0c;將其存放到數據…

docker安裝以及idea訪問docker

其他目錄&#xff1a; docker 安裝環境&#xff08;有空更新&#xff09; url “” docker 打包java包&#xff0c;并運行&#xff08;有空更新&#xff09; url “” docker 打包vue &#xff08;有空更新&#xff09; url “” docker 多服務 &#xff08;有空更新&#xff…

2023年亞太杯數學建模A題水果采摘機器人的圖像識別功能(matlab 部分代碼)

對于1-4問針對的是附錄1 中的數據 clc; close all; clear; % 圖像文件夾路徑 folder_path E:/新建文件夾/yatai/Attachment/Attachment 1/; % 圖像文件列表 image_files dir(fullfile(folder_path, *.jpg)); % 假設所有圖片都是jpg格式% 解析文件名中的數字&#xff0c;并轉…

機器學習探索計劃——數據集劃分

文章目錄 導包手寫數據劃分函數使用sklearn內置的劃分數據函數stratifyy理解舉例 導包 import numpy as np from matplotlib import pyplot as plt from sklearn.datasets import make_blobs手寫數據劃分函數 x, y make_blobs(n_samples 300,n_features 2,centers 3,clus…

Java設計模式系列:單例設計模式

Java設計模式系列&#xff1a;單例設計模式 介紹 所謂類的單例設計模式&#xff0c;就是采取一定的方法保證在整個的軟件系統中&#xff0c;對某個類只能存在一個對象實例&#xff0c;并且該類只提供一個取得其對象實例的方法&#xff08;靜態方法&#xff09; 比如 Hiberna…

循環隊列的幾種實現方式

基于數組來實現循環隊列的幾種方式 使用 usedSize使用 標志位空出一個位置 方式一 usedSize 0 是則表示當前數組為空 usedSize 數組的長度 則表示當前數組滿了方式二 使用一個標記 flag 來判斷當前隊列是空還是滿 如果 flag false 則說明隊列為空 如果 flag true 則說…

leetcode:495. 提莫攻擊

一、題目 鏈接&#xff1a;495. 提莫攻擊 - 力扣&#xff08;LeetCode&#xff09; 函數原型&#xff1a;int findPoisonedDuration(int* timeSeries, int timeSeriesSize, int duration) 二、思路 遍歷數組timeSeries&#xff0c;如果 元素值duration < 下一元素值 &#x…

GO語言實現txt文本多行合并為一行

windows系統txt文件 input.txt多行合并為一行 package mainimport ("fmt""io/ioutil""strings" )func main() {content, err : ioutil.ReadFile("E:\\gin_demo\\demo30DNF\\youhua\\input.txt")if err ! nil {fmt.Println("Err…