電氣特性:程序員
容量爲8K位EEPrOM;算法
● 分爲16個扇區,每一個扇區爲4塊,每塊16個字節,以塊爲存取單位;編程
● 每一個扇區有獨立的一組密碼及訪問控制;數據結構
● 每張卡有惟一序列號,爲32位;性能
● 具備防衝突機制,支持多卡操做;測試
● 無電源,自帶天線,內含加密控制邏輯和通信邏輯電路;加密
● 工做溫度:-20℃~50℃;spa
● 工做頻率:13.56MHZ;.net
● 通訊速率:106KBPS;接口
● 讀寫距離:可達10mm(與讀寫器以及卡天線尺寸有關);
● 數據保存期爲10年,可改寫10萬次,讀不限次。
工做原理:
卡片由一個卷繞天線和特定用途集成電路模塊組成。其中,模塊由一個高速(106KB波特率)的RF接口。一個控制單元和一個8K位E2PROM組成。讀寫器向MF1卡發出一組固定頻率(13.56MHZ)的電磁波,卡片內有一個LC串聯諧振電路,其頻率與讀寫器發射的頻率相同,在電磁波的激勵下,LC諧振電路產生共振,從而使諧振電容內有了電荷,在這個電容的另外一端,接有一個單向導通的電子泵,將電容內的電荷送到模塊存儲電容內儲存,當所積累的電荷達到2V以上時,此電容可做爲電源向模塊電路提供工做電壓,將卡內數據發射出去或接收讀寫器的數據。
存儲結構:
MF1卡分爲16個扇區,每區有4塊(塊0~塊3),共64塊,按塊號編址爲0~63。第0扇區的塊0(即絕對地址塊0)用於存放芯片商,卡商相關代碼,已經固化不可更改。其餘各扇區的塊0,塊1,塊2爲數據塊,用於存貯用戶數據;塊3爲各扇區控制塊,用於存放密碼A,存取控制條件設置,密碼B。各區控制塊結構相同,以下所示:
各區控制塊3 結構 |
字節號 |
0 1 2 3 4 5 |
6 7 8 9 |
10 11 12 13 14 15 |
控制值 |
FF FF FF FF FF FF FF |
07 80 69 |
FF FF FF FF FF FF |
|
說明 |
密碼A(0~5字節) |
存取控制(6~9字節) |
密碼B(10~15字節) |
控制屬性:
每一個扇區的用戶密碼和存取控制條件都是獨立設置的,能夠根據實際須要設定各自的密碼及存取控制。在存取控制中,每一個塊都有三個控制位相對應,用以決定某數據塊或控制塊的讀寫條件,定義爲:"CXxy",見表1所示。
其中CX表明每塊控制位號(C1~C3),x表明某塊所屬扇區號(0~15), y表明該扇區內某塊號。例如C1x2 即爲x扇區內塊2的第1控制位,餘此類推。
注:控制位的設置存放在存取控制字節中,見表2所示。
表1:控制位定義"CXxy"
塊0 |
C1x0 |
C2x0 |
C3x0 |
用戶數據塊,(0區0塊除外) |
塊1 |
C1x1 |
C2x1 |
C3x1 |
用戶數據塊 |
塊2 |
C1x2 |
C2x2 |
C3x2 |
用戶數據塊 |
塊3 |
C1x3 |
C2x3 |
C3x3 |
密匙存取控制塊 |
表2:三個控制位在存取控制字節中的位置(注:" _b" 表示取反)
位號 字節號 |
bit 7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節6 |
C2x3_b |
C2x2_b |
C2x1_b |
C2x0_b |
C1x3_b |
C1x2_b |
C1x1_b |
C1x0_b |
字節7 |
C1x3 |
C1x2 |
C1x1 |
C1x0 |
C3x3_b |
C3x2_b |
C3x1_b |
C3x0_b |
字節8 |
C3x3 |
C3x2 |
C3x1 |
C3x0 |
C2x3 |
C2x2 |
C2x1 |
C2x0 |
字節9 |
BX7 |
BX6 |
BX5 |
BX4 |
BX3 |
BX2 |
BX1 |
BX0 |
所屬塊 |
塊3控制位 |
塊2控制位 |
塊1控制位 |
塊0控制位 |
塊3控制位 |
塊2控制位 |
塊1控制位 |
塊0控制位 |
各扇區數據塊0~塊2的三個控制位以正反兩種形式存在於塊3的存取控制字節中,它決定了該塊的訪問權限(例如進行減值及初始化值操做必須驗證KEY A,進行加值操做必須驗證KEY B,等等)。三個控制位在存取控制字節(6~9字節)中的權限以下(陰影區的存取控制爲廠商初始值;字節9爲備用字節,默認值爲69):
註釋:表3中,KeyA|B表示密碼A或密碼B,Never表示沒有條件實現。
表3:數據塊的存取控制權限(x=0~15扇區; y=塊0,塊1,塊2)
C1xy C2xy C3xy |
讀 |
寫 |
加值 |
減值,初始化 |
0 0 0 |
KeyA|B |
KeyA|B |
KeyA|B |
KeyA|B |
0 1 0 |
KeyA|B |
Never |
Never |
Never |
1 0 0 |
KeyA|B |
KeyB |
Never |
Never |
1 0 0 |
KeyA|B |
KeyB |
KeyB |
KeyA|B |
0 0 1 |
KeyA|B |
Never |
Never |
KeyA|B |
0 1 1 |
KeyB |
KeyB |
Never |
Never |
1 0 1 |
KeyB |
Never |
Never |
Never |
1 1 1 |
Never |
Never |
Never |
Never |
例如,某區塊的3個存取控制位C1xy,C2xy,C3xy=000時(廠商預設的初始值,見陰影區),驗證密碼A或密碼B正確後可讀出/可寫入/可加值/減值及初始化操做。該初始值主要供製卡和髮卡商檢測心片功能使用,確認全部讀寫/加密功能均正常(存取控制初始值"ff078069",請參考"步驟舉例"自行驗算)後,再依據使用須要和參照表4表5設置新的存取控制權限值,進行用戶數據操做和修改新的用戶密碼。
再如當某區塊0的存取控制位C10,C20,C30的設置均=100時,驗證密碼A或密碼B正確後可讀出其數據;只有驗證密碼B正確後纔可容許改寫數據;不能進行加值,減值等操做。
以廠商初始值"FF 07 80 69"爲例,說明存取控制條件對數據塊的影響。初始存取控制默認值(C1x0,C2x0,C3x0=000;C1x1,C2x1,C3x1=000;C1x2,C2x2,C3x2=000;C1x3,C2x3,C3x3=001)和KeyA,KeyB默認值(由廠商提供,一般爲:ffffffffffff)。那麼塊3中,廠商初始的存取控制值以下表所示:
表4:塊3中廠商初始存取控制值(-號表示須要取反)
Bit# |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
字節6 |
1- |
1- |
1- |
1- |
1- |
1- |
1- |
1- |
字節7 |
0 |
0 |
0 |
0 |
0- |
1- |
1- |
1- |
字節8 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
CXx3 |
CXx2 |
CXx1 |
CXx0 |
CXx3 |
CXx2 |
CXx1 |
CXx0 |
若是用戶要讀到塊1的內容,對照表4和查對錶3可知,當存取控制C1x1,C2x1,C3x1=000時,必需正確校驗KEY A或KEY B後纔可容許讀取塊1的內容,不然,MF1讀寫器會因校驗某區密碼出錯而沒法讀取和傳送數據!以此類推,用戶要進行其它操做時,可根據存取條件,對照表2~4來決定其操做權限。
表5列出了飛利浦公司對MF1卡的8種控制位設置值所對應的存取控制權限表,供發卡商及用戶設置MF1卡使用權限時參考,其釋義以下:
表5:塊3的存取控制權限(供發卡商及用戶設置權限時參考)
控制位設置值 |
密碼A權限 |
存取控制權限 |
密碼B權限 |
|||||
C1x3 |
C2x3 |
C3x3 |
讀 |
寫 |
讀 |
寫 |
讀 |
寫 |
0 |
0 |
0 |
Never |
KeyA |
KeyA |
Never |
KeyA |
KeyA |
0 |
1 |
0 |
Never |
Never |
KeyA |
Never |
KeyA |
Never |
1 |
0 |
0 |
Never |
KeyB |
KeyA|B |
Never |
Never |
KeyB |
1 |
1 |
0 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
0 |
0 |
1 |
Never |
KeyA |
KeyA |
KeyA |
KeyA |
KeyA |
0 |
1 |
1 |
Never |
KeyB |
KeyA|B |
KeyB |
Never |
KeyB |
1 |
0 |
1 |
Never |
Never |
KeyA|B |
KeyB |
Never |
Never |
1 |
1 |
1 |
Never |
Never |
KeyA|B |
Never |
Never |
Never |
例如:當塊3的存取控制位C13C23 C33 = 100時,表示:密碼A:不可讀(隱藏),驗證KEYB正確後,可寫(或更改);存取控制:驗證KEYA或KEYB正確後,可讀不可寫(寫保護);密碼B:不可讀,驗證KEYB正確後可寫。
又如:當塊3的存取控制位C13C23 C33 = 110或者111時,除存取控制值須要在驗證KEYA或KEYB正確後僅僅可讀外,其它如存取控制值的改寫,密碼A,密碼B的讀寫權限均被鎖死而沒法訪問!
MF1卡修改各區塊控制位值和數據——舉例
(一),以經常使用設置"08 77 8F 69"控制條件爲例,先搞清楚它――具備的訪問權限。
一、對"08 77 8F 69"值進行計算,該值定位於各區塊3的6,7,8,9四個字節內,字節6=08,字節7=77,
字節8=8F,字節9=69(默認值,不予計算)。
二、例如:字節6=08,對應其二進制值=00001000,則對6,7,8這三個字節進行二進制轉換結果見下表:
字節6 = 0 0 0 0 1 0 0 0 |
字節7 = 0 1 1 1 0 1 1 1 |
字節8 = 1 0 0 0 1 1 1 1 |
三、參照表2及表4算法,字節6的所有二進制值取反,字節7的低四位二進制值取反,字節8不變,獲得:
字節號 |
對應二進制值 |
位置 |
高4位 |
位置 |
低4位 |
字節6 |
0 0 0 0 1 0 0 0 |
C2Y |
1 1 1 1 |
C1Y |
0 1 1 1 |
所屬塊位 |
塊3 塊2 塊1 塊0 |
|
塊3 塊2 塊1 塊0 |
四、對以上6,7,8字節的存取/控制二進制已取反值,依照表2,表4塊位轉換爲各塊控制值,以下表:
塊3位 |
字節7,字節6,字節8 = C13,C23,C33 = C1Y,C2Y,C3Y = 0 1 1 |
塊2位 |
字節7,字節6,字節8 = C12,C22,C32 = C1Y,C2Y,C3Y = 1 1 0 字節7,字節6,字節8 = C11,C21,C31 = C1Y,C2Y,C3Y = 1 1 0 字節7,字節6,字節8 = C10,C20,C30 = C1Y,C2Y,C3Y = 1 1 0 |
注意:高4位的各塊值=低4位的各塊值時,其值可用。高4位值≠低4位值時,其值不可用!
五、查對訪問權限(數據存取控制依照表3,塊3存取控制依照表5),該例"08 77 8F 69"的訪問權限爲:
◆ 塊3 = 011:權限爲:KeyA,KeyB均不可讀,驗證KeyB正確後可改寫KeyA和KeyB,驗證KeyA或KeyB正確後可讀"控制位"。在此可見密鑰KeyB的重要性,KeyB不正確是沒法看到塊3控制值,更沒法修改密鑰。
◆ 塊2 = 塊1 = 塊0 =110:權限爲:驗證KeyA或KeyB後可讀該塊數據,減值以及初始化值,只有驗證KeyB 正確後纔可改寫該塊數據,在此能夠看到密鑰KeyB對改寫數據塊也起着關鍵性做用。
(二)、"08 77 8F 69" 控制條件設置步驟:
由(一)可知:KeyB設置後爲不可讀,而且改寫數據和改寫控制位都須要正確驗證它,故KeyB設置後程序
操做員必須妥善保管KeyB值,不然之後改寫數據和控制位時,不正確的KeyB值將沒法實現卡的任何操做!!!
一、修改塊3控制位的值:最初的各區塊3內的KeyA,KeyB都是廠商12個"F"默認值(KeyA在任何條件下均爲不可讀,大部分讀寫機程序表現KeyA爲未知的12個"0" ),在修改控制值時,先不要修改默認密碼KeyA和KeyB,在控制位修改爲功後,再去更改新密碼值。即先對塊3的控制位進行修改(默認值FF 07 80 69改成新值08 77 8F 69)並執行寫操做。控制位寫成功後,KeyB亦爲12個"0"不可讀了,但還是隱藏的12個"f"默認值。
二、修改塊3的KeyA和KeyB值:控制位0877 8F 69值寫成功後,驗證KeyB正確後方可改寫KeyA和KeyB新密碼。在密碼操做模式鍵入要改寫區塊之先前密碼B(先前密碼爲默認值時,則不需改動和加載),加載後反回數據操做模式,再進行讀值,KeyA和KeyB值的改寫。
三、修改塊0~塊2中數據:由新的控制條件08778F69可知,要修改數據,必須先驗證KeyB,故先設置密碼操做爲KeyB認證方式,加載後再返回數據操做模式,對要修改的數據塊進行值的改寫操做。
四、上例中分析了"08 77 8F 69"的訪問條件及其改寫步驟,對用戶的其它控制條件亦可參照應用。
MF1卡常見問題及處理建議
① 盲目操做:形成某些區塊誤操做被鎖死不能再使用。應當仔細參考表3表5的控制權限後,予先得出操做後的結果是否適合使用要求,而且列出操做順序表單再操做。最好受權程序員對塊3的設置做專人操做。
② 丟失密碼:再讀寫時形成密碼認證出錯而不能訪問卡。特別要求在對MF卡進行塊3編程操做時,必須及時記錄相關卡號的控制值,KeyA,KeyB等,並且應當有專人管理密碼檔案。
③錯誤設置:對MF1卡的塊3控制塊瞭解不透徹,錯誤的理解形成設置形成錯誤的設置。依照表2可知,目前Mf1卡的控制塊僅只有8種數據塊訪問控制權限和8種控制塊設置權限,超出這16種權限的其餘代碼組合,將直接引發錯誤設置而使卡片報廢!
④ 極端權限:當塊3的存取控制位C13C23 C33 = 110或者111時,稱爲極端權限。除特殊應用外通常不被使用!啓用前認真權衡對密碼讀寫,存取控制的鎖死是否必要,不然,數據加密後即便有密碼也沒法讀取被鎖死的數據區塊(看不見)!
⑤ 設備低劣:低劣的設備將直接影響卡的讀寫性能。對MF卡進行塊3編程操做的設備,特別要求其性能必須十分可靠,運行十分穩定!建議選用由飛利浦公司原裝讀寫模塊構建的知名讀寫機具!
⑥編程干擾:在對塊3進行編程操做時,不能夠有任何的"IO"中斷或打擾!包括同時運行兩個以上程序干擾甚至PC機不良的開關電源紋波干擾等,不然,不成功的寫操做將形成某個扇區被鎖死的現象,導致該扇區再次訪問時出錯而報廢。
⑦ 數據出錯:在臨界距離點上讀卡和寫卡形成的。一般的讀卡,特別是寫卡,應該避免在臨界狀態(剛能讀卡的距離)讀卡。由於臨界狀態下的數據傳送是很不穩定的!容易引發讀寫出錯!
⑧ 人爲失誤:例如,密碼加載操做失誤,誤將KeyA加載爲KeyB;或者是誤將其餘制卡廠約定的初始密碼值如a0a1a2a3a4a5,b0b1b2b3b4b5加載到本公司生產的MF1卡內;或者在初始狀態下(密碼A=000000000000【隱藏狀態,實際爲ffffffffffff】,控制位=FF07 80 69,密碼B=ffffffffffff【可見】)若不經意地將KeyA=000000000000刪除後又從新輸入12個"0",並加載了它!這時無心中已將KeyA原來12個隱藏的"f",修改爲了12個"0",其後果可想而知!
⑨ 卡片失效:讀寫均無數據傳送,讀寫器報告"尋卡錯誤"!卡片被超標扭曲,彎曲而形成內電路斷裂。
⑩ 讀寫距離過近:與用戶使用的讀寫器性能有關。標準型MF1卡的讀寫距離可達10cm(在飛利浦公司的標準讀寫機具上測試的最大距離),國產知名品牌讀寫器通常可達5-10cm。尺寸較小的匙扣卡,其讀寫距離固然比標準卡近許多,但只要可靠的讀寫距離≥5~10mm以上,通常不會影響正常使用!