智能卡安全機制比較系列(二)DS SmartCard
文章出處:http://m.luckydriving.com 作者:佚名 人氣: 發(fā)表時間:2012年02月26日
DS Smart Card是飛利浦公司自己開發(fā)的一款CPU卡產品,在早期芯片廠商開發(fā)自己的COS并進行推廣很普遍,現在像英飛凌(前西門子半導體)以及恩智普(前飛利浦半導體)幾乎很少推廣自己的COS,大多時候都是在集中精力推廣自己的芯片。
飛利浦的DS系列智能卡COS結合了ISO7816和ETSI的規(guī)范(也就是SIM卡規(guī)范),在安全機制上采取了和SIM卡類似的密碼驗證方式,即主要通過密碼比對的方式獲取對文件的訪問控制權限。
DS CPU卡一共定義了三種基本的訪問權限,分別是發(fā)卡商權限(0到3)共享權限(0和1),持卡人權限(0和1)。這些訪問權限通過密碼單元中對應的訪問權限區(qū)域來定義,對應的密碼分別是發(fā)卡商密碼和持卡人密碼,而共享權限可以利用發(fā)卡商密碼或者持卡人密碼來獲得。在正確驗證密碼后根據訪問權限區(qū)域設定的數據位就可以獲得其中的一種或幾種權限。一旦獲得了某種權限,那么這種權限就一直保留,直到到卡片斷電,或者是對同一個密碼又進行了錯誤的認證后才會消失。每次正確的密碼認證所獲得的權限是累加的關系。
在可以設定的權限中共有16種狀態(tài),其中0表示始終滿足,即不需要認證,而15表示永遠都不滿足,即拒絕任何訪問。其余的14種狀態(tài)可以分別對應不同的密碼或者密碼組合來實現訪問控制。每個密碼還設計了對應的解鎖密碼,當連續(xù)錯誤驗證密碼超過規(guī)定的次數后,該密碼將被鎖定,只有通過核對解鎖密碼才能解開。下表是訪問控制權限組合:
訪問控制編號 | 需要的訪問控制權限 | 訪問控制條件 |
0 | 不可用 | 始終滿足 |
1 | 10 00 0000 (80H) | 持卡人權限0 |
2 | 01 00 0000 (40H) | 持卡人權限1 |
3 | 00 00 0000 (00H) | 永遠不滿足 |
4 | 00 00 1000 (08H) | 發(fā)卡商權限0 |
5 | 00 00 0100 (04H) | 發(fā)卡商權限1 |
6 | 00 00 0010 (02H) | 發(fā)卡商權限2 |
7 | 00 00 0001 (01H) | 發(fā)卡商權限3 |
8 | 10 00 1000 (88H) | 持卡人權限0和發(fā)卡商權限0 |
9 | 01 00 1000 (48H) | 持卡人權限1和發(fā)卡商權限0 |
10 | 00 10 0000 (28H) | 共享權限0 |
11 | 00 01 0000 (10H) | 共享權限1 |
12 | 00 10 1000 (28H) | 共享權限0和發(fā)卡商權限0 |
13 | 00 10 0100 (24H) | 共享權限0和發(fā)卡商權限1 |
14 | 00 10 0010 (22H) | 共享權限0和發(fā)卡商權限2 |
15 | 不可用 | 永遠不滿足 |
總體上看DS的CPU卡COS主要是依據SIM卡的規(guī)范而設計的安全機制,而其中的文件管理和操作也符合SIM卡的標準,比如對于文件的訪問除了一般的讀寫之外,還有對文件的禁用和啟用,在文件被禁用后不能更改,根據文件建立時規(guī)定的禁用可讀與否來決定文件禁用后是否可讀。
DS卡只支持一種EF文件類型,那就是透明二進制文件。
DS卡還有一種據稱申請專利的認證技術,采用DES的算法來認證卡片上存儲的數據,借以判斷終端明確知道的某個地址的卡片內容對不對,這種認證方式類似于7816規(guī)定的內部認證,但是機制上又有自己的定義,所以也比較有意思。在目前廣泛應用的CPU卡中幾乎沒有人再使用這種機制了。
這種認證機制可以核對更改后的數據是否正確、實現文件內容的密文讀出、實現帶有隨機數的內部認證。實際上終端應該能夠確切地知道卡片中某個位置存儲的4個字節(jié)數據,在認證中并不是采用簡單的密碼比較方式,而是采用隨機數和認證響應的方式進行計算和比較。
認證是依靠當前的EF文件來進行的,在認證進行之前,對于文件的讀權限必須滿足。通過兩步來完成認證,第一步是生成臨時密鑰,第二步是使用第一步得到的臨時密鑰計算認證數據。首先終端發(fā)送8字節(jié)的隨機數據給卡片,卡片把前兩字節(jié)用當前文件的標識給替換掉,使用該數據通過認證密鑰Kc進行DES解密運算來得到臨時密鑰。如果重新進行了正確的文件選擇,那么原來計算得到的臨時密鑰就會被破壞。然后利用臨時密鑰對文件中某個地址的4個字節(jié)數據及其對應的兩個字節(jié)的地址進行DES解密運算,出于冗余和8字節(jié)DES計算的需要,兩個字節(jié)的數據被重復,即8字節(jié)的數據結構為:數據(4字節(jié))+地址(2字節(jié))+地址(2字節(jié))。經過計算得到的8字節(jié)認證數據傳送給終端,終端可以比對計算的結果是否正確,來確定認證是否成功。