智能卡按安全級别可以分為三類:存儲器卡、邏輯加密卡和cpu卡,其中cpu卡是安全級别最高的。從“cpu”這個名字可以看出,cpu卡最大的特點就是卡片裡面有一個"cpu",有了cpu我們就可以對卡片程式設計寫入軟體(cos,卡片作業系統),實作複雜的安全加密算法,是以cpu卡的安全性是最高的。與之形成對比的是,存儲器卡和邏輯加密卡中沒有"cpu",盡管在我們看來像mifare1卡看起來似乎也很智能,但m1卡裡存在的僅僅是一個專用內建電路(asic),而不是cpu。
說到非接觸式cpu卡,就不得不提接觸式cpu卡,因為就cpu卡的靈魂——cos來說,二者遵循的協定基本是一樣的,都是iso7816-4,不同之處在于二者進入cos的方式和途徑,在此以複旦微電的非接觸式cpu卡fm1208m01為例,與接觸式cpu卡進入cos的過程對比如下圖所示。
cpu卡在進入iso7816-4協定之前所做的都是一些為卡片和讀寫器對話進行的準備工作。接觸式cpu卡的序列比較簡單,卡片插在卡座上,讀寫器給卡片一個複位(reset)信号,卡片回送一個應答atr(answer
to reset),atr由5部分組成:
(1)初始字元ts:指定字元傳送規則,如果是3b則高電平表示1,低電平表示0,先傳送字元最低有效位;如果是3f
則高電平表示0,低電平表示1,先傳送字元最高有效位。
(2)格式字元t0:指定存在哪些接口字元以及曆史字元的個數。
(3)接口字元 :指定協定參數和協定類型
(4)曆史字元 :說明諸如制造商、晶片型号等一般資訊
(5)校驗字元 :保證atr資料的完整性,使用的是異或校驗
非接觸式cpu卡得到ats(answer to
select)相對步驟多一些,不過這也是迫不得已,這是由卡片本身的“非接觸”特性決定的。不像接觸式卡片那樣一卡一座,非接觸式卡片由于“無源”和“免接觸”,讀寫器的射頻場中可能同時存在多張卡片,為了從多張卡片中選中一張進行操作,讀寫器要啟動防沖突和卡選擇的過程。由于不能保證射頻場中的卡片都是cpu卡,是以讀寫器選中一張卡片後還要向卡片發送rats指令,cpu卡會回送一個ats響應,此ats與接觸式cpu卡的atr也大同小異,同樣由5部分組成:
(1)長度字元tl:指出ats的長度,不包括後面的校驗位元組。
(2)格式字元t0:指定存在哪些接口字元以及卡片能接收的幀的最大長度。
(4)曆史字元 :說明諸如制造商、晶片型号、序列号等一般資訊
(5)校驗字元 :保證ats資料的完整性,使用的是2位元組crc校驗
完成atr或ats應答之後,卡片可以進行pps(protocol
parameter selection)協商,也可以不協商而使用預設值。此後就進入7816-4,執行cos指令進行資料交換了。