邱 帆 胡凱雨 左黎明 張夢(mèng)麗
1(國網(wǎng)江西省電力公司吉安電力科學(xué)研究院 江西 吉安 343000)2(華東交通大學(xué)系統(tǒng)工程與密碼學(xué)研究所 江西 南昌 330013)
隨著網(wǎng)絡(luò)通信技術(shù)的不斷發(fā)展和完善,信息通信技術(shù)也逐漸運(yùn)用于配電網(wǎng)之中形成配電網(wǎng)的信息物理系統(tǒng),而配電網(wǎng)分布式控制是一種基于智能終端測(cè)控信息對(duì)等交換的控制技術(shù),可以利用多個(gè)站點(diǎn)的測(cè)量信息提高保護(hù)控制性能,同時(shí)改善主站集中控制響應(yīng)速度,是實(shí)現(xiàn)配電網(wǎng)信息物理系統(tǒng)的關(guān)鍵支撐技術(shù)。然而由于智能終端分布在各個(gè)地區(qū),且裝置數(shù)據(jù)存儲(chǔ)與傳輸能力等較差,非常容易受到黑客的攻擊。2008年,美國中央情報(bào)局稱在美國境外發(fā)生數(shù)起黑客通過互聯(lián)網(wǎng)攻破當(dāng)?shù)毓╇娋W(wǎng)絡(luò)導(dǎo)致數(shù)個(gè)城市出現(xiàn)照明中斷事件[1]。2015年12月,俄羅斯黑客組織通過電網(wǎng)安全漏洞獲取遠(yuǎn)程控制權(quán)限,并關(guān)閉了數(shù)十個(gè)斷路器,造成數(shù)萬戶家庭停電[2]。2017年在美國、土耳其和瑞士發(fā)生多起黑客攻擊電網(wǎng)以獲取電網(wǎng)運(yùn)營(yíng)控制面板事件[3]。
因此,對(duì)分布式控制技術(shù)的研究需要從電網(wǎng)的安全防護(hù)角度考慮,在實(shí)現(xiàn)分布式控制的同時(shí)保證電網(wǎng)系統(tǒng)的安全性。而系統(tǒng)安全性的重要指標(biāo)是要對(duì)數(shù)據(jù)來源的身份進(jìn)行認(rèn)證。但對(duì)于身份認(rèn)證的協(xié)議國內(nèi)外相關(guān)機(jī)構(gòu)并沒有形成國際標(biāo)準(zhǔn)。因此,國內(nèi)外專家學(xué)者就電網(wǎng)中通信身份認(rèn)證技術(shù)進(jìn)行研究。1979年,LAMPORT[4]提出了一次性簽名算法的最初架構(gòu)。2012年,郭非等[5]設(shè)計(jì)一種基于身份的智能電網(wǎng)認(rèn)證模式,但該模式只考慮到移動(dòng)端的用戶身份認(rèn)證問題。2013年,王爽等[6]對(duì)身份認(rèn)證和訪問控制技術(shù)在智能電網(wǎng)中的應(yīng)用進(jìn)行討論,但并沒有提出具體的安全方案。2018年,李玉等[7]對(duì)電網(wǎng)核心業(yè)務(wù)可信身份認(rèn)證框架體系研究,但僅僅是理論上的研究并沒有運(yùn)用到實(shí)際的電網(wǎng)項(xiàng)目中。2018年,盧昕等[8]對(duì)面向配電網(wǎng)分布式控制的身份認(rèn)證技術(shù)進(jìn)行了研究,提出一次性簽名的輕量級(jí)身份認(rèn)證算法,但其簽名方案并沒有嚴(yán)格的可證明安全,因此可能存在安全性問題。
本文對(duì)配電網(wǎng)分布式控制原理進(jìn)行研究,并結(jié)合國密SM9簽名算法[9],設(shè)計(jì)基于SM9的配電網(wǎng)分布式控制的身份認(rèn)證技術(shù),并在國電南瑞生產(chǎn)的PDZ810-FTU智能配電終端上對(duì)簽名算法的計(jì)算效率進(jìn)行實(shí)驗(yàn),結(jié)果表明簽名安全性較好,且效率較高,能有效地在實(shí)現(xiàn)分布式控制的同時(shí)保證電網(wǎng)系統(tǒng)的安全性。
由于本文僅針對(duì)配電網(wǎng)分布式控制的安全性進(jìn)行研究,因此對(duì)攻擊者模型設(shè)計(jì)如下:
(1) 假定密鑰生成中心是安全可靠的,攻擊者來自惡意的用戶;
(2) 攻擊者主要針對(duì)的是計(jì)算、數(shù)據(jù)存儲(chǔ)與傳輸能力等較差的智能終端;
(3) 密鑰生成中心存儲(chǔ)所有智能終端的身份ID,且可根據(jù)編號(hào)生成密鑰對(duì),也可對(duì)數(shù)據(jù)進(jìn)行認(rèn)證和處理。因此,攻擊者進(jìn)行密鑰替換攻擊概率較小。
配電網(wǎng)分布式控制身份認(rèn)證工作框架如圖1所示,該框架架構(gòu)分為密鑰管理模塊和身份認(rèn)證模塊,其中身份認(rèn)證用于對(duì)簽名進(jìn)行驗(yàn)證以保證信息的完整性,密鑰管理模塊主要是由密鑰生成中心和身份編號(hào)更新模塊組成,其中身份編號(hào)更新模塊主要是將每日的時(shí)間和智能采集終端編號(hào)組成一個(gè)新的身份編號(hào)。
圖1 配電網(wǎng)分布式控制身份認(rèn)證工作框架
密鑰生成中心根據(jù)生成的編號(hào)得出新的密鑰對(duì)。其中,編號(hào)為IDi智能采集終端會(huì)被分配對(duì)應(yīng)的私鑰,在產(chǎn)生需要簽名的報(bào)文信息Message后,智能采集終端IDi根據(jù)私鑰對(duì)Message進(jìn)行簽名,并將Message和簽名通過組播的方式發(fā)送到局域網(wǎng)。而其他智能采集終端IDj訂閱了來自智能采集終端IDi的信息可根據(jù)公布的公鑰對(duì)簽名進(jìn)行驗(yàn)證。
本文提出的身份認(rèn)證工作框架的安全性是建立在基于橢圓曲線[10]密碼(Elliptic Curve Cryptography,ECC)機(jī)制的SM9簽名算法上,且框架中的密鑰管理模塊中的身份編號(hào)更新模塊時(shí)間戳機(jī)制使生成的密鑰對(duì)每次都不同,因此生成的簽名消息也不同,有效地避免了一些惡意重放攻擊。在不考慮攻擊者攻擊密鑰生成以獲取密鑰的情況下,攻擊者在密鑰有效期之內(nèi)無法通過人為猜解或掛字典的形式暴力破解出密鑰。
1984年,Shamir[11]首次提出了基于身份的密碼體制(Identity-Based Cryptography,IBC),用戶的公鑰可以與用戶的手機(jī)號(hào)碼、身份證號(hào)碼等關(guān)聯(lián),省略了交換數(shù)字證書和公鑰過程,有效地減輕了簽名者對(duì)證書的依賴性,提高了密鑰管理的效率。2008年,程朝輝等將IBC技術(shù)進(jìn)行標(biāo)準(zhǔn)化,形成了我國商用密碼算法SM9。其中SM9簽名算法由系統(tǒng)初始化(Setup)、密鑰生成算法(KeyEx)、簽名生成算法和簽名驗(yàn)證算法(Verify)四個(gè)多項(xiàng)式時(shí)間算法組成。
3) 簽名生成算法(Sign):對(duì)待簽名的消息M,簽名者可通過以下運(yùn)算步驟實(shí)現(xiàn)消息M的數(shù)字簽名(h,S):
(1) 計(jì)算g=e(P1,Ppub);
(2) 令r∈[1,N-1],計(jì)算ω=gr,h=H2(M‖ω,N);
(3) 計(jì)算L=(r-h)modN,若L=0則返回(2);
(4) 計(jì)算S=Ld,則消息M的簽名為(h,S)。
4) 簽名驗(yàn)證算法(Verify):對(duì)于接收到的消息M′及其數(shù)字簽名(h′,S′),驗(yàn)證者可通過運(yùn)算步驟進(jìn)行簽名驗(yàn)證:
(1) 檢驗(yàn)h′∈[1,N-1]與S′∈G1是否成立,若不成立則驗(yàn)證不通過;
(2) 令g=e(P1,Ppub),計(jì)算t=gh′,h1=H1(IDA‖hid,N),P=h1P2+Ppub;
(3) 計(jì)算μ=e(S′,P),ω′=μ·t,h2=H2(M′‖ω′,N);
(4) 檢驗(yàn)h2=h′是否成立,若成立則驗(yàn)證通過否則驗(yàn)證不通過。
上述SM9簽名算法具體參數(shù)定義與計(jì)算過程參考文獻(xiàn)[9]。針對(duì)身份認(rèn)證框架而言,對(duì)于框架中的密鑰更新,每個(gè)智能采集終端IDi和每日的時(shí)間組成新的編號(hào)運(yùn)行密鑰生成算法(KeyEx)生成一個(gè)全新的密鑰對(duì),運(yùn)行簽名生成算法(Sign)對(duì)不同消息進(jìn)行簽名。身份認(rèn)證模塊只需要根據(jù)更新后的公鑰運(yùn)行簽名驗(yàn)證算法(Verify)對(duì)發(fā)送過來的簽名進(jìn)行驗(yàn)證。
框架模塊設(shè)計(jì)對(duì)于每個(gè)智能終端主要由數(shù)據(jù)處理模塊、簽名模塊、通信模塊和簽名驗(yàn)證模塊組成。智能終端間的通信以封包格式傳輸,數(shù)據(jù)處理模塊主要用于將消息進(jìn)行哈希運(yùn)算,進(jìn)一步封裝為封包和將封包進(jìn)行拆包取出包內(nèi)消息;簽名模塊主要用于智能終端內(nèi)的唯一私鑰對(duì)封包消息進(jìn)行簽名;通信模塊用于獨(dú)立的智能終端間的通信,即發(fā)送和接收封包;簽名驗(yàn)證模塊用于對(duì)收到的簽名進(jìn)行簽名驗(yàn)證,以保證數(shù)據(jù)未被篡改和數(shù)據(jù)的完整性??蚣苣K設(shè)計(jì)如圖2所示。
圖2 框架模塊設(shè)計(jì)
電流數(shù)據(jù)采集到數(shù)據(jù)監(jiān)控平臺(tái)的數(shù)據(jù)交互流程如圖3所示,包括以下步驟:
(1) 每天凌晨時(shí)分,身份編號(hào)更新模塊將每日的時(shí)間和智能采集終端編號(hào)組成一個(gè)新的身份編號(hào)。并將編號(hào)發(fā)送給密鑰生成中心。密鑰生成中心根據(jù)密鑰生成算法生成密鑰對(duì),并根據(jù)編號(hào)分發(fā)給每個(gè)智能終端。
(2) 智能終端ID對(duì)需要發(fā)送的指令Message、對(duì)應(yīng)編號(hào)ID和時(shí)間戳T進(jìn)行哈希運(yùn)算Hash(ID#Message#T),簽名模塊根據(jù)分發(fā)好的密鑰對(duì)計(jì)算后哈希值進(jìn)行簽名Sign(Hash(ID#Message#T))簽名完成后,通過數(shù)據(jù)處理模塊組成形如ID#Message#T#Sign(Hash(ID#Message#T))封包后發(fā)送。
(3) 其他智能采集終端訂閱了來自智能采集終端ID的信息可根據(jù)連接符對(duì)封包進(jìn)行解析,并對(duì)簽名數(shù)據(jù)進(jìn)行驗(yàn)證。如果簽名驗(yàn)證失敗,則通知智能采集終端不進(jìn)行任何操作。否則,智能終端接受數(shù)據(jù),并執(zhí)行操作。
圖3 智能終端安全交互流程
實(shí)驗(yàn)環(huán)境為電腦中央處理器Intel i5 7200U,內(nèi)存海盜船DDR4 16 GB,Windows 10 64位操作系統(tǒng),通過微軟提供的Visual Studio 2012開發(fā)平臺(tái)利用C++實(shí)現(xiàn)SM9簽名算法,通過對(duì)不同長(zhǎng)度的信息進(jìn)行30次簽名得出如表1所示方案在簽名和簽名驗(yàn)證階段的平均耗時(shí)。其中Lm表示以Byte為單位的信息長(zhǎng)度、tsign表示簽名平均耗時(shí)、tverify表示簽名驗(yàn)證平均耗時(shí)。
由表1可知,簽名信息長(zhǎng)度越長(zhǎng),簽名和簽名驗(yàn)證所消耗的時(shí)間越長(zhǎng)。但簽名到達(dá)一定長(zhǎng)度時(shí),簽名和驗(yàn)證消耗的時(shí)間達(dá)到平衡,其原因在于Hash函數(shù)會(huì)將消息長(zhǎng)度分成多個(gè)長(zhǎng)度一致的數(shù)據(jù)塊,用于處理對(duì)應(yīng)消息摘要。而由于密鑰的長(zhǎng)度是固定不變的,因此在進(jìn)行Hash運(yùn)算的時(shí)候不受長(zhǎng)度影響。
表1 報(bào)文長(zhǎng)度不同時(shí)簽名的耗時(shí)(仿真)
為了模擬真實(shí)環(huán)境,在國電南瑞生產(chǎn)的PDZ810-FTU智能配電終端(硬件:高端32嵌入式RISC CPU,軟件平臺(tái)嵌入式操作系統(tǒng):Linux 2.6版uClinux)上結(jié)合C語言環(huán)境下橢圓曲線上的雙線性對(duì)運(yùn)算和PBC庫實(shí)現(xiàn)了簽名算法,并通過對(duì)不同長(zhǎng)度的信息進(jìn)行30次簽名得出如表2所示方案在簽名和簽名驗(yàn)證階段的平均耗時(shí)。其中Lm表示以Byte為單位的信息長(zhǎng)度、t表示從簽名到簽名驗(yàn)證的平均耗時(shí)。
表2 報(bào)文長(zhǎng)度不同時(shí)簽名的耗時(shí)(實(shí)驗(yàn))
由表2可知,當(dāng)傳送數(shù)據(jù)長(zhǎng)度為512 Byte時(shí),方案從簽名到簽名驗(yàn)證的時(shí)間為1.721 ms,然而值得注意的是,在簽名消息Message的基礎(chǔ)上需要加入一定長(zhǎng)度的簽名,因此總的傳輸時(shí)間為2.23 ms。同時(shí)在此環(huán)境下還模擬了惡意攻擊者對(duì)智能終端進(jìn)行攻擊,而基于SM9簽名的身份認(rèn)證算法對(duì)惡意攻擊者發(fā)送的消息進(jìn)行認(rèn)證,發(fā)現(xiàn)身份認(rèn)證失敗,得出發(fā)送方是沒有權(quán)限的惡意用戶,且根據(jù)發(fā)送消息中的編號(hào)可快速定位被攻擊的智能終端,并及時(shí)采取防御措施。
系統(tǒng)各階段關(guān)鍵核心代碼敘述如下:
(1) 系統(tǒng)初始化參數(shù)階段。首先定義pairing_t類型的雙線性對(duì)pairing,然后定義element_t類型的參數(shù)變量,最后分別使用element_init_G1函數(shù)初始化群G1上的元素,使用element_init_Zr函數(shù)初始化群Zr上的元素和使用element_init_GT函數(shù)初始化群GT上的元素,具體代碼如下:
pairing_t pairing;
element_t P1, e,N;
//系統(tǒng)參數(shù)
element_t s,P_pub;
//系統(tǒng)密鑰
element_t d,Q;
//用戶私鑰,公鑰
element_t hid;
//識(shí)別符
//生成用戶公私鑰的中間變量
element_t t1,t2,h_temp,t1_invert,Q_temp;
element_t r,w,L;
//生成簽名的中間變量
element_t h,Sig;
//簽名
//驗(yàn)證簽名的中間變量
element_t g,w_pie,u,h1,h2,t,P,P_temp;
if (pairing_init_set_buf(pairing, eparam, strlen(eparam))) printf(″pairing init failed″);
element_init_G1(e, pairing);
//群G
element_init_Zr(N, pairing);
//系統(tǒng)密鑰
element_init_G1(d, pairing);
//群G用戶私鑰
element_init_G1(Q, pairing);
//群G用戶公鑰
element_init_Zr(hid, pairing);
//識(shí)別符
//生成用戶公私鑰的中間變量
element_init_Zr(t1, pairing);
//生成用戶公私鑰的中間變量
element_init_Zr(t2, pairing)
element_random(N);
element_random(hid);
(2) 系統(tǒng)密鑰的生成。首先初始化系統(tǒng)公鑰相關(guān)參數(shù),然后利用element_random設(shè)定系統(tǒng)主密鑰s的值,最后使用element_mul函數(shù)計(jì)算系統(tǒng)公鑰的生成。
/*******系統(tǒng)公鑰生成**********/
element_init_Zr(s, pairing);
//系統(tǒng)密鑰
element_init_G1(P_pub, pairing);
//系統(tǒng)公鑰
element_init_G1(P1, pairing);
//群G的生成元
element_random(P1);
element_random(s);
element_mul(P_pub,s,P1);
//計(jì)算P_pub=s*P2
(3) 生成用戶公私鑰。首先初始化用戶密鑰生成相關(guān)參數(shù),并利用strcat函數(shù)拼接用戶ID、識(shí)別符和N,然后利用element_from_hash函數(shù)對(duì)拼接字符數(shù)組進(jìn)行hash運(yùn)算,最后利用element_add相加函數(shù)、element_invert求逆函數(shù)和element_mul相乘函數(shù)求得用戶的私鑰d和用戶公鑰Q。
element_init_Zr(t1_invert, pairing);
element_init_Zr(h_temp, pairing);
element_init_G1(Q_temp, pairing);
char ID[30] = ″zmlzmlzml″;
strcat(IDhN,ID);
//hid ,ID
strcat(IDhN,N);
//hid,N
element_from_hash(h_temp, IDhN,strlen(IDhN));
//h_temp=H1(ID||hid,N)
element_add(t1,h_temp,s);
//t1=H1(ID||hid,N)+s
element_invert(t1_invert,t1);
//(t1)^(-1)
element_mul(t2,s,t1_invert);
//計(jì)算t1=s*t1_invert
//計(jì)算用戶私鑰
element_mul(d,t2,P1);
//計(jì)算d=t2*P1
//計(jì)算用戶公鑰 Q=H1(ID‖hid,N)*P1+P_pub
element_mul(Q_temp,h_temp,P1);
//計(jì)算Q_temp=H1(ID‖hid,N)*P1
element_add(Q,Q_temp,P_pub);
(4) 生成簽名階段。首先初始化生成簽名相關(guān)參數(shù),然后使用element_pairing雙線性對(duì)運(yùn)算函數(shù)計(jì)算g=e(P1,Ppub),使用element_pow_zn函數(shù)計(jì)算ω=gr,使用element_from_hash哈希函數(shù)求哈希值h,使用element_sub函數(shù)計(jì)算L=(r-h)modN,最后使用element_mul函數(shù)計(jì)算簽名S=Ld。代碼如下:
element_init_GT(g, pairing);
//g為GT的元素
element_init_Zr(r, pairing);
//r為Zr上的元素
element_init_GT(w, pairing);
element_init_GT(w_pie, pairing);
element_init_Zr(h, pairing);
element_init_Zr(L, pairing);
//L為Zr上的元素
element_init_G1(Sig, pairing);
element_random(r);
char m[30] = ″messege″;
element_pairing(g, P1, P_pub);
element_pow_zn(w,g,r);
element_from_hash(h, mwn,strlen(mwn));
//h_temp=H1(M‖w,N)
element_sub(L,r,h);
element_mul(Sig,L,d);
(5) 簽名驗(yàn)證階段。首先初始化簽名驗(yàn)證相關(guān)參數(shù),然后分別計(jì)算出t、h1和P。使用element_pairing函數(shù)、element_mul函數(shù)和element_from_hash函數(shù)依次計(jì)算出μ=e(S′,P)、ω′=μ·t和h2=H2(M′‖ω′,N);最后使用element_cmp比較函數(shù)驗(yàn)證h2與h′是否相等,即簽名驗(yàn)證是否成功。
element_init_GT(t, pairing);
//gt為GT的元素
element_init_Zr(h1, pairing);
element_init_G1(P, pairing);
element_init_GT(u, pairing);
//gt為GT的元素
element_init_GT(w, pairing);
//gt為GT的元素
element_init_Zr(h2, pairing);
element_init_G1(P_temp, pairing);
element_pow_zn(t,g,r);
element_mul(P_temp,h1,P1);
element_add(P,P_temp,P_pub);
element_pairing(u, Sig, P);
element_mul(w_pie,u,t);
element_from_hash(h2, mwn_pie, strlen(mwn_pie));
//h_temp=H1(M‖w,N)
if (!element_cmp(h2, h)) {
printf(″簽名驗(yàn)證失??! ″);
}
else
{
printf(″簽名驗(yàn)證成功! ″);
}
最后程序運(yùn)行簽名結(jié)果如圖4所示,可以看出程序運(yùn)行時(shí)間為117 ms,證明本文方案具有高效性。
圖4 簽名運(yùn)行結(jié)果
本文設(shè)計(jì)基于SM9的配電網(wǎng)分布式控制的身份認(rèn)證技術(shù)方案,能有效地實(shí)現(xiàn)分布式控制的同時(shí)保證電網(wǎng)系統(tǒng)的安全性。本文首先介紹了總體框架的設(shè)計(jì),并分析了框架的安全性,隨后詳細(xì)敘述了SM9簽名算法,最后通過在國電南瑞生產(chǎn)的PDZ810-FTU智能配電終端實(shí)現(xiàn)簽名算法,并通過長(zhǎng)時(shí)間運(yùn)行測(cè)試,期間并未出現(xiàn)運(yùn)行不穩(wěn)定以及相關(guān)安全問題,證實(shí)方案具有較高的穩(wěn)定性和實(shí)用性,并且方案基于國密SM9簽名算法,具有較強(qiáng)的安全性。今后,配電網(wǎng)分布式控制對(duì)數(shù)據(jù)交互的安全性和性能會(huì)有更高的要求,而本文僅采用國密算法對(duì)數(shù)據(jù)進(jìn)行安全性認(rèn)證,因此,下一步工作將研究高效安全的密碼學(xué)方案并運(yùn)用于配電網(wǎng)分布式控制。