劉永清
國家計算機網絡應急技術處理協調中心江蘇分中心
IC卡在生活和工作中十分常見,廣泛應用于公共交通、門禁、電子錢包等領域,具有攜帶方便、操作簡單、使用靈活、一卡多用、抗干擾性能力強、可靠性高等優點。標準的IC卡為長方形,尺寸為85.6×53.98mm2,實際生活中使用的IC卡的外形卻是各種各樣,有卡片式和鑰匙扣等樣式。
IC卡不但外形各異,卡片的種類也是十分繁多。根據讀卡方式可分為接觸式、非接觸式、雙界面卡;根據工作頻率可分為低頻125kHz、高頻13.56MHz、微波2.4GHz等;根據嵌入芯片可分存儲卡、邏輯加密卡、CPU卡。
在眾多種類IC卡中,Mifare 1(簡稱M1)系列IC卡價格便宜,使用最為廣泛。M1卡是一種邏輯加密卡,工作頻率為13.56MHz,讀卡距離可達10cm,與讀卡器的通信速率可達106kbps,因此,一次刷卡交易可以0.1秒內完成。M1卡中的無線智能卡芯片是Philips公司根據ISO/IEC 14443A標準開發,通訊層遵從ISO/IEC 14443A的第1、2、3部分,保密層使用經區域驗證的Crypto-1流密碼,對M1卡的通信數據進行加密。M1卡內置芯片有S50和S70兩種型號,S50與S70主要不同在于卡片的扇區分布和容量不同,S50容量為1K字節,而S70的容量達到了4K字節。S50卡使用最廣泛,本文將重點介紹。
(1)無線傳送數據和能量
M1卡中芯片連接著幾匝線圈,組成一個LC串聯諧振電路,諧振頻率13.56MHz。這些芯片及線圈嵌入到塑料中,這就形成了一張無源的無線智能卡,這種卡不需要電池。讀卡器持續向外發出一組固定頻率的電磁波,其頻率與M1卡的諧振頻率相同,在電磁波的激勵下,LC諧振電路產生共振,從而使諧振電容內有了電荷,當積累的電荷達到2V以上時,即可驅動芯片工作,此時M1卡的高速RF通訊接口就可以與讀卡器傳送數據。
(2)反沖突
智能反沖突(Anticollision loop)功能允許同一工作區域中有不止一張M1卡同時工作,反沖突算法每次只選擇一張卡,確保對被選中的卡正確執行操作,而且同一區域中沒有被選中的卡不會破壞數據,而是回到待機狀態等待新的請求命令。
(3)安全性
M1卡的一個重要特點是保密,防止受到欺騙攻擊。M1卡和讀卡器之間通過三輪確認(Three Pass Authentication)進行相互認證,認證后的數據交互都進行了加密,使得IC卡應用系統具有一定的保密性。
(1)存儲結構
M1 S50卡存儲空間為1K字節,分成16個扇區(Sector),每個扇區又分成4塊(Block),每塊有16個字節,數據的讀寫以塊為存取單位。每個扇區有兩套獨立的48位的密鑰(KeyA, KeyB)。如圖1所示。

圖1 M1卡存儲結構圖
(2)訪問權限
除了0扇區外,每個扇區的0~2塊為數據塊,3塊為區尾(Sector Trailer)。每個扇區的區尾包括6字節KeyA、4字節存儲控制位、6字節KeyB。M1卡每個扇區的存取控制位初始值為FF078069,KeyA,KeyB初始密鑰為FFFFFFFFFFFF。
數據塊和區尾由3個存取控制位[C1XY, C2XY, C3XY]Y=0~3來定義其讀寫權限,這些存取控制位以取反(上劃線表示)和不取反的形式保存在指定的區尾中,其中字節9保留未使用。數據塊和區尾訪問條件的定義如表1和表2所示。

表1 數據塊訪問條件(Y=0~2)

