湯鵬志,張夢麗,2,丁仕晗,左黎明,2
(華東交通大學1.理學院;2.系統工程與密碼學研究所,江西 南昌330013)
本世紀初,為解決分布式電源接入大電網成本高、控制困難等諸多問題,協調大電網與分布式電源間的矛盾,學者們提出了微電網的概念[1-2]。微電網將發電機、負荷、儲能裝置及控制裝置等結合,對可再生能源和分布式發電技術的整合提供了靈活、高效的平臺,對電力系統產生了重大意義[3-4]。隨著計算機信息技術的發展,微電網也進入信息時代。 微電網中發配電系統、能量管理系統、監視控制與數據采集系統等的應用使得微電網更加智能化、高效化[5-6]。 但在開放式互聯網下,智能微電網本身存在數據被篡改、非法用戶入侵等諸多安全問題,嚴重影響了微電網的正常運行。 其中系統登錄窗口都是系統的首要入口,也是黑客攻擊的主要目標,因此建立一個安全可靠的登錄認證機制至關重要。 早在1996 年,Gritzalis 等人[7]通過概率協議或零知識模型對傳統的基于口令認證機制提出零知識概率組合協議,具有較高的安全性和適用性。 近年來,人們從不同方面對身份認證技術展開了一系列研究。 2017 年,Hezil 等人[8]基于兩種生物特征模式的融合提出了使用人耳和掌紋進行身份識別認證, 但是基于生物特征的身份認證技術應用代價較昂貴, 且存在重放攻擊。2018 年,Wu 等人[9]開發了一個基于擊鍵動力學的安全系統,能夠通過其獨特的打字行為來驗證甚至識別用戶, 但擊鍵身份識別技術需要專門設計的擊鍵裝置和大量用戶擊鍵特征數據, 具有一定局限性。 2019 年,Zawadzki 等人[10]提出了一種基于經典共享秘密的量子身份認證的有趣協議,但其應用范圍具有一定局限性。
為提高微電網系統安全性,設計了一種適用于微電網系統的基于SM2 智能卡安全登錄系統,以SM2 智能卡為核心,配套讀卡器和身份認證服務系統為輔,實現了用戶登錄時的身份認證過程,保證了微電網系統的穩定安全運行。
1) 系統參數。 給定安全參數λ,選取q 階有限域Fq,橢圓曲線E(Fq),E(Fq)的方程的兩個元素a 和b(a,b∈Fq);E(Fq)上的無窮遠點或零點O;E(Fq)上階為n 的基點G=(xG,yG)(G! =O 且xG,yG∈Fq)。
2) 用戶密鑰生成。用戶A 隨機選取整數dA(1≤dA≤n-1),并計算公鑰pA=dAG=(xA,yA)。其中dA作為用戶私鑰秘密保存,pA作為用戶公鑰對外公開。
設待簽名的消息為比特串M,為了獲取消息M 的數字簽名(h,S),作為簽名用戶A 的具體簽名生成操作如圖1 所示。
為了檢驗收到的消息M 及其數字簽名(r,s),作為驗證者的用戶B 具體驗證簽名操作如圖2 操作。

圖1 SM2 數字簽名算法Fig.1 The SM2 signature algorithm

圖2 SM2 數字簽名驗證算法Fig.2 The SM2 signature verification algorithm
一種基于SM2 智能卡安全登錄系統,包括SM2 智能卡、配套讀卡器和身份認證服務系統三部分組成。其中SM2 智能卡是擁有SM2 簽名功能的可進行讀寫的智能卡;配套讀卡器為帶有NFC 功能或者藍牙功能的移動端和藍牙讀卡器;身份認證服務系統由服務器端和數據庫構成,如圖3 所示。

