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