最近因?yàn)楣ぷ餍枰M(jìn)行一卡通項(xiàng)目的整合,原來對(duì)于IC卡這塊基本是個(gè)小白,經(jīng)過一段時(shí)間的學(xué)習(xí),簡(jiǎn)單整理一下資料?,F(xiàn)在生活中少不了各種卡,公交卡、地鐵卡、銀行卡、門禁卡、餐卡等等,它們都是什么卡?ID卡?IC卡?另外帶NFC功能的手機(jī)也能刷卡使用,IC卡是如何保存數(shù)據(jù)的?又是如何防止復(fù)制的?本文進(jìn)行了一個(gè)簡(jiǎn)單的歸納總結(jié)。
ID和IC
首先明確本文所指的卡片,特指非接觸卡,即卡片在讀卡器照一下,即可實(shí)現(xiàn)刷卡,接觸卡不在討論范圍(銀行發(fā)行的IC卡,大部分是接觸卡,需要插入特制的pos機(jī)刷卡)。非接觸卡所用到的技術(shù)原理,就是 RFID(射頻識(shí)別技術(shù),Radio Frequency Identification)。原理簡(jiǎn)單來說,就是卡片(一般稱之為標(biāo)簽,tag)接近讀卡器(也叫讀頭,reader),接收讀卡器發(fā)出的射頻信號(hào),憑借感應(yīng)電流所獲得的能量與讀頭進(jìn)行數(shù)據(jù)交互。按照通訊頻率來分的話可以分為ID卡和IC卡。
ID卡
全稱為身份識(shí)別卡(Identification Card),是一種不可寫入的感應(yīng)卡,含固定的編號(hào),主要有臺(tái)灣SYRIS的EM格式、美國(guó)HID MOTOROLA等各類ID卡,通訊頻率為125khz,俗稱低頻卡。這種卡是比較老的卡了,卡片僅有一個(gè)卡號(hào)可用,現(xiàn)在市面上很少見到,安全性非常低(因?yàn)榭ㄌ?hào)可以隨意讀取和復(fù)制),在早期的門禁系統(tǒng)中應(yīng)用的比較廣泛。
IC卡
全稱集成電路卡(Integrated Circuit Card),又稱智能卡(Smart Card)。由法國(guó)人Roland Moreno于上個(gè)世紀(jì)70年代初發(fā)明,可讀寫,容量大,有加密功能,數(shù)據(jù)記錄可靠,使用方便。通訊頻率為13.56Mhz,俗稱高頻卡。這個(gè)是目前應(yīng)用最廣泛的卡片。要注意如果手機(jī)含有nfc芯片,也只能讀取和模擬13.56Mhz的IC卡,125khz的ID卡是不支持讀寫的,這也是為什么有些小區(qū)的門禁系統(tǒng)沒法被手機(jī)nfc模擬的原因(用的id卡系統(tǒng),感覺反倒安全了呢 -_-)
IC卡的分類
IC卡按照加密方式分, 可以分為邏輯加密卡和CPU加密卡
邏輯加密卡
在邏輯加密卡內(nèi)部,外部讀寫設(shè)備在訪問邏輯加密卡芯片中的EEPROM單元之前,必須首先發(fā)一組數(shù)據(jù)給硬件邏輯電路,硬件邏輯電路在判斷數(shù)據(jù)的合法性后,才決定是否將邏輯加密卡內(nèi)的開關(guān)閉合。所以邏輯加密卡是通過控制硬件邏輯電路的閉合來保證其卡片數(shù)據(jù)安全讀寫的。