圖3 系統整體架構設計Fig.3 System overall architecture design
身份認證服務系統主要包括服務器端和數據庫。如圖4 所示,服務器端分為前端和后端。前端主要是用于界面展示,這里還用于展示根據隨機數生成的二維碼。 后端主要由初始化模塊、信息處理模塊、 身份認證模塊和通信模塊組成,其中初始化模塊用于將智能卡的用戶信息和公鑰存入到數據庫中, 實現用戶和智能卡的綁定;信息處理模塊用于生成隨機消息的二維碼和解析收到的數據; 身份認證模塊主要用于對收到的SM2 簽名進行簽名驗證;通信模塊用于服務器端和移動端的數據交互。 數據庫主要存放用戶的關鍵信息,如用戶名、用戶公鑰和智能卡ID。

圖4 身份認證服務系統Fig.4 Identity authentication service system
登錄認證流程主要分為兩個階段,一個是用于綁定智能卡和用戶的初始化階段;另一個是用戶登錄系統時的身份認證階段。
在初始化階段主要為每個用戶綁定其所屬的SM2 智能卡, 將SM2 智能卡生成的相應用戶公鑰存到數據庫中,實現一卡一用戶綁定,主要步驟如圖5 所示。

圖5 初始化階段Fig.5 Initialization stage
步驟1:移動端通過其通信模塊連接身份認證服務系統并獲取用戶名UserName,然后通過指令模塊產生使智能卡生成密鑰對和存用戶名UserName 的相關指令碼CommandCode,通過移動端的通信模塊將用戶名UserName 和指令CommandCode 一同發給智能卡。
步驟2:智能卡收到的指令,初始化模塊執行指令生成密鑰對(公鑰Pubkey 和私鑰Privatekey)并將用戶名UserName 存入智能卡中。
步驟3:移動端的指令模塊產生讀取智能卡公鑰的指令,通過其通信模塊操作智能卡獲取智能卡的公鑰Pubkey,然后將公鑰Pubkey 回發給身份認證服務系統。
步驟4:身份認證服務系統將收到的公鑰Pubkey 和用戶名UserName 一同存入到數據庫中,存入成功后,則該用戶的智能卡初始化完成,重復步驟1 到步驟4 直至所有的用戶都被初始化或者所有的智能卡被初始化,即達到一用戶一卡的目的,初始化工作完成。
身份認證階段為系統核心階段,主要為用戶在登錄系統時進行的身份認證過程,若身份認證成功,則可成功登錄系統,反之,登錄系統失敗。 具體步驟圖6 所示。

