叢林虎,方 軼
(海軍航空大學,山東 煙臺 264001)
導彈業務是航空導彈裝備管理中的一項重要的經常性工作,覆蓋了航空導彈的管理、維護、使用、運輸等多個方面,其中涉及到需要登記記錄的數據項多,數據量較大。目前大多數部隊仍然采用的是傳統手工紙質登記的形式進行導彈業務的記錄工作,然而這種工作方式效率低下,記錄的過程中會由于記錄人的疏忽出現各種各樣的錯誤,同時在登記過程中還可能存在著責任人不明確、簽字代簽等情況,在需要進行檢查追責時比較困難。
數字簽名技術是信息與數據安全的核心技術之一,可以實現身份認證、數據完整性保護、防篡改、防冒充和不可否認性等數據傳輸中的重要需求。自從Diffie和Hellman提出公鑰密碼思想后[1],便出現了基于公鑰密碼學的數字簽名技術。發展至今已經產生了基于離散對數的簽名、基于橢圓曲線的簽名[2]、基于身份識別協議的簽名[3]、盲簽名[4]、代理簽名[5]、多重數字簽名[6]、環簽名[7]等簽名方案,隨著大數據時代的到來,數字簽名技術將會發揮更為重要的作用。
ElGamal算法是一種非確定的基于離散對數的數字簽名算法,使用較為廣泛[8]。本文針對導彈數據記錄、存儲及使用現狀,在對原ElGamal算法進行了安全性和執行效率改進的基礎上,將改進的ElGamal算法應用于開發的導彈業務數字化登記系統中。
在公鑰密碼體制中,用戶的密鑰是由公鑰和私鑰組成的密鑰對,私鑰秘密保存,公鑰公開。由于公鑰不能推出私鑰,因此公開公鑰不會損害私鑰額安全,數字簽名就是簽名方用自己的私鑰對某消息進行加密,驗證方如果能夠利用簽名方的公鑰正確解密,則確定該消息是簽名方進行了數字簽名[9]。一般來說,數字簽名方案是由一個5元組(M,S,K,SIGN,VRFY)構成的,且滿足以下條件:
1)M是一個可能消息的有限集。
2)S是一個可能簽名的有限集。
3) 密鑰空間K是一個可能密鑰的有限集。
4) 對每一個k=(ks,kv)∈K都對應一個簽名算法Signks∈SIGN和驗證算法Vrfykv∈VRFY。每一個Signks:M→S和驗證函數Vrfykv:M×S→{True,False}是一個對任何消息m∈M和任意簽名s∈S滿足下列方程的函數:

(1)
基于數學難題的分類,數字簽名算法可以分為基于離散對數問題的數字簽名算法、基于大整數素數因子分解的簽名算法、基于橢圓曲線離散對數問題的簽名算法和基于二次剩余問題的簽名算法[10]。ElGamal算法屬于基于離散對數問題的簽名算法,主要包括參數與密鑰生成、簽名算法以及驗證算法三部分[11]。

y=gxmodP
(2)
則公鑰為(y,g,P),私鑰為x。

