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張卡片,但是這樣代價太高,也不現實
密碼學中提出了一個方法,即金鑰分散的方法。
即機具中存放的是使用者卡的母金鑰,每次認證的時候,由母金鑰根據使用者卡的標識
計算得到使用者卡的金鑰。