
隨着網絡應用的日益召开,網絡信息安全也越來越受人們的重視。智能密碼鑰匙是一種帶有微處理器的小型硬件設備,由USB接口和主機建立連接。智能密碼鑰匙的處理器一般用安全設計晶片,用其內置的安全機制,達到密鑰生成、密鑰安全存儲與預置加密算法等功能,和密鑰有關的運算全部在認證設備內部進行。由於智能密碼鑰匙有密鑰無法離開設備的特性,安全性相對高,在網上銀行等安全級別要求相對高的應用中普遍使用。然而,智能密碼鑰匙再說只是一種連接於主機的外圍設備,無法避免有一定局限性。智能密碼鑰匙能提高密鑰存儲的安全性,但實際應用中僅使密鑰存儲安全是不夠的。智能密碼鑰匙的應用流程有安全漏洞,存在受攻擊者利用的機會,從而對應用安全造成威脅。
當前的智能密碼鑰匙普遍遵循PKCS#11規範,大多數智能密碼鑰匙的操作權限控制用PIN碼驗證機制。只需PIN碼顺利获得驗證,就可用智能密碼鑰匙中存儲的密鑰運算。现在多數智能密碼鑰匙用的是靜態PIN碼,而基於靜態密碼的驗證機制早被證明是相當脆弱的,由於當前多數智能密碼鑰匙本身並沒有字符輸入功能,PIN碼往往需用戶顺利获得主機輸入,再發送給智能密碼鑰匙驗證。而用鍵盤鈎子等技術竊取用戶在主機輸入的密碼,這已是較成熟的攻擊手段。當用戶由主機輸入PIN碼時,攻擊者有可能容易地竊取PIN碼,從而得到智能密碼鑰匙的使用權限。由此可知,智能密碼鑰匙能保證密鑰的存儲是安全的,卻很難保證密鑰的使用也安全。用戶身份驗證流程易被攻擊,這是普通的智能密碼鑰匙很難解決的問題。
為分析決這個問題,提出了自帶輸入裝置的智能密碼鑰匙。例如,有指紋認證功能的智能密碼鑰匙,帶有指紋傳感器,用戶由在指紋傳感器掃描指紋來身份認證。整個認證過程都由智能密碼鑰匙自行完成,無須顺利获得主機輸入數據,能有效地防範攻擊者在主機端對智能密碼鑰匙身份認證流程的攻擊。
然而,只解決這個問題還不夠,智能密碼鑰匙的應用流程仍有安全漏洞。
智能密碼鑰匙與主機間是由USB協議通信的,USB協議之上的應用層發的數據對智能密碼鑰匙來說是透明的。儘管智能密碼鑰匙能支持現行的智能卡類設備規範ISO 7816定義的加密傳輸與消息驗證機制,但這也僅能保證主機USB驅動與智能密碼鑰匙之間通信時的數據機密性與完整性。USB驅動在主機端的底層,上層的應用數據對USB驅動而言同樣是透明的。而且,為提高智能密碼鑰匙的易用性,有些智能密碼鑰匙不用私有驅動,而是用計算機預裝的通用USB類設備驅動,如HID、SCSI等。在如此條件下,數據傳進智能密碼鑰匙前,主機端未校驗;數據傳入智能密碼鑰匙後,智能密碼鑰匙也未校驗。如果在主機端數據被篡改,錯誤的數據會被作正常的數據傳進智能密碼鑰匙完成操作。則攻擊者可把被篡改的數據傳進智能密碼鑰匙操作,給偽造的數據生成合法的簽名,因而可冒用合法用戶的智能密碼鑰匙但不被發現。而用尾巴病毒等技術篡改應用數據也是相對成熟的攻擊手段。由此可知,智能密碼鑰匙可以確保操作的安全性,卻很難保證待操作數據的安全性。傳入的應用數據易受攻擊,這同樣是普通智能密碼鑰匙不能解決的問題。
為解決以上問題,在已有的智能密碼鑰匙應用流程中加入交互環節,在實施敏感操作或向敏感數據實施操作時,提醒用戶和智能密碼鑰匙直接交互,因此防止被冒用但未被察覺。這即為交互型智能密碼鑰匙的基本思想。
對於智能密碼鑰匙,用私鑰進行的RSA運算通常分為簽名與解密操作兩種。簽名操作先把需要簽名的數據傳入,用內置的散列算法計算數字摘要,再用私鑰對數字摘要進行RSA運算,得到最終的簽名結果。而解密操作直接將需要解密的數據傳入,利用私鑰進行RSA運算。可以想像,如果攻擊者自行計算數字摘要,再將數字摘要直接傳入進行解密操作,就相當於進行簽名操作。因數字摘要由單向變換計算而來,交互型智能密碼鑰匙無法檢查傳入的數字摘要是否對應着敏感數據。儘管交互型智能密碼鑰匙被設計為遵循PKCS#1規範,如果待解密的數據格式不符合PKCS#1標準就不進行運算,但攻擊者完全可將自行計算的數字摘要組裝為符合PKCS#1標準的格式。只需攻擊者得到了操作權限,就可以繞過檢驗機制,在不驚擾合法用戶的前提下給偽造的敏感數據製造合法的簽名。這無疑是一個安全漏洞。
