易傳佳 左黎明 陳藝琳
(華東交通大學(xué)理學(xué)院 江西 南昌 330013) (華東交通大學(xué)系統(tǒng)工程與密碼學(xué)研究所 江西 南昌 330013)
隨著現(xiàn)代物流業(yè)迅猛發(fā)展,鐵路物流憑借運量大、輻射廣、安全可靠等特點成為了現(xiàn)代物流業(yè)中的主要方式之一[1]。近年來,鐵路交通事故頻發(fā),僅2020年,我國已經(jīng)發(fā)生了三起鐵路交通事故[2],造成了重大的人員和財產(chǎn)損失。“6·13”溫嶺槽罐車爆炸事故造成20人死亡,172人受傷[3]。鐵路物流要防范上述事故的發(fā)生,必須建立有效的智能監(jiān)控平臺,實時保證鐵路運輸?shù)陌踩?。依托新興的大數(shù)據(jù)、云計算、人工智能等互聯(lián)網(wǎng)技術(shù),鐵路物流實時監(jiān)控系統(tǒng)的設(shè)計已經(jīng)成為當(dāng)前的研究熱點[4-6]。在復(fù)雜的互聯(lián)網(wǎng)環(huán)境下,物流實時監(jiān)控系統(tǒng)的數(shù)據(jù)交互過程存在信息泄露和信息篡改的網(wǎng)絡(luò)安全隱患,這會嚴重威脅到整個監(jiān)控系統(tǒng)的穩(wěn)定運行。物流監(jiān)控系統(tǒng)存在風(fēng)險的根本主要在于數(shù)據(jù)來源缺乏安全性認證,數(shù)據(jù)傳輸缺乏完整性保護。針對鐵路物流實時監(jiān)控系統(tǒng)存在的信息安全問題,需要一種高效安全的簽名方案來解決。在網(wǎng)絡(luò)傳輸帶寬受限環(huán)境中,具有短的消息簽名長度的簽名方案很適用。目前縮短簽名長度有兩種方式:(1) 設(shè)計短簽名方案,短簽名的概念由Boneh等[7]首次提出,在同等安全條件下,其簽名長度與DSA簽名相比縮短一半;(2) 直接壓縮傳輸?shù)南?該方法源于Nyberg等[8]首次提出的具有消息恢復(fù)功能的簽名方案,該方案不需要將消息同簽名一起傳送給驗證者,而是將原始消息嵌入到簽名,驗證者可以自行從簽名中恢復(fù)原始消息。本文主要研究第二種具有消息恢復(fù)功能的簽名方案并應(yīng)用到鐵路物流實時監(jiān)控系統(tǒng)中。
Shamir[9]在1984年提出了基于身份的密碼體制,用戶私鑰通過一個可信的私鑰生成器(Private Key Generator,PKG)利用系統(tǒng)主密鑰和用戶身份信息生成。Ma[10]構(gòu)造了一種高效的基于身份的群簽名方案。Li[11]提出了一種具有消息恢復(fù)的基于身份的強指定驗證者簽名方案。Rao等[12]針對表達型線性秘密共享方案的可實現(xiàn)訪問結(jié)構(gòu),設(shè)計了兩個基于密鑰策略及屬性的具有消息恢復(fù)的密鑰隔離簽名方案。Chande等[13]應(yīng)用自認證密鑰和消息恢復(fù)的概念提出了一個有效的多代理簽名方案,該方案可以同時執(zhí)行公鑰驗證、多代理簽名驗證和消息恢復(fù)。Verma等[14]給出了一種可證明安全的、高效的基于身份的消息恢復(fù)盲簽名方案。James等[15]利用盲簽名和消息恢復(fù)特性,提出了一種基于身份的具有消息恢復(fù)的無配對盲簽名方案。闞元平[16]在格密碼基礎(chǔ)上提出了一種具有消息恢復(fù)功能的身份簽名方案,該方案能夠抵抗偽造攻擊。針對鐵路物流實時監(jiān)控系統(tǒng)存在的信息安全問題,本文提出一種高效的基于身份的帶消息恢復(fù)功能的簽名方案,并以該簽名方案為核心設(shè)計一種身份認證方案,整個方案交互過程計算量小、數(shù)據(jù)傳輸少,可以有效保障物流監(jiān)控系統(tǒng)數(shù)據(jù)來源的可靠性和安全性。
物流實時監(jiān)控系統(tǒng)整體架構(gòu)如圖1所示,主要由電子標簽、數(shù)據(jù)采集裝置和云服務(wù)平臺三部分組成。
圖1 整體架構(gòu)
電子標簽內(nèi)嵌有密碼芯片,數(shù)據(jù)采集裝置以樹莓派為控制中心,通過傳感器實時采集當(dāng)前的數(shù)據(jù),并通過網(wǎng)絡(luò)通信模塊實現(xiàn)與云服務(wù)平臺的通信。數(shù)據(jù)采集裝置中傳感器包括定位模塊、溫度傳感器、濕度傳感器、振動傳感器、壓力傳感器。
在該物流實時監(jiān)控系統(tǒng)中,貨物封箱完畢后,電子標簽粘貼于貨物的啟封處,當(dāng)電子標簽激活后,如果沒有收到云服務(wù)平臺的授權(quán),電子標簽的損壞將會導(dǎo)致數(shù)據(jù)采集裝置向云服務(wù)平臺發(fā)送警告信息。在物流過程中,數(shù)據(jù)采集裝置通過傳感器實時采集貨物當(dāng)前的狀態(tài)數(shù)據(jù)并傳輸?shù)诫娮訕撕炛?然后電子標簽對狀態(tài)數(shù)據(jù)進行數(shù)字簽名,再由數(shù)據(jù)采集裝置將簽名信息發(fā)送給云服務(wù)平臺,云服務(wù)平臺接收簽名信息并驗證簽名,簽證成功后恢復(fù)數(shù)據(jù)信息,然后將數(shù)據(jù)保存在云服務(wù)器中。
基于身份的具有消息恢復(fù)功能的簽名方案[17]由系統(tǒng)初始化、私鑰解析、簽名和驗證簽名四個算法組成,具體描述如下:
1) 系統(tǒng)初始化:給定安全參數(shù),輸出系統(tǒng)參數(shù)和主密鑰,PKG秘密保存主密鑰,公開系統(tǒng)參數(shù)。
2) 私鑰解析:輸入用戶身份ID,計算用戶私鑰,并通過一個安全的通道發(fā)送給用戶。
3) 簽名:輸入系統(tǒng)參數(shù)、身份ID和用戶私鑰,輸出簽名,并發(fā)給驗證者。
4) 驗證簽名:輸入系統(tǒng)參數(shù)、簽名,輸出驗證結(jié)果:“TRUE”或者“FALSE”,輸出恢復(fù)的完整消息。
在物流實時監(jiān)控系統(tǒng)中,云服務(wù)平臺中有私鑰生成器(PKG),每個電子標簽有唯一的ID,PKG通過電子標簽ID生成簽名私鑰,在電子標簽初始化時,向電子標簽內(nèi)注入系統(tǒng)參數(shù)以及PKG生成的私鑰。當(dāng)云服務(wù)器對簽名信息進行驗證時,驗證成功則輸出恢復(fù)的完整消息,驗證失敗則發(fā)出警告信息。
基于橢圓曲線上離散對數(shù)問題的難解性,提出一種基于身份的具有消息恢復(fù)功能的簽名方案。
H3:{0,1}*×G×G→{0,1}l1+l2,
F1:{0,1}l1→{0,1}l2,
F2:{0,1}l2→{0,1}l1。
最后PKG掌握并保密系統(tǒng)主密鑰s,公開系統(tǒng)參數(shù)params={q,P,e,Ppub,H1,H2,H3,F1,F2,l1,l2}。
3) 簽名:對任意給定的消息m∈{0,1}l1進行簽名,過程如下:
T=tP
(1)
h2=H2(ID,R,T)
(2)
u=t+xIDh2
(3)
(2) 計算:
h3=H3(ID,R,uP)∈{0,1}l1+l2
(4)
h4=F1(m)‖(F2(F1(m))⊕m)∈{0,1}l1+l2
(5)
h=h3⊕h4
(6)
則σ=(h,T)為電子標簽對消息m的簽名。
4) 簽名驗證:對給定消息m的簽名σ=(h,T),云服務(wù)端可以驗證簽名合法性并恢復(fù)出原始消息,驗證過程如下:
(1) 依次計算:
h1=H1(ID)
(7)
h2=H2(ID,R,T)
(8)
h3=H3(ID,R,T+h2R+h1h2Ppub)
(9)
(2) 計算h4=h3⊕h,從h4的二進制串表示中分離出長度為l2的串f1和長度為l1的串f2,恢復(fù)消息m′=F2(f1)⊕f2。
(3) 驗證等式f1=F1(m′)是否成立,若成立則接受簽名σ=(h,T)為合法簽名,并輸出1,否則輸出0。正確情況下f1=F1(m)和f2=(F2(F1(m))⊕m),因此我們不難看出消息恢復(fù)過程的正確性。
整個簽名驗證和消息恢復(fù)過程正確性證明如下:
h3=H3(ID,R,uP)=
H3(ID,R,(t+(r+sh1)h2)P)=
H3(ID,R,(t+xIDh2)P)=
H3(ID,R,T+h2R+h1h2Ppub)
(10)
h4=h3⊕h
(11)
由于:
h4=F1(m)‖(F2(F1(m))⊕m)
(12)
f1=F1(m)
(13)
f2=(F2(F1(m))⊕m)
(14)
可得:
m′=F2(f1)⊕f2=
(F2(F1(m)))⊕(F2(F1(m))⊕m=m
(15)
圖2為具有消息恢復(fù)的身份認證方案數(shù)據(jù)交互原理圖,其中:Sign表示簽名;Verify表示驗證簽名。方案具體的交互流程如下:
(1) 數(shù)據(jù)采集端采集數(shù)據(jù)。數(shù)據(jù)采集端通過傳感器采集實時數(shù)據(jù)data,然后將實時數(shù)據(jù)data傳輸?shù)诫娮訕撕灐?/p>
(2) 電子標簽生成簽名。電子標簽接收數(shù)據(jù)采集端傳輸?shù)臄?shù)據(jù)data后,然后調(diào)用簽名算法對data進行簽名處理,最后電子標簽將簽名結(jié)果和電子標簽ID以ID#Sig的封包格式傳輸?shù)綌?shù)據(jù)采集端。
(3) 數(shù)據(jù)采集端將簽名結(jié)果傳輸?shù)椒?wù)端。數(shù)據(jù)采集端將ID與簽名結(jié)果以ID#Sig的封包格式通過網(wǎng)絡(luò)通信模塊傳輸?shù)椒?wù)端。
(4) 服務(wù)端身份驗證。服務(wù)端接收數(shù)據(jù)采集端傳輸?shù)南⒎獍?對消息封包解析,得到ID和Sig,通過ID檢索對應(yīng)的主公鑰Ppub對簽名進行驗證,如果驗證成功,恢復(fù)出消息得到data并保存到云服務(wù)器中,如果驗證失敗則提示異常警告。
圖2 數(shù)據(jù)交互
在Windows 7 64位操作系統(tǒng)Microsoft Visual Studio 2012微軟平臺下,采用C#輕量級密碼術(shù)包(bouncy castle)實現(xiàn)了本文方案,實驗結(jié)果顯示本方案簽名所消耗時間為0.057 s,驗證所消耗時間為0.054 s,表明該簽名方案效率較高。實現(xiàn)結(jié)果如圖3所示,核心代碼如下:
//簽名算法
BigInteger t=new BigInteger("8");
//計算T=tP
ECPoint T=myecc.ecc_point_g.Multiply(t);
string RR=R.X.ToBigInteger().ToString()+
R.Y.ToBigInteger().ToString();
string TT=T.X.ToBigInteger().ToString()+
T.Y.ToBigInteger().ToString();
string IDRT=ID+RR+TT;
BigInteger uu=new BigInteger(
myhash.TanGetDigestByteArray(IDRT));
//計算u=H2(ID,R,T)
BigInteger u=uu.Mod(myecc.ecc_n);
//計算U=t+xID*u
BigInteger U=
t.Add(xID.Multiply(u)).Mod(myecc.ecc_n);
ECPoint UP=myecc.ecc_point_g.Multiply(U);
string strUP=UP.X.ToBigInteger().ToString()+
UP.Y.ToBigInteger().ToString();
string IDRUP=ID+RR+strUP;
//計算h1=H3(ID,R,UP)
byte[]h_1=
myhash.TanGetDigestByteArray(IDRUP);
byte[]h1=new byte[64];
Array.Copy(h_1,0,h1,0,32);
Array.Copy(h_1,0,h1,32,32);
//計算h2
byte[]F1=myhash.TanGetDigestByteArray(m);
byte[]F2=myhash.TanGetDigestByteArray(F1);
byte[]F2Xorm=HexXorByte(F2,m);
byte[]h2=new byte[64];
Array.Copy(F1,0,h2,0,32);
Array.Copy(F2Xorm,0,h2,32,32);
//計算h等于h1與h2的“異或”
byte[]h=HexXorByte(h1,h2);
//(4)簽名驗證
//計算R+l*Pub
ECPoint TRu=T.Add(xID_rignt.Multiply(u));
string TRu_xy=TRu.X.ToBigInteger().ToString()+
TRu.Y.ToBigInteger().ToString();
string IDRTRu=ID+RR+TRu_xy;
//計算h1=H3(ID,R,T+(R+l*Pub)u)
byte[]h1_1=
myhash.TanGetDigestByteArray(IDRTRu);
byte[]h11=new byte[64];
Array.Copy(h1_1,0,h11,0,32);
Array.Copy(h1_1,0,h11,32,32);
//計算h2=h與h1的“異或”
byte[]h21=HexXorByte(h,h11);
byte[]h21l2=new byte[32];
byte[]h21l1=new byte[32];
//截取h2的前l(fā)1長度的字節(jié)
Array.Copy(h21,0,h21l2,0,32);
//截取h2的后l2長度的字節(jié)
Array.Copy(h21,32,h21l1,0,32);
byte[]F21=myhash.TanGetDigestByteArray(h21l2);
//恢復(fù)消息m
byte[]m1=HexXorByte(h21l1,F21);
//消息恢復(fù)比較
byte[]left=myhash.TanGetDigestByteArray(m1);
byte[]right=h21l2;
if (ByteEquals(left,right)){
Console.WriteLine("消息恢復(fù)成功,簽名驗證通過!");
}
else{
Console.WriteLine("消息恢復(fù)失敗,簽名驗證失敗!");
}
Console.WriteLine("原消息:{0}",msg);
Console.WriteLine("恢復(fù)的消息:{0}",
Encoding.UTF8.GetString(m1));
圖3 方案實現(xiàn)結(jié)果
表1為本文方案與其他基于身份的簽名方案的性能比較,其中:M表示標量乘運算;P表示雙線性對運算;E表示指數(shù)運算;|G1|是G1中的元素長度;|q|是Zq中元素的長度;n是一個常數(shù);“√”表示具有可恢復(fù)消息功能;“×”表示不具有可恢復(fù)消息功能。
表1 本文方案與現(xiàn)有方案性能比較
由表1可得,與其他方案相比,本文方案簽名長度是最短的,與文獻[14]方案接近。在計算量方面,文獻[14]使用了3次雙線性運算,文獻[18]使用了2次雙線性運算,文獻[19]使用了3次雙線性運算,文獻[20]使用了1次雙線性運算,本文方案沒有使用雙線性運算,由于雙線性對的計算消耗是最大的,因此本文方案相比其他簽名方案計算量較小,所需的傳輸帶寬更低、性能更優(yōu)、運算效率更高。
針對鐵路物流實時監(jiān)控系統(tǒng)存在的信息安全問題,本文結(jié)合基于身份密碼體制和消息恢復(fù)功能,提出基于身份具有消息恢復(fù)功能的簽名方案。并以此方案為基礎(chǔ),設(shè)計一種鐵路物流實時監(jiān)控系統(tǒng)中具有消息恢復(fù)的身份認證方案。使用C#語言版輕量級密碼包對方案進行實驗仿真,與幾種基于身份的簽名方案進行了效率比較。該方案可以減少通信量、降低通信代價,能很好地用于鐵路物流實時監(jiān)控系統(tǒng)中。