◆洪 超 許愛(ài)東 楊祎巍 陳華軍 明 哲 卓 越
安全認(rèn)證在安全模塊(ESAM)中的應(yīng)用分析
◆洪 超 許愛(ài)東 楊祎巍 陳華軍 明 哲 卓 越
(南方電網(wǎng)科學(xué)研究院有限責(zé)任公司 廣東 510663)
安全模塊廣泛應(yīng)用于各種嵌入式終端,其中一個(gè)關(guān)鍵任務(wù)就是提供安全認(rèn)證功能。本文對(duì)安全模塊中常用的幾種安全認(rèn)證方法工作原理進(jìn)行了詳細(xì)描述,同時(shí)也詳細(xì)描述了認(rèn)證過(guò)程中使用到的密鑰分散的工作原理,最后對(duì)認(rèn)證對(duì)象之間的關(guān)系、安全認(rèn)證的應(yīng)用場(chǎng)景及安全性進(jìn)行了對(duì)比分析。
ESAM;安全認(rèn)證;密鑰分散
嵌入式安全控制模塊(Embedded Secure Access Module),簡(jiǎn)稱(chēng)安全模塊(ESAM),是一塊采用DIP或SOP封裝具有操作系統(tǒng)的安全芯片。目前被廣泛應(yīng)用于各種嵌入式終端,如電能表、配網(wǎng)終端、充電樁等,提供數(shù)據(jù)安全存儲(chǔ)、數(shù)據(jù)加解密、安全認(rèn)證等功能。
安全認(rèn)證是交互雙方互相確認(rèn)對(duì)方身份的過(guò)程,以便“被操作方”確認(rèn)“操作方”是否具有對(duì)某種資源的訪(fǎng)問(wèn)或使用權(quán)限,防止非授權(quán)訪(fǎng)問(wèn)或操作。參與認(rèn)證的對(duì)象涉及安全模塊、終端、主站和卡片。
本文將先對(duì)安全模塊常用的幾種安全認(rèn)證方式[1-3]的工作原理進(jìn)行詳細(xì)描述,再對(duì)安全認(rèn)證中使用到的密鑰分散的原理進(jìn)行描述,最后對(duì)安全認(rèn)證方式進(jìn)行對(duì)比討論。
外部認(rèn)證用于安全模塊驗(yàn)證終端或主站的合法性,以便獲得對(duì)安全模塊的操作權(quán)限。詳細(xì)步驟如下:
(1)主站或終端首先請(qǐng)求安全模塊生成隨機(jī)數(shù)R。
(2)主站或終端使用約定好的密鑰key對(duì)隨機(jī)數(shù)R進(jìn)行加密,得到密文ER,并將密鑰的kid及密文ER發(fā)送給安全模塊。
(3)安全模塊收到后,根據(jù)kid讀取密鑰并對(duì)隨機(jī)數(shù)R進(jìn)行加密,得到密文ER’。
(4)安全模塊比較ER'和ER,如果相等,則認(rèn)證成功,否則認(rèn)證失敗。
(5)如果認(rèn)證成功,安全模塊則根據(jù)密鑰key對(duì)應(yīng)的安全級(jí)別設(shè)置訪(fǎng)問(wèn)權(quán)限。
外部認(rèn)證的詳細(xì)流程如圖1所示。
圖1 外部認(rèn)證的詳細(xì)流程
內(nèi)部認(rèn)證用于終端或主站驗(yàn)證安全模塊的合法性。詳細(xì)步驟如下:
(1)終端或主站生成隨機(jī)數(shù)R,并連同密鑰的kid一同發(fā)給安全模塊。
(2)安全模塊收到后,根據(jù)kid獲取密鑰key,對(duì)隨機(jī)數(shù)R進(jìn)行加密,得到密文ER',并返回給終端或主站。
(3)終端或主站收到后,根據(jù)kid獲取密鑰key,對(duì)隨機(jī)數(shù)R進(jìn)行加密,得到ER。
(4)終端或主站比較ER'和ER,如果相等,則認(rèn)證成功,否則認(rèn)證失敗。
(5)如果認(rèn)證成功,終端或主站則設(shè)置訪(fǎng)問(wèn)權(quán)限或?qū)踩K置為可信。
內(nèi)部認(rèn)證的詳細(xì)流程如圖2所示。
圖2 內(nèi)部認(rèn)證的詳細(xì)流程
安全模塊安裝于終端中,通常終端本身不具有密碼功能,無(wú)法自行進(jìn)行加解密,密碼功能由安全模塊提供。因此,當(dāng)終端需要驗(yàn)證主站的合法性時(shí),需要借助安全模塊實(shí)現(xiàn)遠(yuǎn)程認(rèn)證。遠(yuǎn)程認(rèn)證的詳細(xì)步驟如下:
(1)主站使用分散因子D對(duì)約定好的密鑰key進(jìn)行分散,得到臨時(shí)密鑰key'。分散因子通常為終端的序號(hào),如終端為電能表,則為表號(hào)。
(2)主站生成隨機(jī)數(shù)R,并使用分散后的密鑰key'進(jìn)行加密,得到密文ER。
(3)主站將隨機(jī)數(shù)R,密文ER及分散因子D一同發(fā)送給終端。
(4)終端把約定好的密鑰kid和分散因子D發(fā)送給安全模塊,要求進(jìn)行密鑰分散。
(5)安全模塊收到后,根據(jù)kid讀取密鑰key,并使用分散因子D進(jìn)行分散得到臨時(shí)密鑰key',并返回密鑰分散成功確認(rèn)。
(6)終端收到確認(rèn)后,將隨機(jī)數(shù)R發(fā)送給安全模塊。
(7)安全模塊使用分散后的密鑰key'加密隨機(jī)數(shù)R,得到密文ER',返回給終端。
(8)終端比較ER'和ER,如果相等,則認(rèn)證成功,設(shè)置訪(fǎng)問(wèn)權(quán)限;否則認(rèn)證失敗。最后將認(rèn)證結(jié)果返回給主站。
遠(yuǎn)程認(rèn)證的詳細(xì)流程如圖3所示。
圖3 遠(yuǎn)程認(rèn)證的詳細(xì)流程
某些終端因網(wǎng)絡(luò)覆蓋或其他原因,不直接與主站進(jìn)行交互,而是通過(guò)智能卡進(jìn)行交互,這時(shí)卡片和終端均要驗(yàn)證需對(duì)方的合法性。同樣通常終端本身不具有密碼功能,因此終端借助安全模塊實(shí)現(xiàn)與卡片之間的雙向認(rèn)證。雙向認(rèn)證的詳細(xì)步驟如下:
(1)卡片復(fù)位后,終端首先請(qǐng)求卡片生成隨機(jī)數(shù)R1。
(2)終端將卡片序號(hào)作為分散因子D,連同隨機(jī)數(shù)R1及事先設(shè)置好的密鑰kid1和kid2發(fā)送給安全模塊。分散因子通常為卡片的序號(hào)。
(3)安全模塊根據(jù)密鑰kid1和kid2讀取密鑰key1和key2。
(4)安全模塊使用分散因子D對(duì)密鑰key1和key2進(jìn)行分散,得到key1'和key2'。
(5)安全模塊使用key1'對(duì)隨機(jī)數(shù)R1進(jìn)行加密得到密文ER1。
(6)安全模塊生成隨機(jī)數(shù)R2,并使用key2'進(jìn)行加密得到密文ER2。
(7)安全模塊將ER1,R2和ER2發(fā)送給終端。
(8)終端將ER1、R2及密鑰kid1和kid2發(fā)送給卡片。
(9)卡片根據(jù)密鑰kid1和kid2讀取密鑰key1和key2。
(10)卡片使用卡片序號(hào)作為分散因子,對(duì)密鑰key1和key2進(jìn)行分散,得到key1'和key2'。
(11)卡片使用key1'對(duì)隨機(jī)數(shù)R1進(jìn)行加密得到密文ER1'。
(12)卡片比較ER1'和ER1,如果不相等,則認(rèn)證失敗,否則認(rèn)證成功,這時(shí)卡片認(rèn)為終端是合法的,設(shè)置終端的訪(fǎng)問(wèn)權(quán)限。
(13)卡片使用key2'對(duì)隨機(jī)數(shù)R2進(jìn)行加密得到密文ER2',并返回給終端。
(14)終端比較ER2'和ER2,如果不相等,則認(rèn)證失敗,否則認(rèn)證成功,這時(shí)終端也認(rèn)為卡片是合法的,設(shè)置卡片的訪(fǎng)問(wèn)權(quán)限,完成雙向認(rèn)證。
雙向認(rèn)證的詳細(xì)流程如圖4所示。
圖4 雙向認(rèn)證的詳細(xì)流程
在認(rèn)證過(guò)程中,密鑰使用時(shí),有時(shí)并不是直接使用,而是將初始密鑰經(jīng)過(guò)分散產(chǎn)生子密鑰。密鑰分散增加了密鑰的多樣性,減少了重復(fù)使用同一密鑰導(dǎo)致密鑰泄露的風(fēng)險(xiǎn)。
密鑰分散其實(shí)是將初始密鑰作為加密密鑰,對(duì)分散因子進(jìn)行加密運(yùn)算,得到加密結(jié)果即為子密鑰。當(dāng)進(jìn)行多級(jí)分散時(shí),上一級(jí)分散產(chǎn)生的子密鑰就作為加密密鑰,對(duì)本級(jí)的分散因子進(jìn)行加密,產(chǎn)生本級(jí)的子密鑰。最后一級(jí)分散得到的子密鑰即為多級(jí)分散最終的子密鑰。密鑰分散流程如圖5所示。
圖5 密鑰分散流程
參與認(rèn)證的幾個(gè)對(duì)象之間的關(guān)系如表1所示,在遠(yuǎn)程認(rèn)證和雙向認(rèn)證中,安全模塊起到輔助的作用,協(xié)助終端進(jìn)行密鑰管理、密鑰分散和數(shù)據(jù)加密,并將加密結(jié)果返回給終端進(jìn)行判斷。
表1 認(rèn)證對(duì)象之間的關(guān)系
外部認(rèn)證多用于安全模塊出廠(chǎng)發(fā)行時(shí),用于模塊初始化、文件創(chuàng)建/刪除、密鑰更新等重要操作前的身份認(rèn)證,防止誤操作或惡意操作。
內(nèi)部認(rèn)證通常用于終端或主站驗(yàn)證安全模塊的合法性,防止安全模塊被惡意替換。由于終端和安全模塊作為一個(gè)整體,因此也可以用于主站驗(yàn)證終端的合法性。
遠(yuǎn)程認(rèn)證用于終端驗(yàn)證主站的合法性,防止惡意分子偽造主站下發(fā)惡意指令。
雙向認(rèn)證則用于卡片與終端之間的相互認(rèn)證,既防止偽終端;也防止了卡片偽造。
在認(rèn)證過(guò)程中,都引入了隨機(jī)數(shù),目的就是防止重放攻擊。在遠(yuǎn)程認(rèn)證和雙向認(rèn)證,以卡片或終端的序列號(hào)作為分散因子進(jìn)行密鑰分散,是為了增加密鑰的多樣性,減低泄露風(fēng)險(xiǎn)。但安全模塊作為終端的輔助旁?huà)煊诮K端MCU,在遠(yuǎn)程認(rèn)證和雙向認(rèn)證過(guò)程中,認(rèn)證結(jié)果是由終端MCU進(jìn)行判斷,一旦MCU被惡意代碼控制,安全模塊就會(huì)被旁路。
本文研究了外部認(rèn)證、內(nèi)部認(rèn)證、遠(yuǎn)程認(rèn)證及雙向認(rèn)證四種常用的安全認(rèn)證方式的工作流程及原理,并對(duì)認(rèn)證對(duì)象之間的關(guān)系、認(rèn)證的應(yīng)用場(chǎng)景及安全性進(jìn)行了對(duì)比分析。
[1]GB/T 16649.4-2010/ISO/IEC 7616-4:2005.識(shí)別卡、集成電路卡第4部分:用于交換的結(jié)構(gòu)、安全和命令.
[2]GB/T 15843.2-2008.信息技術(shù)、安全技術(shù)、實(shí)體鑒別第2部分: 采用對(duì)稱(chēng)加密算法的機(jī)制.
[3]Q/CSG 1209005-2015.中國(guó)南方電網(wǎng)有限責(zé)任公司費(fèi)控電能表信息交換安全認(rèn)證技術(shù)要求.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2018年10期