r=gkmodP
(3)
s=(h(m)-xr)k-1mod (P-1)
(4)
則對M的簽名為(s,r),其中h是Hash函數。
簽名的接收者擁有公鑰(y,g,P),收到消息M的簽名(s,r)之后,首先計算h(m),然后驗證:
yrrs≡gh(m)mod (P)
(5)
如果式(5)成立,則數字簽名有效,否則簽名無效。
對ElGamal數字簽名算法驗證簽名的正確性證明如下:
首先對式(4)進行變形,可以得到:
ks≡(h(m)-xr)mod (P-1)
(6)
即:
ks≡λ(P-1)+(h(m)-xr)
(7)
于是有:
gks=gλ(P-1)+(h(m)-xr)
(8)
根據歐拉定理gP-1(modp)≡1可得:
gλ(P-1)≡(gP-1)λ(modP)≡1(modP)
(9)
所以有:
gks≡g(h(m)-xr)(modP)
(10)
又
y≡gx(modP)
(11)
因此有:
yrrs≡gxrgks≡gxrg(h(m)-xr)(modP)≡
gh(m)(modP)
(12)
以上過程即可驗證簽名,如果式(5)成立,則該數字簽名有效。
從簽名的安全性方面分析,通過前文對ElGamal數字簽名算法的描述可以看出,該算法的安全性很大程度上是依賴于選擇隨機數。不同的隨機數會產生不同的數字簽名,給攻擊行為帶來很大的難度。同時攻擊者對ElGamal算法的攻擊目標大多都是隨機數,因為對密鑰的攻擊難度更大,而隨機數與密鑰的關聯性較小,攻擊容易實現。因此隨機數選取是該算法安全性的重要保證。同時式(4)中的Hash函數也能從很大程度上保證簽名不易被破解,而原始ElGamal數字簽名算法中的Hash函數的輸入只有簽名消息的明文,如果明文泄露則Hash函數將不存在安全保護能力,因此對Hash函數增加數據的數據量也能夠從一定程度上提高抗攻擊能力。在保證簽名驗證正確性的前提下,改進的思路主要有兩點:通過改進隨機數的選取以及增加Hash函數輸入的數據,使原算法具有更高的安全性;通過對求逆運算的改進以及改變公鑰生成方式使原算法的執行效率提高。
2.1.1安全性改進
提高安全性方面的具體改進方案如下:在原先已經選擇了一個隨機數k的基礎上,再選擇一個隨機數n。在簽名過程中,在已有簽名公式(3)的基礎上,增加一個關于隨機數n的簽名公式:
t=gnmodP
(13)
在增加了式(13)的基礎上,再將私鑰x與消息明文m一起作為Hash函數的輸入,則式(4)變為:
s=(h(m‖y)-xr-xt)n-1mod (P-1)
(14)
驗證方程為:
yrrtts≡gh(m‖y)mod (P)
(15)
2.1.2簽名效率改進
從簽名效率上分析,式(14)中的求逆運算通常需要在計算機中通過擴展的歐幾里得算法來實現的,計算過程復雜。具體改進方案如下:
將h(m)作為私鑰,將公鑰生成式(2)改為:
e=gh(m)modP
(16)
此時公鑰為e,并且仍然保留式(2),將其作為下一步模逆運算改進的中間過程。
去除簽名方程(式(14))中簽名s與模逆運算的關聯性,將式(14)變為:
s=(t+nr+h(m))mod (P-1)
(17)
同時再增加一個簽名方程:
λ=(k-nr-xy)mod (P-1)
(18)
新增加的式(18)的作用是代替式(14)中簽名s的模逆運算的相關性。最終得到的數字簽名為(r,s,y,λ)。
再根據式(17)、(18),將驗證方程改為:
gβmodP≡remodP
(19)
其中,
β=(s-t+xy+λ)
(20)
得到的改進ElGamal數字簽名算法的公鑰生成方程為式(16),簽名方程為式(2)、(3)、(13)、(17)、(18),驗證方程為式(19)。
本文提出的改進ElGamal算法正確性驗證過程如下:
由式(19)與式(20),可以有:
gβmodP≡g(s-t+xy+λ)modP
(21)
假設簽名正確,即簽名方程式(17)成立。由式(17)、(18)與式(21)可得:
gβmodP≡g(t+nr+h(m)-t+xy-nr-xy)modP≡
g(h(m)+k)modP
(22)
最后由式(3)、式(16)、式(22)可以得到:
gβmodP≡gh(m)gkmodP≡remodP
(23)
得到的等式(23)與驗證方程式(19)一致,證明改進ElGamal算法能夠正確地驗證合法數字簽名。
對數字簽名算法的攻擊主要有直接攻擊私鑰和偽造簽名兩種攻擊方式。本文通過攻擊者的各種攻擊方式模擬進行安全性分析。
若攻擊者想要從公鑰中直接解出私鑰,則根據公鑰生成式(16)可知,要解出私鑰就需要求解h(m)=logge的離散對數問題,解決難度很大。
若攻擊者截獲了簽名組(x,y,r,t,s,λ),想要根據簽名組求出私鑰,則根據簽名公式(17)、(18)可知,攻擊者需要從這兩個方程中解出三個未知數(n,k,h(m)),求解難度很大,無法求得私鑰。
若攻擊者截獲了發送的簽名消息,想要通過替換消息的方式進行簽名偽造,在公、私鑰安全的前提下,根據式(17)可知,簽名時加入了真實消息的Hash函數值,而Hash函數的一個重要特性是:難以找出兩條Hash值相同的消息,即強抗碰撞性,因此被替換的消息除非與原消息完全一致,否則得不到與原簽名一致的數字簽名。
若攻擊者截獲了發送的簽名消息,想要通過替換隨機數的方式進行簽名偽造,假設攻擊者用w替換了隨機數k,則根據式(3)可以得到rw,再由公式(17)、(18)可知,還需要由這兩個方程解出4個未知數才能進行簽名的偽造,因此攻擊者得到的簽名是無效的,在驗證過程中會被拒絕。
根據安全性分析也可以得知,改進ElGamal算法中的隨機數k和n是保證算法安全性的重要手段,因此在選取時必須要保證gcd(k,n)=1,并且存儲時必須秘密存儲,不能泄露。
使用Visual C#語言對原始ElGamal算法進行實現,運行環境為CPU Intel Core i7-6700HQ 2.60 GHz,Windows7 SP1,Visual Studio 2012。使用Stopwatch方法統計各種運算的耗時占比,統計結果如表1所示。

表1 ElGamal算法運算耗時占比 %
原始ElGamal算法涉及到的各類運算次數如表2所示,本文提出的改進ElGamal算法涉及到的各類運算次數如表3所示。

表2 原始ElGamal算法運算類型及次數

表3 改進ElGamal算法運算類型及次數
根據表2與表3的對比,兩種方案都使用了5次指數運算。改進ElGamal算法中模逆運算次數為0,根據表1可知,模逆運算是四種運算中耗時最長的運算,因此降低模逆運算次數可以有效提高算法執行效率;改進ElGamal算法比原算法多用了兩次點積運算,點積運算是一種非??斓倪\算,根據表1中可知點積運算耗時占比僅為1.1%,同時還減少了一次Hash運算,因此本文改進ElGamal算法計算復雜性低于原始ElGamal算法。
使用Visual C#語言進行某型航空導彈業務數據數字化登統計系統的開發,并應用基于本文提出的改進ElGamal算法的數字簽名技術。開發完成后的具體界面如圖1所示(數據僅供系統演示使用,涉密數據已隱去)。

圖1 數字化登統計系統數字簽名界面
在完成某型導彈的數據登記后進行數字簽名,使用該用戶自己的公鑰(即個人簽名密鑰)對本次錄入的數據進行數字簽名,查詢時可以通過認證該數字簽名來驗證數據錄入人員的身份。
本文提出了一種改進的ElGamal數字簽名算法,對改進ElGamal算法的正確性、安全性以及復雜度進行了分析,并將基于該算法的數字簽名技術應用于導彈數據數字化登記系統中;分析結果表明改進的ElGamal數字簽名算法相比于原算法,具有更強的抗攻擊性以及更低的運算復雜度,在導彈數據數字化登記系統中取得了較好的應用效果。為下一步將數據簽名技術應用于其他部隊日常業務工作中提供了理論與實踐基礎。