
上個月收拾鑰匙包的時候我數了數里面躺著的卡小區大門一張、單元門一張、地庫電梯一張、公司閘機一張、食堂消費一張還有健身房兩張。整個人就是一個行走的“卡災現場”。最關鍵的是這些卡長得都一個樣晚上回家在包里摸半天分不清是哪張只能一張張湊上去刷。那陣子正好換了臺帶NFC的手機地鐵公交都刷手機解決了心里就一直惦記著一件事這些RFID射頻卡到底能不能也寫進手機NFC里讓所有卡都消失后來我花了整整兩個周末折騰這件事踩了一堆坑最后成功把其中三張卡合并進了手機里剩下幾張因為技術原理限制只能繼續躺包里。這篇文章就把整個“RFID射頻卡寫入手機NFC”的心路歷程完整記錄下來適合三類人看一是被一堆門禁卡、停車卡、電梯卡折磨到崩潰的普通人二是想搞清楚RFID和NFC本質區別的技術愛好者三是準備做NFC門禁模擬或NFC讀卡相關開發的工程師我會連帶講清楚底層協議邊界和幾個常見坑幫你少走一點彎路。1. 從一兜子卡到一只手機這個需求是怎么來的1.1 我的“卡災”現場和第一臺NFC手機那天晚上我蹲在自家單元門口手里攥著四張長得一模一樣的白色卡片挨個往門禁讀卡器上貼。第一張沒反應第二張刷開了。后面排隊的鄰居盯著我看場面極其尷尬。就在那一刻我下定決心必須把這些卡都收拾進手機里。換到NFC手機之后最先體驗到的方便是支付和交通卡——手機貼上去就完事完全不用解鎖息屏刷也行。既然地鐵閘機、商店pos機都能被手機替代那小區門禁、公司閘機為什么不行這個念頭一旦起來就壓不下去。但真正開始動手我才發現自己對這個領域的理解有多淺。市面上所謂的“射頻卡”其實分成好幾種互不兼容的標準手機NFC并不是萬能的寫卡器也不是什么卡都能模擬。想搞清楚“能不能把卡寫進手機”第一步不是打開軟件去復制而是先搞清楚你手里這張卡的物理和協議身份。1.2 先分清三個詞RFID、射頻卡、NFC的真實關系很多人問“RFID和NFC是不是一回事”其實不是。RFIDRadio Frequency Identification是射頻識別的統稱覆蓋了從低頻到超高頻的一大堆標準。射頻卡是RFID技術的物理形態就是你把卡貼到讀卡器上“嘀”一下的那張卡里面有一顆芯片和一圈天線線圈。NFC則是一個更具體的東西它工作在13.56MHz高頻頻段是RFID家族里的一個標準化子集專門為短距離、低功耗的交互設計。重點在于手機里的NFC模塊只能工作在13.56MHz這個頻段上而且完全遵循NFC Forum定義的協議棧。這意味著什么意味著如果你手頭的射頻卡是125kHz低頻卡也就是很多老式門禁和停車卡用的ID卡那手機NFC在物理層面就無法直接和它對話更別說把它“寫進”手機里。這是我整個過程中認識到的第一道物理死結后面細說。1.3 哪些卡能被手機替代哪些不能動手之前建議先拿一張紙把你的卡列個清單逐個判斷類型。我整理了一個簡單的判斷維度能幫你快速預估成功率卡類型常見頻率典型用途手機NFC能否直接模擬ID卡EM4100/T5577125kHz老式門禁、停車卡基本不能頻段不兼容IC卡Mifare Classic 1K/4K13.56MHz小區門禁、考勤、食堂部分可以看是否加密CPU卡如Mifare DESFire13.56MHz金融級門禁、一卡通很難安全機制過硬NFC標簽NTAG系列13.56MHz智能海報、快速配對可以直接讀取和寫入內容看清楚這個表你就能明白為什么有人能在網上喊“把門禁卡寫進手機”而有的人折騰半天還是失敗。最核心的原因不是操作不對而是卡的類型根本不在手機NFC的能力范圍內。2. 先搞清楚手上的卡是什么貨色2.1 用NFC TagInfo給卡片驗明正身判斷一張卡到底是什么貨色不需要任何付費軟件和額外硬件一臺帶NFC的安卓手機就夠了。我用的第一個工具叫NFC TagInfo安裝之后把卡輕輕貼到手機NFC天線區域它就會讀出卡片的基礎參數協議類型、廠商ID、卡容量、UID、是否支持NDEF等等。實測下來不同卡在NFC TagInfo里顯示的信息差異非常大。ID卡125kHz在讀卡時會直接顯示協議不支持或完全無響應Mifare Classic 1K卡會顯示卡片出廠廠商常見是NXP或復微電子、1K內存、16個扇區NTAG系列則會顯示成Type 2標簽還能直接看到里面的NDEF數據。這里有個判斷小技巧如果手機貼近后完全沒有反應大概率就是你拿錯了卡或者它壓根就是125kHz的低頻卡。如果手機有響應但讀不出完整數據通常是卡片有加密扇區信息被鎖住了一部分。2.2 ID卡“一次性工號”式的設計先說我那批無法救活的卡里最典型的一種——ID卡。這類卡內部結構極其簡單一個芯片里存了一串固定編號芯片出廠時寫死用戶無法修改也沒有任何加密機制。卡片工作的原理是讀卡器發出電磁場卡片芯片感應取電后把這串編號回傳讀卡器一比對數據庫發現是合法編號就開門。這本質上就是一個“工號牌”邏輯門禁系統的安全靠的是“你有沒有那串號”而不是“你能不能破解加密”。問題在于ID卡工作在125kHz手機NFC工作在13.56MHz兩者在物理頻率上就完全不搭。手機再怎么模擬也不可能發出125kHz的信號去回答讀卡器的詢問。市面上有些“手機再接ID卡讀卡器”的外設方案本質上是用物理外接模塊代替了手機NFC去做125kHz的溝通再把結果通過藍牙傳回手機顯示那不是手機NFC直接模擬意義已經變了。我建議遇到ID卡就別浪費時間了直接買一個手機收納卡包物理上合并同類項比研究怎么模擬來得實在。2.3 IC卡的扇區結構為什么叫“一卡能多用”真正有機會被手機NFC收編的是13.56MHz的IC卡尤其是Mifare Classic系列。小區門禁、公司考勤、食堂飯卡大部分用的是這種。它容量很小1K卡只有1024字節但數據結構做得很講究。這1K空間被劃分成16個扇區Sector每個扇區又分成4個塊Block每個塊有16字節。扇區0的塊0是特殊塊里面存著UID全球唯一編號和廠商數據出廠時鎖定正常情況下用戶改不了。每個扇區的尾部會有兩個密鑰區Key A和Key B決定了這個扇區能不能被讀取和寫入。這個設計就是IC卡“一卡多用”的底氣。我們公司的門禁卡扇區0只存了UID用于閘機開門食堂卡則在后面幾個扇區里存了余額和消費記錄。門禁只需要驗證UID是合法的就放行食堂則需要讀加密扇區里的數據。所以一張卡對應多個系統每個系統只讀自己那一畝三分地互不干擾。搞清楚這個結構之后復制邏輯就很清楚了如果門禁只讀UID那只需要復制扇區0的UID就夠了如果門禁還要校驗加密扇區里的數據那就必須把整個卡的數據全部讀出來再寫進另一張卡前提是你要能拿到各扇區的密鑰。3. 手機NFC不是你想的那種“寫卡器”3.1 手機NFC的三種工作模式與硬件邊界網上經常有人說“用NFC Tools把數據寫進手機”這個說法其實很含糊容易誤導人。要把這個問題講清楚得先說手機NFC的三種工作模式。第一種是讀寫模式Read/Write手機主動發出射頻場去讀取或寫入外部的NFC標簽比如你用NFC Tools往一張NTAG213標簽里寫網址走的就是這個模式。第二種是卡模擬模式Card Emulation手機把自己偽裝成一張卡片讓外部的讀卡器來讀比如手機錢包里的門禁卡功能。第三種是P2P模式兩臺設備互相傳文件現在用的很少了。很多人默認認為“手機能讀卡就一定能模擬卡”或者“手機能往標簽里寫數據就一定能把自己變成門禁卡”這是兩個完全不同的運作方式。卡模擬需要手機底層硬件和系統級服務配合支持不是裝一個App就能憑空變出來的。手機NFC天線的發射功率很小讀取距離通常只有1到4厘米遠不如專業的桌面讀寫器那種十幾厘米甚至更遠的范圍。更要命的是手機NFC模塊在卡模擬模式下支持的協議非常有限。它能不能模擬你的IC卡取決于那款卡的協議是否被手機的SE安全芯片或系統固件接受了。3.2 錢包模擬門禁卡背后的兩條技術路線目前主流手機錢包里都有“門禁卡”功能做法大體分兩條技術路線。一條是SESecure Element方案手機里裝了一顆獨立或集成的安全芯片卡片數據被寫入這顆芯片里再由NFC控制器模擬出ISO 14443協議的應答信號。這個方案安全性高、兼容性好但前提是錢包廠商在適配固件時必須針對你要模擬的卡類型做過測試和支持。另一條是HCEHost-based Card Emulation軟件模擬方案從Android 4.4開始支持不需要安全芯片直接在操作系統層面模擬一張卡靠主處理器參與應答。HCE理論上能模擬一些符合ISO 14443-4規范的非接觸CPU卡但對于Mifare Classic這種NXP私有協議就沒有辦法了——Android底層壓根不支持把這個私有協議通過HCE模擬出來。這也是很多折騰過的朋友最困惑的點明明手機識別得到門禁卡錢包也提示添加成功了拿到門口死活刷不開。很可能是你的卡剛好是Mifare Classic類系統顯示添加成功只是錄入了UID或部分信息到了讀卡器那邊人家要驗證私有協議的完整應答手機這邊給不了。所以當你決定把一個IC卡寫入手機NFC先別急著打開各種工具先去查一下你這張卡的協議類型。如果它是Mifare Classic 1K且門禁系統只是讀取UID那大概率能通過錢包導錄實現如果門禁需要讀加密扇區數據那錢包方案基本是死路一條只能另想辦法比如購買一張特殊空白IC卡做中轉。3.3 NFC Tools能“寫”的東西和不能“寫”的東西很多人搜到NFC Tools覺得這個軟件能寫卡嘗試之后又抱怨“寫了手機沒用”。其實NFC Tools能寫的是NDEF格式數據——文本、網址、藍牙配對、WiFi配置這類信息目標載體是NTAG、Mifare Ultralight等NFC標簽或部分可寫的IC卡存儲區。它不能做到的事情是把一個Mifare Classic的完整二進制dump直接塞進手機然后讓手機在門禁讀卡器前變成那張原卡。手機存儲空間里放一百個dump文件也沒有用因為卡模擬行為發生在NFC控制器和軟件協議棧層面跟文件系統里存沒存數據沒有關系。真正想“把卡的數據搬進手機”可行的路徑其實是先把原卡數據通過工具保存成dump文件再把dump寫入一張物理空白IC卡里這張空白卡作為“數據橋”最后用手機錢包里的“實體卡模擬”功能去錄入它讓手機模擬這張卡。如果你不想經過這張空白卡而是試圖直接讓手機讀取并模擬原卡那只有部分手機錢包的引導式“門禁卡錄入”才能做到前提還是前面說的協議兼容和加密扇區條件。4. 實操全鏈路從讀原卡到讓手機刷開那張門4.1 工具清單手上有這些就能開工先說清楚整個流程玩下來我實際用到的工具沒有想象中多而且大部分是免費的。準備清單如下一臺支持NFC的安卓手機系統版本越高越好Android 8及以上基本沒問題Mifare Classic Tool簡稱MCT安卓端的必備工具負責讀dump、保存數據和寫卡NFC TagInfo用于識別卡的類型和廠商信息一張CUID空白IC卡用于臨時承接原卡的數據部分場景下可以省略一臺電腦可選配合NFC Reader Tool和USB讀卡器如ACR122U可以更直觀地分析dump手機端不裝電腦也能完成如果你以后打算在App里集成NFC讀卡功能比如用uni-app開發一個讀取NFC卡片ID的小工具建議先了解Android原生NFC的基本代碼結構。底層是通過NfcAdapter去接收標簽發現事件讀取Tag的Id和TechListpublic class NfcReadActivity extends Activity { private NfcAdapter nfcAdapter; private PendingIntent pendingIntent; Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); nfcAdapter NfcAdapter.getDefaultAdapter(this); pendingIntent PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); } Override protected void onResume() { super.onResume(); if (nfcAdapter ! null) { nfcAdapter.enableForegroundDispatch(this, pendingIntent, null, null); } } Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())) { Tag tag intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] id tag.getId(); String[] techList tag.getTechList(); } } }這段代碼是Android讀取NFC卡片的基礎套路。uni-app本身沒有內置NFC讀卡插件一般做法是通過Native.js調用Android原生代碼或者直接封裝一個原生插件。我后來在做一個門禁管理小應用的時候就是這么干的過程不難坑倒是不少以后可以單獨寫一篇。4.2 讀取原卡并保存dump文件回到正題。當你確認手里的卡是Mifare Classic 1K且手機NFC能感知到它就可以開始讀卡了。我以MCT為例操作路徑是打開MCT → 點擊“Read card” → 把卡貼到手機背面NFC天線區域 → 等待讀取進度條走完。第一次讀卡時你大概率會看到一片紅色扇區。紅色代表這個扇區的Key A和Key B都是未知的也就是加密扇區沒有密鑰就讀不出來。只有扇區0因為是廠商塊公開信息通常會顯示出來UID一目了然。如果你是幸運兒整張卡所有扇區全部是綠色那說明這張卡根本沒做加密門禁系統只是拿了UID或幾個明文塊做校驗。這種情況下復制會非常順利直接全卡dump保存就行了。點擊“Save”選擇保存位置MCT會生成一個后綴為.mct的文件文件名一般可以自定義建議用“卡用途日期”命名方便以后管理。順便提一句如果你有ACR122U這種電腦端USB讀卡器就能用NFC Reader Tool把dump導出來做二進制分析直接查看每個扇區每個字節的內容。尤其是當你懷疑某個扇區存了重要的門禁數據時二進制視圖能讓你定位到具體數據偏移量這對于做門禁系統開發和故障排查很有幫助。4.3 密鑰恢復默認密鑰庫之外的那點事如果你遇到紅色加密扇區又確實需要完整dump來復制卡片那就繞不開“密鑰恢復”這一步。MCT里提供了一個“Map”功能也內置了常見的默認密鑰庫會自動用庫里的密鑰逐一嘗試解密各個扇區。這里我要嚴謹地說清楚大部分物業和門禁廠商在生產卡片時根本不會去改默認密鑰。Mifare Classic出廠默認密鑰是FFFFFFFFFFFF、A0A1A2A3A4A5、D3F7D3F7D3F7讀卡器廠商如果懶得改這些密鑰就能直接解鎖扇區。MCT做的事情就是用這些行業內已知的常見密鑰去試不是暴力枚舉海量密碼組合。能試出來說明這家門禁廠商的密鑰管理很偷懶試不出來說明卡片密鑰已經被改成隨機值了繼續用軟件硬試也沒什么意義。用MCT跑密鑰恢復有一個前提卡必須還允許認證嘗試。某些防復制門禁卡在檢測到連續多次認證失敗后會觸發防攻擊機制直接鎖死卡片。所以我從來不會拿一張卡無限循環地試密鑰跑完內置密鑰庫也就幾十秒的事沒出結果就收手。這是對自己卡的負責也是對別人安全系統的起碼尊重。請記住整個操作只適用于你擁有、或獲得明確授權的卡片未經授權去復制門禁卡、破解卡密在絕大多數場景下都屬于違規行為。4.4 數據寫入CUID卡與手機錢包錄入假設你成功讀出了完整dump下一步是找一張空白IC卡來承接數據。這里就有一個非常重要的選型問題買UID卡還是CUID卡卡片類型塊0UID區寫入次數特點適用場景普通白卡出廠UID固定不可寫和原裝卡一樣需要全新ID的合法發卡場景UID卡如Gen1/FUID有限次部分型號只能寫一次可以修改UID價格低一次性復制寫壞了就廢CUID卡可重復寫塊0可反復擦寫不怕寫錯反復測試、調試階段首選我的建議是做實驗、反復測試階段一律用CUID卡。因為寫塊0這種操作很容易出錯而且一旦出錯普通UID卡基本就報廢了。CUID卡則允許你反復重寫雖然成本稍高幾塊錢但省下來的折騰時間絕對值。寫入過程很簡單MCT → 把空白CUID卡貼到手機后面 → 選擇“Write card” → 選擇之前保存的dump文件 → 確認寫入。寫完后再把這張卡貼到手機NFC區域讀一遍對比所有扇區的數據是否和原卡dump一致。只要扇區全部綠色、數據一致這張復制卡就算完成了。到這一步為止手機還沒真正“變成”門禁卡。接下來你需要把這張CUID卡當成一張正常的實體卡在手機錢包App里找到“門禁卡”或“實體卡模擬”入口按提示把卡緊貼手機背面錄入。錄入成功后手機會把這張卡的關鍵數據寫入安全區域之后你就可以把CUID卡放進抽屜里睡覺了出門帶手機就夠了。4.5 驗證出門前先做三件事復制卡做完、手機錢包錄入完成先別急著開心我建議你在家里做一個完整驗證第一用MCT讀一遍CUID卡的數據確認每個扇區都和原卡一致尤其注意扇區0的UID。很多“刷不開”的問題最后都出在UID不一致上。第二打開手機錢包確認模擬的卡片信息顯示正常并把NFC默認支付方式設置好避免你貼門禁的時候手機彈出了支付界面。第三出門去門禁讀卡器上試分別測試息屏刷、亮屏刷和解鎖后刷三種狀態。有些手機在息屏狀態默認優先走支付通道會在門禁上沒反應這時候調整一下NFC默認應用順序就好了。如果以上都通過了恭喜你這張卡算是真正“寫進”手機了。5. 踩坑實錄與排查鏈路五個讓我血壓升高的瞬間5.1 明明能復制UID門禁卻不開——加密數據區作祟我第一張成功“復制”的卡是公司閘機卡MCT讀出來扇區0是綠的其余扇區全是紅色密鑰恢復也試不出來。我心想算了反正門禁只認UID我就用MCT只寫扇區0把UID寫到CUID卡上滿心歡喜跑去閘機測試。結果閘機“嘀”了一聲燈是紅色門不開。我很迷惑因為按道理同一個UID應該被認作同一張卡。后來我才反應過來這個閘機讀卡器壓根不止校驗UID它還會讀某個加密扇區里的權限字段只有UID和權限字段同時匹配才會放行。只復制UID相當于拿了一張寫著名字但沒有照片的工牌門口保安當然不放你進去。排查鏈路是這樣先確認原卡是否有綠色以外的扇區如果有嘗試密鑰恢復恢復不了基本說明門禁系統設置成了“UID加密數據”雙重校驗靠普通dump復制已經走不通了。此類場景下常規做法是把卡交給物業或門禁管理員讓他們在系統后臺直接發一張“手機NFC卡”而不是自己折騰。5.2 CUID和UID選錯刷卡一星期就“陣亡”第二次折騰是我給小區單元門復制卡圖便宜買了一批普通UID卡。第一張寫進去測試一切正常門也能刷開。結果過了大約六七天那張卡突然就刷不開了實體CUID卡插在手機殼夾層里的備用卡也一樣失效。排查才發現普通UID卡尤其是那種Gen1/A級改UID卡的塊0寫入機制有物理次數限制有些甚至只有一次有效寫入后續模塊在特殊條件下會變得不穩定最終導致UID區數據異常或被讀卡器拒絕。而CUID卡支持多次重寫數據層更穩不會出現這種“突然陣亡”的情況。之后我再也不在重要卡上省那幾塊錢一律用CUID卡反復測、隨便寫再沒出現過“陣亡”問題。這里也提醒一下如果你準備長期隨身攜帶的復制卡直接在CUID和原裝白卡之間選普通UID卡只適合做一次性測試。5.3 手機錢包明明添加成功刷不開——天線位置和射頻參數的鍋有一張停車場卡特別有意思錢包里顯示“門禁卡添加成功”操作絲一般順滑結果我開車到地庫門口抬桿毫無反應。當時我心想完了又是協議不兼容都準備倒車掏出實體卡了。后來在閘機前磨嘰了幾分鐘無意中把手機背面左上角貼著讀卡器試了一下桿竟然抬起來了。我才意識到問題不在協議在于手機錢包模擬出的卡信號比實體卡弱很多NFC天線又通常在攝像頭附近而我習慣用手機中部偏下的位置去刷剛好完美錯過了天線區域。大多數手機NFC感應區域在攝像頭模組附近凸起這一帶不同品牌差異還不小。我的建議是第一次使用模擬門禁卡在讀卡器前多換幾個位置和角度測試找到那個“敏感區”。另外手機殼也會削弱信號金屬殼尤其嚴重實測很多刷不開的問題在摘掉手機殼后立刻消失。5.4 讀卡讀到一半報錯——卡密碼錯誤次數累計和防破解鎖卡還有一次我拿新買的一張門禁卡做測試讀卡過程順利但寫卡階段連續報錯提示認證失敗。換了一張CUID卡也一樣。我一開始以為是空白卡質量問題后來才發現是原卡本身帶有防復制保護機制當它被同一讀卡器反復進行非正常認證嘗試后會觸發鎖定邏輯后續任何讀寫操作都會失敗。這種“防復制卡”在新建小區里已經很常見了卡片內置了狀態寄存器檢測到持續的錯誤認證嘗試會進入一個不可恢復或需要門禁主機重新授權的狀態整個過程不需要聯網完全是卡片自己的安全策略。所以我的經驗是讀卡或密鑰恢復最多試三輪每輪之間停頓一下不要在一個晚上狂刷上百次。一旦發現卡“變磚”了別慌帶上有效證件找物業重新寫卡就行前提是你確實是這個家的業主或租戶。5.5 想要“一卡走天涯”先看合不合法、值不值把所有卡都折騰進手機之后我確實爽了一陣子。但后來冷靜下來我意識到不是所有卡都該這么干也不是所有卡都適合合成到一部手機里。先說合規。門禁卡是物業或公司發放的通行憑證復制到手機里這個操作本身在多數物業管理條例里是不被允許的。我在這篇文章里分享的是個人技術探索和經驗記錄前提是你對處理對象擁有合法權利——比如你家小區的門你公司的閘機或者你花錢辦的會員卡。未經授權復制他人卡、破解陌生卡的“卡密”輕則違規重則踩到法律紅線這個邊界一定要拎清楚。再說值不值。為了把一張食堂卡寫進手機我花了兩小時研究協議、買卡、調試最后終于成功。但食堂那張卡三個月后過保系統升級后手機模擬的所有卡全部失效我又得重新走一遍流程。如果你的卡數量不多而且沒有“出門只帶手機”的執念其實一個靠譜的卡包收納盒性價比反而更高。技術折騰的樂趣在于弄懂原理而不是為了技術而技術。6. 安全邊界中繼攻擊、屏蔽與合規自測6.1 中繼攻擊到底是怎么回事研究NFC和射頻卡的時候我不可避免地接觸到一個詞NFC中繼攻擊。這里我也順手整理一下因為它和“RFID射頻卡寫入手機NFC”這個話題在安全維度上緊密相關。中繼攻擊的原理不復雜攻擊者不需要破解卡里的任何數據只需要準備兩個設備。其中一個偽裝成“讀卡器”靠近你的卡把你的應答信號實時轉發給另一個設備另一個設備偽裝成“卡片”貼近門禁讀卡器接收讀卡器的挑戰指令再回傳給你的卡。整個過程就是“延長天線”的操作讀卡器那頭看到的是一個正常響應的卡而真正的卡其實遠在幾米甚至幾公里之外。為什么中繼攻擊能成功因為NFC/RFID這種無接觸感應技術讀卡器默認“能和我通信的就是近距離合法卡”它不會去判斷射頻場里那個應答信號是真卡直接產生的還是被中繼設備接力轉發的。這樣繞過的是“距離限制”而不是“加密破解”所以加密的門禁系統同樣可能被中繼。普通用戶不需要恐慌因為實施中繼攻擊需要設備靠近你防護手段也很成熟。給門禁讀卡器增加雙向認證和動態挑戰碼是中繼攻擊的克星動態碼場景下重放的信號很快就失效了。6.2 怎么防CPU卡、雙向認證和“卡不離身”作為個人用戶最有效的防護是讓卡片保持“可控狀態”卡不離身、不隨便把卡借給別人、不把卡放在衣服口袋里最好的“順手位置”。攻擊者要中繼你的卡前提是能靠近到你卡信號范圍內如果把卡塞在屏蔽卡套里或放在包內層金屬分隔袋里信號根本不會漏出來。從系統建設者角度看防中繼的根本手段是用CPU卡代替老式存儲卡。CPU卡里有一塊獨立的安全芯片支持動態挑戰-響應認證讀卡器每次發出一個隨機數挑戰CPU卡內部用安全密鑰計算應答每次口令都不一樣中繼設備只能原樣轉發一旦門禁系統和卡之間的會話有時間戳或序列號校驗中繼鏈路就暴露了。新建小區和企業門禁系統現在越來越傾向于CPU卡方案這也是很多“手機模擬門禁卡”方案失效的大背景——不是手機軟件不夠好而是門禁系統的安全等級已經提高到了你無法單純靠復制dump來模擬的程度。6.3 RFID屏蔽卡套不是智商稅我自己做過法拉第實驗關于RFID屏蔽卡套市面上爭議很大。有人說是智商稅有人說是剛需。我自己做了一個最簡單的實驗來驗證拿一張能正常刷開的IC卡用錫紙嚴嚴實實包了三層然后去貼門禁讀卡器。結果當然刷不開。原因在于RFID卡本身沒有電池芯片工作所需的能量全靠讀卡器發出的電磁場感應供電。當錫紙形成一個閉合導電層時13.56MHz的交變磁場被屏蔽掉卡片芯片壓根收不到足夠的能量自然無法應答。這就是法拉第籠的基本原理。這個實驗說明屏蔽卡套確實有效但也說明一個反常識的事實如果你擔心的是“中繼攻擊”那真正要做的不是買一個很貴的卡套而是把卡放在金屬外殼的卡包里或者干脆用錫紙包一層效果等同。至于那些宣稱能屏蔽并同時支持NFC手機讀取的“雙功能卡套”實際使用效果要打問號——既然屏蔽了磁場手機NFC又如何感應卡數據呢這類產品通常是做了分區設計卡片插在屏蔽區手機貼的是另一個開放區別被宣傳語繞進去了。從安防角度講真正該升級的永遠是讀卡端的安全機制而不是用戶端的卡套。卡套只是被動防御解決不了系統本身的認證漏洞。折騰完這一整圈我的鑰匙包從五張卡變成了一張備用卡和一個卡套手機NFC里躺著三張高頻IC卡的模擬數據。最深的一個體會是射頻卡能不能寫進手機NFC從來不是“軟件操作技巧”的問題而是物理頻段和協議層在源頭上畫出的邊界。125kHz的ID卡再怎么折騰也進不了手機加密扇區解不開就復制不了門禁系統一旦用了CPU卡和動態認證所有旁門左道都會失效。如果你看完這篇文章想對自己的卡做一次“能不能寫進手機”的體檢我建議動手順序是先用NFC TagInfo確認卡類型再判斷扇區是否加密最后才是買CUID卡、跑MCT、錄錢包。整個過程大概率花不了幾個錢但能幫你搞清楚現代非接觸技術的底層脈絡。至于那些因為安全機制無法模擬的卡就安心多帶一張實體卡吧——技術解決了能解決的問題剩下的交給規則和常識反而是最省心的方案。