這類型卡比較典型的就是NXP(恩智浦)公司研發(fā)的mifare系列卡片,根據(jù)芯片存儲(chǔ)容量,又可以分為1k,2k,4k等種類,mifare 1k的卡簡(jiǎn)稱M1卡,這個(gè)應(yīng)該是全世界發(fā)行量最大的IC卡了,在公交,學(xué)校,門禁,食堂等各類場(chǎng)景均有廣泛的應(yīng)用。
CPU加密卡
這個(gè)卡就比較厲害了, 你可以認(rèn)為它是一臺(tái)小型微機(jī),卡里面封裝了完整的cpu、rom、ram等部件。由于CPU卡封裝了微處理器,這樣EEPROM的數(shù)據(jù)接口在任何情況下都不會(huì)與IC卡的對(duì)外數(shù)據(jù)線相連接。外部讀寫設(shè)備在與CPU卡進(jìn)行數(shù)據(jù)交換時(shí),首先必須發(fā)送指令給CPU,由CPU根據(jù)其內(nèi)部ROM存儲(chǔ)的片內(nèi)操作系統(tǒng)COS(Chip Operation System)對(duì)指令進(jìn)行解釋,并進(jìn)行分析判斷,在確認(rèn)讀寫設(shè)備的合法性后,才允許外部讀寫設(shè)備與CPU卡建立連接。這無疑使得安全性大大提高。

Mifare 卡數(shù)據(jù)結(jié)構(gòu)
IC卡中最常見的是NXP Mifare系列卡,根據(jù)卡內(nèi)使用芯片的不同,分為
- Mifare S50,簡(jiǎn)稱M1卡,是最常見的卡,出廠固化UID,可存儲(chǔ)修改數(shù)據(jù)
- Mifare UltraLight,簡(jiǎn)稱M0卡,低成本卡,出廠固化UID,可存儲(chǔ)修改數(shù)據(jù)
- Mifare UID Chinese magic card,簡(jiǎn)稱UID卡,M1卡的變異版本,可修改UID,國(guó)外叫做中國(guó)魔術(shù)卡,可以用來完整克隆M1 S50卡的數(shù)據(jù);但是現(xiàn)在新的讀卡系統(tǒng)通過檢測(cè)卡片對(duì)特殊指令的回應(yīng),可以檢測(cè)出UID卡,因此可以來拒絕UID卡的訪問,來達(dá)到屏蔽復(fù)制卡的功能
- 針對(duì)UID卡被屏蔽的問題,另外還有變異版本FUID卡和CUID卡,F(xiàn)UID卡的UID只能修改一次,起防屏蔽作用,專門對(duì)付物業(yè)升級(jí)的防復(fù)卡和防復(fù)讀頭;CUID卡則是針對(duì)FUID卡做的優(yōu)化,支持UID號(hào)重復(fù)擦寫,無需鎖卡自動(dòng)起防屏蔽作用
可以看出,標(biāo)準(zhǔn)的m1是鎖0扇區(qū)0區(qū)塊的,無法寫入,為的是確??ㄆ陌踩筒荒軓?fù)制。后面的那些uid卡,cuid,fuid卡,均是某些不講武德的國(guó)人搞出來的東西。有了這些變種卡,uid基本可以隨意復(fù)制了。
以標(biāo)準(zhǔn)M1卡為例,其容量為1K字節(jié),總共分為16個(gè)扇區(qū),每個(gè)扇區(qū)分為4個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊16個(gè)字節(jié)。每個(gè)扇區(qū)中的塊按照0 ~ 3編號(hào),第3個(gè)塊中包含KEYA(密鑰A)、控制位、KEYB(密鑰B),每個(gè)扇區(qū)可以通過它包含的密鑰A或者密鑰B單獨(dú)加密。
0扇區(qū)0塊是特殊的數(shù)據(jù)塊,用于存放制造商代碼,包括芯片序列號(hào)UID,ATQA和SAK
非加密卡和加密卡的區(qū)別就是,非加密卡中所有扇區(qū)的KEYA和KEYB數(shù)值都是默認(rèn)值FFFFFFFFFFFF;而加密卡中,其中有扇區(qū)的KEYA和KEYB不等于FFFFFFFFFFFF,部分扇區(qū)加密的卡稱半加密卡,所有扇區(qū)都加密的卡稱全加密卡

由上圖可見,每個(gè)扇區(qū)的第3區(qū)塊,里面存放的是密鑰A、B和訪問控制信息,這個(gè)就是m1加密的核心了,其中0-5,10-15字節(jié)分為存放keya和keyb,6,7,8三個(gè)字節(jié)為訪問控制字節(jié),第9個(gè)字節(jié)一般不用。
在訪問控制中每個(gè)塊都有對(duì)應(yīng)的三個(gè)控制位,對(duì)應(yīng)四個(gè)塊就有12位,在加上每位還有取反,總共是24位,正好三個(gè)字節(jié)??刂莆坏亩S數(shù)組列表如下(表一):

