Mifare 1卡(M1卡、IC卡)讀寫操做及工做原理整理算法
1、IC卡分類概述編程
IC(Integrated Circuit Card)卡,也稱爲智能卡、智慧卡、微芯片卡等。IC卡按讀寫通信方式分爲接觸式、非接觸式和雙界面卡(即同時具有接觸式和非接觸式通信接口)。IC卡由於其固有的信息安全、方便攜帶、比較完善的標準化等優勢,普遍應用於身份認證、銀行、電信、公共交通、車場管理等領域。例如二代身份證、銀行電子錢包、電話卡、公交卡、停車卡等等。安全
按結構分類:
存儲器卡:普通串行EEPROM存儲器,存儲方便,信息簡單,不具有信息加密。
邏輯加密卡:存儲區外增長了邏輯控制,訪問前必須覈對密碼。
CPU邏輯卡:內嵌一顆特殊的單片機,除了內部帶有控制器、存儲器、時序控制邏輯等,還帶有算法單元和操做系統。
併發
接觸式IC卡芯片:
SLE444二、SLE442八、國產444二、國產4428,Atmel24C01/16/64,CPU,SIM,AT10二、AT160四、AT1608,AT24xx、AT45041等
非接觸式IC卡芯片:
S50,S70,UL,TypeA CPU,TypeB CPU等
優化
2、Mifare 1卡概述
Mifare 1卡是屬於非接觸式邏輯加密卡。MIFARE MF1是符合ISO/IEC 14443A的非接觸智能卡。其通信層(MIFARE RF 接口)符合ISO/IEC 14443A標準的第2和第3部分。其安全層支持域檢驗的CRYPTO1數據流加密。
ui
- 非接觸能源和數據傳遞
在MIFARE卡中,芯片鏈接到一個幾匝的天線線圈上,並嵌入塑料中,造成了一個無源的非接觸卡。不須要電池。當卡接近讀寫器天線時,高速的RF通信接口將以106 kBit/s 的速率傳輸數據。 - 防衝突
智能的防衝突功能能夠同時操做讀寫範圍內的多張卡。防衝突算法逐一選定每張卡,保證與選定的卡執行交易,不會致使與讀寫範圍內其餘卡的數據衝突。 - 用戶便捷性
MIFARE是針對用戶便捷性優化的。例如,高速數據傳輸使得完整的票務交易在不到100 ms內處理完畢。所以用戶沒必要在讀寫器天線處停留,造成高的經過率,減小了公共汽車的登車時間。在交易時,MIFARE卡能夠留在錢包裏,甚至錢包裏有硬幣也不受影響。 - 安全
安全的重點是防欺詐。相互隨機數和應答認證、數據加密和報文鑑別檢查和,防止各類破解和篡改,使其更適於票務應用。不可更改的序列號,保證了每張卡的惟一性。 - 多應用功能
MIFARE提供了能夠與CPU卡媲美的真正多應用功能。每區兩個不一樣的密鑰支持採用分級密鑰的系統。
3、特性編碼
- MIFARE RF 接口 (ISO/IEC 14443 A)
· 非接觸數據傳輸並提供能源(不需電池)
· 工做距離:可達100mm (取決於天線尺寸結構)
· 工做頻率:13.56 MHz
· 快速數據傳輸:106 kbit/s
· 高度數據完整性保護:16 Bit CRC,奇偶校驗,位編碼,位計數
· 真正的防衝突
· 典型票務交易: < 100 ms (包括備份管理) - EEPROM
· 1 Kbyte,分爲16個區,每區4個塊,每塊16字節。
· 用戶可定義內存塊的讀寫條件
· 數據耐久性10年
· 寫入耐久性100.000次 - 安全性
· 相互三輪認證(ISO/IEC DIS9798-2)
· 帶重現攻擊保護的射頻通道數據加密
· 每區(每應用)兩個密鑰,支持密鑰分級的多應用場合
· 每卡一個惟一序列號
· 在運輸過程當中以傳輸密鑰保護對EEPROM的訪問權
4、功能說明加密
1. 方框圖說明
MF1 S50集成電路芯片內含1 Kbyte EEPROM、RF接口和數字控制單元。能量和數據經過天線傳輸,卡中天線爲幾匝線圈,直接鏈接到芯片上。再也不須要額外的組件。
· RF接口:調制解調器、檢波器、時鐘發生器、上電覆位、穩壓器
· 防衝突:讀寫範圍內的幾張卡能夠逐一選定和操做。
· 認證:在全部存儲器操做以前進行認證過程,以保證必須經過各塊指定的密鑰才能訪問該塊。
· 控制和算術邏輯單元:數值以特定的冗餘格式存儲,能夠增減。
· EEPROM接口
· 加密單元:域驗證的CRYPTO1 數據流加密,保證數據交換的安全。
· EEPROM: 1 Kbyte,分16區,每區4塊。每一塊有16字節。每區的最後一塊稱做「尾塊」,含有兩個密鑰和本區各塊的讀寫條件。
操作系統
2. 通信原理
命令由讀寫器發出,根據相應區讀寫條件受數字控制單元的控制。
2.1 呼叫(REQUEST STANDARD / ALL)
卡上電覆位後,經過發送request應答碼(ATQA 符合ISO/IEC 14443A),可以迴應讀寫器向天線範圍內全部卡發出的request 命令。
.net
2.2 防衝突循環(ANTICOLLISION LOOP)
在防衝突循環中,讀回一張卡的序列號。若是在讀寫器的工做範圍內有幾張卡,它們能夠經過惟一序列號區分開來,並可選定以進行下一步交易。未被選定的卡轉入待命狀態,等候新的request命令。
2.3 選卡(SELECT CARD)
讀寫器經過select card命令選定一張卡以進行認證和存儲器相關操做。該卡返回選定應答碼(ATS= 08h),明確所選卡的卡型。
2.4 三輪認證(3 PASS AUTHENTICATION)
選卡後,讀寫器指定後續讀寫的存儲器位置,並用相應密鑰進行三輪認證。認證成功後,全部的存儲器操做都是加密的。
2.5 存儲器操做
認證後可執行下列操做:
· 讀數據塊
· 寫數據塊
· 減值:減小數據塊內的數值,並將結果保存在臨時內部數據寄存器中。
· 加值:增長數據塊內的數值,並將結果保存在數據寄存器中。
· 恢復:將數據塊內容移入數據寄存器。
· 轉存:將臨時內部數據寄存器的內容寫入數值塊。
3. 數據完整性
在讀寫器和卡之間的非接觸通信連接中實施下列機制,以保證數據傳輸的可靠性:
· 每塊16 bit CRC
· 每字節的奇偶位
· 位計數檢查
· 位編碼,以區分」1」、 」0」和無信息。
· 通道監控(協議序列和位流分析)
4. 安全
採用符合ISO 9798-2的三輪認證,以保證高度的安全性。
4.1 三輪認證流程
a) 讀寫器指定要訪問的區,並選擇密鑰A或B。
b) 卡從位塊讀區密鑰和訪問條件。而後,卡向讀寫器發送隨機數。(第一輪)
c) 讀寫器利用密鑰和隨機數計算迴應值。迴應值連同讀寫器的隨機數,發送給卡 (第二輪)。
d) 卡經過與本身的隨機數比較,驗證讀寫器的迴應值,再計算迴應值併發送(第三輪)。
e) 讀寫器經過比較,驗證卡的迴應值。
在第一個隨機數傳送以後,卡與讀寫器之間的通信都是加密的。
5. RF接口
RF接口符合非接觸智能卡標準ISO/IEC 14443A。
讀寫器的載波電磁場始終存在(發送中有短暫中斷),由於它用做卡的電源。對於兩個方向的數據通信,每一個數據幀都只有一個起始位。所傳送的每一個字節末尾都有一個奇偶校驗位(奇校驗)。選定塊最低地址字節的最低位首先傳送。最大幀長爲163 bit(16數據字節 + 2個CRC字節 = 16 * 9 + 2 * 9 + 1 起始位)。
6. 存儲器組織
1024 x 8 bit EEPROM存儲器分爲16區,每區4塊,每塊16字節。
在擦處後的狀態下,EEPROM的單元讀爲邏輯「0」,寫後的狀態下讀爲「1」。
6.1 廠商代碼塊
這是第1區的第1塊(塊0)。它含有集成電路製造商數據。出於安全和系統需求,此塊是製造商在生產過程當中編程後寫保護的。
6.2 數據塊
各區均有3個16字節的塊用於存儲數據(區0只有兩個數據塊以及一個只讀的廠商代碼塊)。
數據塊能夠經過讀寫控制位設置爲:
· 讀寫塊,例如用於非接觸門禁管理
· 數值塊,例如用於電子錢包,另有可直接控制存儲值的命令,如增值、減值。
在任何存儲器操做以前必須執行認證命令。
6.2.1 數值塊
數值塊具備電子錢包功能(有效命令:read, write, increment,decrement, restore, transfer)。
數值塊有固定的數據格式,以便於錯誤檢測、糾錯和備份管理。
數值塊只能經過以數值塊格式的寫操做生成:
· 數值:有符號4字節數值。數值的最低字節存儲在最低地址字節。負值以標準的2的補碼形式存儲。出於數據完整性和安全緣由,數值存儲三次,兩次不取反,一次取反。
· 地址(Adr):1字節地址,當進行備份管理時,可用於保存塊的地址。地址保存四次。兩次取反,兩次不取反。在increment、decrement、restore和transfer 操做中,地址保持不變。它只能經過write命令更改。
6.3 尾塊(塊3)
各區均有一個尾塊,存有:
· 密鑰A和B(可選),讀時返回邏輯「0」。
· 該區四個塊的讀寫條件,存儲在字節6至9 。讀寫控制位也指定了數據塊的類型(讀寫塊或數值塊)。
若是不須要密鑰B,塊3的最後6字節能夠用做數據字節。
尾塊的字節9可用於用戶數據。由於此字節享有與字節六、七、8相同的讀寫權限。
7. 存儲器讀寫
必須如前所述,先選定卡並經過認證,才能執行存儲器操做。
存儲器操做:
操做 | 說明 | 使用塊型 |
---|---|---|
讀 | 讀存儲器塊 | 讀寫、數值和尾塊 |
寫 | 寫存儲器塊 | 讀寫、數值和尾塊 |
增值 | 增長塊的內容,並將結果存入內部寄存器 | 數值 |
減值 | 減小塊的內容,並將結果存入內部寄存器 | 數值 |
轉存 | 將內部寄存器內容寫入塊中 | 數值 |
恢復 | 將塊中內容寫入內部寄存器 | 數值 |
對指定塊能夠執行的存儲器操做取決於所用的密鑰和存儲在相應尾塊中的讀寫條件。
7.1 讀寫條件
每一個數據塊和尾塊的讀寫條件均由3個bit定義,並以非取反和取反形式保存在各個區的尾塊中。
讀寫控制位管理着使用密鑰A和B讀寫存儲器的權限。若是知道相關的密鑰,而且當前讀寫條件容許,讀寫條件是能夠更改的。
讀寫控制位 | 有效命令 | 塊 | 說明 | |
---|---|---|---|---|
C13 C23 C33 | read, write | ® | 3 | 尾塊 |
C12 C22 C32 | read, write, increment, decrement, transfer, restore | ® | 2 | 數據塊 |
C11 C21 C31 | read, write, increment, decrement, transfer, restore | ® | 1 | 數據塊 |
C10 C20 C30 | read, write, increment, decrement, transfer, restore | ® | 0 | 數據塊 |
注意:在每一次存儲器讀寫時,內部邏輯會驗證存儲條件的格式。若是發現個是錯誤,這個區將被永久性鎖死。
注意:在下列說明中,讀寫控制位是僅以非取反形式表述的。
MF1的內部邏輯保證了命令只有在經過認證後才被執行。
7.2 尾塊的讀寫條件
對密鑰和控制位的讀寫取決於尾塊(塊3)的訪問控制位,分爲「禁止」、「KEY A」、「KEY B」和「KEY A|B」( KEY A或KEY B)。
控制塊(塊3)的存取控制以下:
(計算出C13,C23,C33便可在下表中找出塊0對應的權限)
7.3 數據塊的訪問控制條件
對數據塊(塊0至2)的讀寫訪問取決於其訪問控制位,分爲「禁止」、「KEY A」、「KEY B」和「kEY A|B」( KEY A或KEY B)。相關訪問控制位的設置肯定了其用途以及相應的可用命令。
· 讀寫塊:容許讀、寫操做。
· 數值塊:運行另外的數值操做——加值、減值、轉存和恢復。在用於非充值卡的一 種狀況(‘001’)下,只可以讀和減值。在另外一種狀況(‘110‘)下,能夠用key B充值。
· 製造廠商塊:只讀,不受訪位控制位設置的影響!
· 密鑰管理:在傳輸配置狀態下,必須用key A 認證。
數據塊(塊0,塊1,塊2)的存取控制以下:
(計算出C10,C20,C30便可在下表中找出塊0對應的權限)
以上是最近調試IC卡功能的概括整理。感謝如下兩位大神的帖子:
https://blog.csdn.net/liujianhua1989/article/details/72639307
https://blog.csdn.net/qizewei123/article/details/80514083?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
但願能夠給到須要的人蔘考。若有描述有誤的還望提醒!