1. 程式人生 > >CPU卡內部認證與外部認證

CPU卡內部認證與外部認證

使用者卡和機具進行雙向認證

問題的提出:

1、傳統的“對暗號”

經典片斷:

問:天王蓋地虎

答:寶塔鎮河妖

互相握手,擁抱,同志呀同志!可終於找到你了

相信大家一定看過間諜電影中地對暗號片斷,但是暗號容易被敵人竊取,於是有了革命者驚險或悲壯的故事,當然了其中不乏有叛徒的出賣。

安全分析:

對暗號中容易出現暗號被第三方竊取的情況,其中存在很大的安全隱患,相信大家一定印象深刻,深有體會。

2、密碼學中對“對暗號”的借鑑

在傳統的對稱密碼學體系中,用金鑰來代表雙方的暗號

暗號=金鑰

當然了,暗號越複雜,即金鑰長度越長越安全

但暗號太複雜,越不容易記住,所以實際應用中金鑰長度也不會太長(現在比價流行使用128位的金鑰)

至於對稱密碼演算法:CPU卡中使用的一般為3DES(112位),其它的128位的如IDEA、AES等

3、密碼學中的雙向認證的實際做法

由於直接對暗號存在不安全的隱患,所以密碼學中並不直接判斷兩個金鑰是否相等

而是採取一次一密的情況。

什麼是一次一密呢?

就是:

1、每次都由一方產生一個隨機數

2、雙方都用金鑰計算隨機數得到一個值

3、比較隨機數的計算值是否相等

這樣就避免了金鑰洩露的問題,因為每次得到的都是臨時值,所以每次都必須去計算隨機數,而

金鑰又是被讀出的,只能用來計算(通過使用指定的金鑰標識來計算)。

所以就算洩露了隨機數的計算值也沒關係,因為下一次這個計算值並不能被使用。

4、CPU卡中的雙向認證的實現

實體:CPU卡 機具

CPU卡中存放一個金鑰

機具中存放和CPU卡相同的金鑰

CPU卡外部認證步驟:

1、CPU卡產生一個8位元組隨機數送給外部程式,CPU卡臨時儲存隨機數在卡內

2、外部程式把8位元組隨機數送給機具,機具用金鑰計算隨機數,得到8位元組隨機數密文

3、外部程式把8位元組隨機數密文送給CPU卡

4、CPU卡在卡片內部解密8位元組隨機數得到隨機數明文,

5、CPU卡在卡片內部把解密後的隨機數和步驟1中臨時存放的隨機數比對,若相等,則外部認證成功

所以外部認證是CPU卡認證機具。

機具內部認證步驟:

1、機具產生一個8位元組隨機數送給外部程式,機具臨時儲存隨機數在機具中

2、外部程式把8位元組隨機數送給CPU卡,CPU用內部認證金鑰計算隨機數,得到8位元組隨機數密文

3、外部程式把8位元組隨機數密文送給機具

4、機具解密8位元組隨機數得到隨機數明文,

5、機具在內部把解密後的隨機數和步驟1中臨時存放的隨機數比對,若相等,則內部認證成功

所以內部認證是機具認證CPU卡

這樣機具和CPU卡從而達到了雙向認證

5、金鑰的分散問題

由於一個機具必須可以認證n張卡片,而每張卡片的金鑰都不相同

一般的想法:必須有n個機具對應n張卡片,但是這樣代價太高,也不現實

密碼學中提出了一個方法,即金鑰分散的方法。

即機具中存放的是使用者卡的母金鑰,每次認證的時候,由母金鑰根據使用者卡的標識

計算得到使用者卡的金鑰。