三個(gè)控制位以正反兩種形式存在于存取控制字節(jié)中,決定了該塊的訪問方式,所以每個(gè)塊均有2的3次方即8種不同的訪問方式,存取控制字節(jié)整體結(jié)構(gòu)如下(表二):

數(shù)據(jù)塊的存取控制列表(0、1、2塊)(表三):

數(shù)據(jù)塊的存取控制列表(3塊)(表四):

接下來實(shí)際舉個(gè)例子便于理解,以M1默認(rèn)的存取控制策略 08 77 8F 69 來說:
忽略最后一個(gè)字節(jié)69,前三字節(jié)換算為二進(jìn)制為 00001000 01110111 10001111
把其填入表二,得到:
| bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
|---|---|---|---|---|---|---|---|---|
| 字節(jié)6 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
| 字節(jié)7 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 |
| 字節(jié)8 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
根據(jù)表一對(duì)應(yīng)關(guān)系,得出每個(gè)塊的訪問控制關(guān)系:
| 塊 | C1X | C2X | C3X |
|---|---|---|---|
| 塊0 | 1 | 1 | 0 |
| 塊1 | 1 | 1 | 0 |
| 塊2 | 1 | 1 | 0 |
| 塊3 | 0 | 1 | 1 |
這樣我們就得到了塊0-2的訪問控制位均為110,塊3為011,查詢表四,可知塊0-2的權(quán)限為驗(yàn)證KeyA或KeyB后可讀該塊數(shù)據(jù),減值以及初始化值,只有驗(yàn)證KeyB 正確后才可寫入該塊數(shù)據(jù),加值。塊3的權(quán)限為KeyA,KeyB均不可讀,驗(yàn)證KeyB正確后可改寫KeyA和KeyB,驗(yàn)證KeyA或KeyB正確后可讀"控制位"。
IC卡的安全性
ic卡的安全性,大家最關(guān)心的就是卡片加密扇區(qū)能不能被破解和卡片能不能被復(fù)制了,這里面按照破解難度簡(jiǎn)單分個(gè)類:
使用UID
這類場(chǎng)景主要是直接使用了物理卡號(hào)作為唯一ID,因?yàn)槲锢砜ㄌ?hào)直接可讀,可以說毫無難度,之前說的125khz的低頻卡,以及目前市面上絕大多數(shù)用13.56mhz做門禁卡的(包含我自己的小區(qū)),基本都只使用了uid,配合國(guó)產(chǎn)神卡,復(fù)制可以說毫無難度。更不用說國(guó)內(nèi)無節(jié)操的某米和某為,直接在官方錢包里明目張膽的推出復(fù)制卡功能,本質(zhì)上也是復(fù)制了uid
M1加密扇區(qū)
這個(gè)理論上來說還是安全的,之前介紹了在IC卡里封裝了硬件邏輯電路,在密鑰不對(duì)的情況下是讀取不出加密扇區(qū)的內(nèi)容的(邏輯電路開關(guān)不會(huì)開,讀取不到eeprom中的內(nèi)容),遺憾的是Mifare的加密技術(shù)在08年已經(jīng)被破解了(沒破解的時(shí)候也可以靠暴力窮舉拿到密鑰,只是慢一點(diǎn)),以pm3為代表的破解神器技術(shù)已經(jīng)非常成熟,破解成功率在95%以上。所以如果是把資金存入芯片里脫機(jī)消費(fèi)的,理論上都有被復(fù)制的可能性(早期的餐卡基本都是這種離線消費(fèi)模式,現(xiàn)在大部分已經(jīng)聯(lián)網(wǎng)了,即使復(fù)制了卡余額還是改不了的)
cpu加密扇區(qū)
這種因?yàn)橛衏pu每次生成隨機(jī)數(shù),且可以記錄暴力窮舉次數(shù),安全性很高,目前沒有被破解的消息出來,但相應(yīng)的卡片結(jié)構(gòu)也最復(fù)雜,成本較高。目前絕大部分的公交卡應(yīng)該都已經(jīng)是cpu卡。