表2 區尾訪問條件
(3)數據塊
根據訪問權限,經過密碼驗證后,就可以訪問數據塊。M1卡的數據塊根據讀寫方式又分為兩種類型:
①讀寫塊
讀寫塊用作為普通讀寫的16字節數據塊,只能進行讀塊或寫塊。
②值塊
值塊主要用于電子錢包功能,可以讀值、加值、減值、轉存、恢復,值塊中的數據包括符號位共4字節。為了提供檢錯糾錯能力,數據被存儲3次,其中原始數據保存2次,取反數據保存1次。剩余4字節用于保存存儲段的地址,原始地址和取反地址各保存2次。
(4)廠商塊
0扇區0塊與其他數據塊不同,稱為廠商塊,標準M1卡的廠商塊是只讀的,有的兼容M1卡的廠商塊可以更改,這種卡稱為UID卡。廠商塊共16字節,各字節的定義如下:
0~3字節為序列號(UID, Unique IDentifier)。
4字節為校驗字節(BCC, Byte Calculation Check),是0~3字節的異或值。
5字節為選擇確認碼(SAK, Select AcKnowledge),S50的SAK為08,S70的SAK為18,CPU卡的SAK為20,模擬CPU卡的SAK為28。
6~7字節為請求響應碼(ATQA, Answer To reQuest, type A),S50的ATQA為0004,表示UID長度為4字節,遵守面向比特的防沖突機制,S70的ATQA為0002,有的CPU卡的ATQA為0344或0008等。
8~15字節為廠商數據。
為近一步理解M1卡的工作原理,表3列出了文獻中實驗偵聽的IC卡通信過程數據。

表3 讀卡器與M1卡通信數據舉例
通過分析表3的通信數據可以得出M1卡與讀卡器的通信過程如下:
(1)讀卡器輪詢
①讀卡器不停地發送REQA(Request Command, Type A),以探測是否有A類型的IC卡靠近讀卡器。
(2)IC卡響應
②IC卡中的LC諧振電路接收到讀卡器的電磁波,因共振產生電荷,給IC卡芯片供電,IC卡復位后進入空閑狀態,并偵聽讀卡器發出的命令。當收到讀卡器的REQA命令后,IC卡回復ATQA碼,并進入準備狀態。
(3)防沖突循環檢測
③讀卡器發出SEL NVB(Select Number of Valid Bits),以進行沖突檢測,其中NVB = 20表示有效命令為2個字節。
④靠近讀卡器的IC卡都會回應其UID + BCC,M1卡的UID一般為4字節,BCC是一字節的校驗字,是UID的異或值。如果此時有多張IC卡同時回應,那么就可能出現沖突,此時讀卡器就會再次發送SEL NVB命令,直到沒有沖突出現。
(4)選擇IC卡
⑤如果沒有檢測到沖突,那么讀卡器就發出SEL NVB UID CRC_A,以選擇指定UID的IC卡,此時NVB = 70表示有效命令為7個字節。
M1卡的CRC_A的計算公式在ISO/IEC 13239中定義,其生成多項式為x16+x12+x5+1,記為0x11021,但是16移位寄存器的初始值不是0xFFFF,而是0x6363。
⑥被選中的IC卡回應SAK CRC_A,此時IC卡轉換為活動狀態,沒有選中的IC卡保持準備狀態,等待新的請求命令。
(5)三輪確認認證
⑦讀卡器發出Auth Addr CRC_A,指定要訪問的數據塊,并選擇密鑰A或密鑰B進行認證,Auth若為60則表示選擇密鑰A認證,若為61則表示選擇密鑰B認證,然后進入三輪確認認證。
⑧IC卡從對應塊的區尾讀出密鑰和存儲控制位,判斷讀卡器是否為合法訪問,若為非法訪問,則卡片不會響應讀卡器;否則發送一個4字節的隨機數RB(第一輪確認)。
⑨讀卡器將接收到隨機數RB、自己生成的隨機數RA以及其他附加信息利用未公開的Crypto-1算法進行加密,然后將密文發給IC卡(第二輪確認)。
⑩IC卡對接收到的密文進行解密得到RA, RB及附加信息,檢查RB及附加信息是否正確,若檢查正確,則IC卡對讀卡器認證通過,然后將RA加密后發給讀卡器(第三輪確認)。
(6)數據塊讀寫
讀卡器對接收到的密文進行解密得到RA等信息,與IC卡進一步確認了隨機數RA。認證通過后,就可以對指定的數據塊進行讀寫操作,后續的數據通信都是加密傳輸的。
由于每個扇區都有各自的密碼,如果要對其他扇區進行操作,還需進行⑦至步的三輪確認認證。
M1卡雖然有三輪確認認證及數據加密傳輸等安全手段,但是M1卡存在著眾多先天不足的問題,比如:密鑰長度只有48位、密鑰核驗錯誤次數沒有限制等,可以通過不斷地重試,對M1卡進行暴力破解。早期要破解M1卡不但要對M1卡有深刻的了解,而且還要有高深的計算機技術,現在網上有多種破解工具,可以輕松破解M1卡。
PN532是最廉價的破解方案,僅一塊簡易電路板,配合mfoc和mfcuk軟件使用,就可以滿足常規的M1卡的讀寫操作,適合有一定計算機技術的人員使用,可以用于破解M1S50卡,不能破解全加密卡(所有扇區都未使用改初始密鑰和簡單密鑰),適合破解門禁等應用簡單的IC卡。
ACR122U讀寫的主芯片也是PN532,配套有更加完善破解軟件,使用稍微簡單一些,但同樣不能破解全加密卡,對于加密了部分扇區的S70卡也較難破解,性價比一般。
Proxmark3是一款開源的研究平臺,設計圖被公布在Proxmark3官方網站,在網上可以找到配套的軟件,另有社區可獲取對應的固件及技術支持,可破解低頻卡、S50和S70全加密卡及部分特殊卡,功能相當強大,但價格較貴。
M1卡在工作與生活中使用非常廣泛,某市的公共自行車卡就是選用了M1卡。
為了分析該公共自行車卡存儲的數據,筆者用ACR122U對自行車卡進行了破解,破解操作界面如圖2所示,破解完成后生成了二進制dump文件。

