智能卡安全機(jī)制比較系列(一)CardOS
文章出處:http://m.luckydriving.com 作者: 人氣: 發(fā)表時(shí)間:2012年02月26日
自從智能卡開始進(jìn)入人們的日常生活之后,大家對(duì)于智能卡的安全性普遍看好,但是不同公司的智能卡在安全機(jī)制的實(shí)現(xiàn)方面也存在很多的差異。對(duì)于智能卡應(yīng)用開發(fā)和智能卡COS設(shè)計(jì)人員來(lái)說(shuō),如果能夠更多地了解不同公司的智能卡安全機(jī)制,無(wú)疑會(huì)對(duì)自己的開發(fā)過(guò)程有所幫助。在此將逐步介紹一些流行的智能卡操作系統(tǒng)中各具特色的安全機(jī)制,究竟這些安全機(jī)制孰優(yōu)孰劣,其實(shí)無(wú)關(guān)緊要,只要這種安全機(jī)制能夠滿足系統(tǒng)的安全需求就足夠了。
首先看看早期的CardOS,CardOS是西門子公司基于自己的44C40/80系列芯片而設(shè)計(jì)的,該系列芯片RAM大小256字節(jié),程序空間8K/16K,數(shù)據(jù)空間4K/8K,采用西門子的8051內(nèi)核。CardOS在1995年推出了1.2版本,主要的APDU命令是符合ISO7816-4的文件讀寫操作,采用的安全機(jī)制非常靈活,初看起來(lái)也有點(diǎn)復(fù)雜,但是實(shí)際原理卻是比較簡(jiǎn)單的。雖然目前國(guó)內(nèi)市場(chǎng)上幾乎已經(jīng)沒有什么CardOS產(chǎn)品了,但是了解這個(gè)初期的鼻祖級(jí)的智能卡安全機(jī)制,對(duì)于了解目前市場(chǎng)上流行的COS安全機(jī)制應(yīng)該會(huì)有些幫助。
CardOS采用半字節(jié)作為安全狀態(tài),除卻0和F之外,還有1到E共計(jì)14種狀態(tài),每個(gè)狀態(tài)分別對(duì)應(yīng)要達(dá)到該狀態(tài)需要進(jìn)行的某種安全認(rèn)證操作以及這些認(rèn)證的不同組合方式,這些安全認(rèn)證包括校驗(yàn)PIN或者是C/R (Challenge / Response) 認(rèn)證(也就是我們現(xiàn)在通常所說(shuō)的外部認(rèn)證),而認(rèn)證的組合方式包括“邏輯與”及“邏輯或”。
對(duì)于文件的操作和密鑰的使用可以定義不同的安全狀態(tài),只有滿足定義的安全狀態(tài)后才能進(jìn)行相應(yīng)的文件操作,或者密鑰的使用。無(wú)論是DF還是EF都有一組3字節(jié)的安全狀態(tài)控制字,每半字節(jié)作為一種訪問控制的狀態(tài)標(biāo)識(shí),分別對(duì)應(yīng)著文件的建立、刪除、添加、讀取、更新等操作。
這些安全狀態(tài)及其需要的認(rèn)證或組合全部保存在一個(gè)特殊的內(nèi)部文件STCF(Security Test Control File)安全認(rèn)證控制文件中,該文件是一個(gè)TLV(Tag Length Value)結(jié)構(gòu)的記錄文件,其中第一個(gè)字節(jié)就是1-E這14個(gè)狀態(tài)中的一個(gè)作為TAG,Length根據(jù)認(rèn)證方式的不同而存在差別,Value當(dāng)中的第一個(gè)字節(jié)表示認(rèn)證類型,從中可以看出這個(gè)認(rèn)證是需要PIN認(rèn)證,還是需要C/R認(rèn)證,或者是某幾個(gè)認(rèn)證狀態(tài)的“邏輯與”及“邏輯或”組合。對(duì)于PIN認(rèn)證還可以指出應(yīng)該使用哪個(gè)PIN文件中的哪個(gè)PIN,同樣對(duì)于C/R認(rèn)證也可以指出應(yīng)該使用哪個(gè)密鑰文件中的哪個(gè)密鑰。在CardOS的系統(tǒng)中有一個(gè)安全狀態(tài)bit mask標(biāo)志,用不同的數(shù)據(jù)位來(lái)記錄哪個(gè)安全狀態(tài)經(jīng)過(guò)認(rèn)證得到了滿足。在有些情況下,進(jìn)行DF選擇之后,當(dāng)前DF的認(rèn)證狀態(tài)的bit mask標(biāo)志將會(huì)被清空。
關(guān)于“邏輯與”和“邏輯或”其實(shí)也很簡(jiǎn)單。比如“03”的狀態(tài)表示認(rèn)證第3個(gè)PIN文件中的第2個(gè)PIN,“0B”的狀態(tài)表示需要對(duì)第1個(gè)密鑰文件的第5條密鑰進(jìn)行C/R認(rèn)證。那么我們可以定義狀態(tài)“06”表示“03”和“0B”的邏輯或組合,定義狀態(tài)“07”表示“03”和“0B”的邏輯與組合。我們假設(shè)有兩個(gè)文件EF01和EF02,其中EF01讀寫的安全狀態(tài)分別為“03”和“06”,EF02讀寫的安全狀態(tài)分別為“0B”和“07”。那么在驗(yàn)證了第3個(gè)PIN文件中的第2個(gè)PIN后,即可以讀EF01也可以寫EF01,而對(duì)于第一個(gè)密鑰文件的第5條密鑰經(jīng)過(guò)C/R認(rèn)證后,也可以寫EF01。對(duì)于EF02的寫操作必須同時(shí)滿足以上兩個(gè)認(rèn)證狀態(tài),對(duì)于EF02的讀則只需要C/R認(rèn)證第1個(gè)密鑰文件的第5條密鑰即可。
除了以上的安全狀態(tài)控制機(jī)制之外,CardOS還定義了所謂的線路保護(hù)LINE PROTECTION,在文件的創(chuàng)建過(guò)程中會(huì)定義LPROTF字段,作為線路保護(hù)屬性,有兩種線路保護(hù)模式分別為MAC方式和加密方式,同時(shí)還定義了線路保護(hù)的方向,即從卡到終端以及從終端到卡。而用來(lái)進(jìn)行線路保護(hù)的密鑰只能存儲(chǔ)在SKF(System Key File)系統(tǒng)密鑰文件中。
在CardOS中定義了幾個(gè)默認(rèn)的EF文件標(biāo)識(shí),分別為:0000 = ATR二進(jìn)制文件,0001 = STCF記錄文件,0002 = PIN記錄文件,0003 = SKF系統(tǒng)密鑰記錄文件,0004 = RSF 隨機(jī)數(shù)種子二進(jìn)制文件。CardOS支持最多6層DF文件結(jié)構(gòu),可以通過(guò)文件名、文件標(biāo)識(shí)、文件路徑等方式進(jìn)行文件的選擇。