圖6 登錄認證階段Fig.6 Login authentication stage
步驟1:身份認證服務系統的信息處理模塊定時生成帶有隨機碼信息RandomCode 的二維碼。
步驟2:移動端通過掃描二維碼獲取隨機碼信息,移動端的信息處理模塊對獲取的隨機碼進行哈希處理Hash(RandomCode);同時指令模塊產生操作智能卡進行SM2 簽名和讀取智能卡內用戶名的指令Command-Code;最后通信模塊連接智能卡傳送哈希處理后的消息Hash(RandomCode)和指令CommandCode 發送到智能卡中。
步驟3:智能卡執行指令,智能卡的簽名模塊對收到的消息Hash(RandomCode)進行SM2 簽名算法:Sig=SM2Sign(Hash(RandomCode),PrivateKey);同時讀取智能卡內的用戶名UserName,然后把簽名結果Sig和用戶名UserName 返回給移動端。
步驟4:移動端將接收的簽名結果Sig 和用戶名UserName 轉發回身份認證服務系統。
步驟5:身份認證服務系統根據收到的用戶名UserName 從數據庫中檢索出該用戶對應的公鑰Pubkey,身份認證服務系統的身份認證模塊用公鑰Pubkey 對收到的簽名結果Sig 進行如下SM2 簽名驗證算法:Result=SM2Verify(Sig, Pubkey),若簽名結果Result 為TRUE,則簽名驗證成功,即登錄成功,進入系統主頁;反之,則登錄失敗;同時將簽名結果返回給移動端。
步驟6: 移動端將收到的簽名驗證結果顯示到移動端屏幕上, 用戶可根據簽名驗證結果進行進一步操作,簽名驗證成功,則結束操作;簽名驗證失敗,則可重復步驟1 到步驟5。
SM2 數字簽名算法已在隨機預言機模型[13]下證明SM2 數字簽名方案可以有效抵抗存在性偽造攻擊,并且在文獻[14]證明SM2 數字簽名方案可抗密鑰替換攻擊,這里由于篇幅所限,不再詳細進行證明,因此基于SM2 智能卡的安全登錄系統也具有抗偽造攻擊。
在開放式互聯網下,重放攻擊是攻擊者常用的攻擊手段。 攻擊者通過攔截通信雙方之前有效的通過簽名驗證的報文,然后將舊報文發送到認證服務系統,以破壞身份認證機制。 重放攻擊究其緣由是因為傳送報文消息沒有新鮮性,具有重復利用特性,本文提出的基于SM2 智能卡的身份認證是對隨機數進行簽名,且每隔一分鐘更新隨機數,從而使得簽名具有新鮮性,抵御重放攻擊。
在身份認證階段,首先對身份信息進行哈希運算,然后利用SM2 數字簽名算法對傳輸的身份信息進行簽名,若攻擊者對當前通信的報文進行抗篡改攻擊,將原報文信息(UserName,Sig)篡改為(UserName,Cuangai_Sig) 并傳送到身份認證服務系統進行簽名驗證, 但是因為篡改后的簽名Cuangai_Sig 已不是對原有的RandomCode 運行簽名算法得到的真實簽名,身份認證服務系統在驗證簽名SM2Verify(Cuangai_Sig, Pubkey)時就會驗證失敗,篡改攻擊失敗。
在實驗環境(電腦中央處理器:Intel i5-8500 U,內存:金士頓DDR4 16GB,操作系統:Windows7 64 位操作系統)下,藍牙讀卡器為射頻山東卡爾KT8003 讀卡器;移動端采用Android studio 平臺開發,并調用java版本的BouncyCastle 庫進行相關密碼函數的調用;身份認證服務系統通過微軟提供的Visual Studio 2012 開發平臺利用C#版本的BouncyCastle 實現了登錄認證過程,并模擬了通信雙方傳輸數據的過程,關鍵實現代碼如下。
身份認證服務系統首先生成隨機數,然后根據隨機數生成二維碼,并每5 s 更新下二維碼,防止重放攻擊,實現的關鍵代碼如下。

下面為在Android studio 平臺下讀取SM2 智能卡,調用SM2 智能卡相關密碼協處理器對掃到的二維碼隨機數RandomCode 進行簽名,并將簽名結果Sig 發送給身份認證服務系統的關鍵代碼。


下面為運行在Visual Studio 2012 開發平臺的身份認證服務系統接收到簽名Sig 進行簽名驗證的關鍵代碼,首先接收移動端傳來的用戶名和簽名,然后根據用戶名檢索數據庫,找到該用戶所對應的公鑰,然后用該用戶公鑰驗證簽名,最后將簽名驗證結果返回給移動端,如果驗證成功,則該用戶可以正常進入系統,反之,該用戶被拒絕進入系統。

本文設計了一種適用于微電網系統的基于SM2 智能卡的安全登錄系統以保證微電網系統高安全的身份認證。 該系統由智能卡、配套讀卡器和身份認證服務系統組成;并詳細描述了用戶身份認證過程;且該方案抗偽造攻擊、抗篡改攻擊和抗重放攻擊;最后在嵌入式平臺進行了實驗模擬和仿真,通過長時間運行測試,證實了系統在高安全性的前提下也保證了高效性,對維持微電網系統的安全穩定運行具有一定意義。 但是本文設計的基于SM2 智能卡登錄系統對SM2 智能卡依賴性較強,若SM2 智能卡丟失或被盜會對系統造成一定危害,考慮到雙因子甚至多因子身份認證[15-16]的特性,后續將研究“基于生物特征+密碼學技術”的雙因子身份認證。