圖2 ACR122U破解軟件
下面分析破解生成的dump文件,查看公共自行車卡的各個扇區分別存儲了什么數據。
(1)0扇區數據

圖3 0扇區數據
0扇區第0塊數據塊是廠商塊,SAK=08, ATQA=0004(先傳低字節后傳高字節),由此進一步驗證了該公共自行車卡是M1卡。第1塊數據中“20160303”是制卡時間,其他字節功能未知,最后一個字節為校驗字節,是0x33與當前塊前15字節的異或值。不同自行車卡的第2塊數據都相同,可能是公共自行車卡的標識。0區的密鑰A為常用的密碼“A0A1A2A3A4A5”,密鑰B無明顯特征,存取控制位為69678969。
(2)1扇區數據

圖4 1扇區數據
1扇區第1塊和第2塊數據相同,是為了數據安全存儲而進行的冗余存儲,而且這兩塊數據是作為值塊進行存儲的,數據值為0x00001324,十進制為4900,即自行車卡的余額為49.00元。
(3)2扇區數據
2扇區第0塊數據為自行車的卡號,采用ASCII編碼。第1塊數據為辦卡時間;第2塊數據為持卡人姓名,也是ASCII編碼。前三塊數據的最后一個字節也是校驗字節。
卡片其他的扇區,存儲數據的意義不明顯,有的扇區沒有存儲數據,在此不再列舉分析。

圖5 2扇區數據
破解了IC卡后,就可對卡片余額等數據進行修改,也可對IC進行復制,操作很簡單,導入之前破解生成的dump文件,將該文件寫入空白的UID卡中,即可實現IC卡克隆。筆者測試過,復制的公共自行車卡可以正常借車。
通過對某市公共自行車卡的破解可以看出,由于M1卡的先天不足,導致M1卡很容易受到非法復制、惡意修改數據等攻擊。那么如何提高M1卡的應用安全呢?有以下兩種方案:
(1)將離線刷卡調整為在線刷卡,每次刷卡交易,讀卡器都會將卡內數據與聯網查詢的后臺數據進行比較,發現數據不一致時,將該卡列為黑名單禁止使用。正常刷卡時,在更新IC卡內數據時,也同步聯網更新后臺數據庫數據。這種方式可以降低IC卡被非法破解使用的風險,但是也存在一定弊端,每次交易都要網絡連接后臺數據庫,造成交易時長增加,客戶體驗下降,而且如果網絡中斷,那么刷卡交易將無法進行。
(2)將公共自行車卡由M1卡更換為安全性更高的CPU卡,這種方案能夠徹底解決公共自行車卡的安全問題,但是所有客戶都要重新換卡,自行車站點要更換CPU卡讀卡器,整個公共自行車系統軟件也要更新,工作量較大,需要財政投資升級系統。

圖6 ACR122U復制UID卡軟件
IC卡在生活和工作中普遍使用,本文首先根據使用方式、工作頻率、嵌入芯片對IC卡進行了分類,引入了最為常見的非接觸式13.56MHz的邏輯加密卡——M1卡,M1卡因價格便宜使用最為廣泛;接著重點介紹了M1卡數據分區存儲結構和數據通信過程,指出了當前市面上流行的破解M1卡的三種工具;最后以某市公共自行車卡作為M1的應用案例,對其進行了破解分析,并提出了改進建議。因此,可以說當前許多在用的基于M1卡的交易系統是不夠安全的,隨著CPU卡價格的下降,無論是政府還是企事業單位在新建IC卡應用系統時,建議使用CPU卡代替M1卡,以提高系統安全性。