李 莉,李 濤,杜慧娜
(東北林業大學 信息與計算機工程學院,黑龍江 哈爾濱 150040)
隨著區塊鏈技術[1]的快速發展,區塊鏈溯源技術得到了廣泛的應用。然而,在區塊鏈溯源系統中,傳統的群簽名、環簽名和代理簽名等簽名算法并不適用。
目前對數字簽名的研究主要集中在基于公鑰密碼體制。文獻[2]和文獻[3]研究了區塊鏈系統中的門限ECDSA方案,兩種門限ECDSA方案都無需可信中心參與。Schnorr提出了Schnorr簽名方案[4],相比較ECDSA簽名算法明顯縮短了簽名長度,文獻[5,6]提出了兩種基于Schnorr簽名的門限簽名協議,但是未應用于區塊鏈場景中。文獻[7-9]所提簽名方案,需可信第三方進行密鑰分配。文獻[10]提出了基于Asmuth-Bloom秘密共享的簽名方案,允許簽名成員加入和退出,但是簽名驗證效率較低。文獻[11]提出了基于Pedersen承諾和Schnorr協議的安全多方計算協議,然而惡意節點可通過合謀攻擊獲取用戶的私鑰,從而導致簽名信息的可信度受到威脅。文獻[12]所提出的門限RSA簽名方案,允許節點的動態加入,但沒有考慮節點退出問題。以上方案適配于區塊鏈溯源場景時具有一定的效率問題和安全性問題。
針對上述問題,本文基于Schnorr門限簽名算法和Pedersen可驗證秘密共享方案,提出了一種適用于區塊鏈溯源系統的門限簽名方案。該方案摒棄了依賴可信中心的設計,而是通過節點之間的相互協作來生成子密鑰并進行簽名生成,設計了符合區塊鏈溯源場景的成員加入和成員退出機制。本文方案在縮短簽名時間和簽名驗證時間的同時,可以有效地預防抗合謀攻擊和簽名偽造。
Schnorr數字簽名算法的安全性基于離散對數的困難性[13],此外,該算法大部分計算可以在簽名前的預處理階段完成。其具體方案定義如下:

(2)簽名算法:設待簽名的消息為m,簽名者選擇隨機數k∈Zq, 計算e=gkmodp,r=H(m‖e),s=k+xrmodq, 則得到對消息m的數字簽名 (r,s)。
(3)簽名算法驗證:簽名驗證者收到簽名 (r,s,m) 后首先計算e′=gsy-rmodp, 然后驗證等式r=H(m‖e′) 是否成立,若成立則簽名有效。
秘密共享[14]的提出是為了解決密鑰管理的安全問題。Shamir提出的基于拉格朗日插值多項式的 (t,n) 門限方案中n為成員個數,t(t≤n) 為閾值。秘密被分享為n個子密鑰分發給n個成員,只有不少于t個子密鑰才能恢復秘密。Pedersen可驗證秘密共享方案是將承諾方案與Shamir方案[15]相結合。假設有n個成員 {P1,P2,…,Pn}, 要共享的秘密為s,p為一個大質數。q為p-1的一個大質數因子,選取階數為p生成元為g的循環群G。Pedersen方案具體過程描述如下:
(1)秘密分發階段:秘密分發者D在Zq上隨機選擇n個非零元素x1,x2,…,xn構造兩個t-1階多項式
f(x)=a0+a1x+a2x2+…+at-1xt-1
(1)
g(x)=b0+b1x+b2x2+…+bt-1xt-1
(2)
其中,f(0)=a0=s。 然后分發者D計算每個子密鑰si=(f(xi),g(xi)), 將si作為Pi的秘密份額。同時分發者計算并廣播承諾Cj=gajhbj,j=0,…,k-1。 每個參與者Pi在收到自己的子密鑰后判斷等式(3)是否成立,若成立則說明子密鑰有效
(3)
(2)秘密恢復階段:秘密恢復者根據拉格朗日插值多項式的存在唯一性定理,通過t個 (xi,f(xi)) 可以確定唯一的t-1階多項式f(x), 以此來進行秘密恢復,得到秘密s=f(0)
(4)
本文提出的適用于區塊鏈溯源系統的Schnorr門限簽名方案由n個成員 {U1,U2,…,Un} 組成,在區塊鏈系統中n個成員通過安全的點對點通道以及廣播通道進行通信。假設門限簽名方案中的閾值為t,簽名者集合為T∈{U1,U2,…,Un},|T|=t。 具體的安全目標如下:
(1)實現完全去中心化。整個方案不需要借助第三方可信機構進行密鑰生成和密鑰管理,而是由成員之間通過安全通信通道交互完成密鑰生成、密鑰分發和數字簽名等協議。
(2)數字簽名的不可偽造性。在區塊鏈溯源系統中對于已經上鏈的商品溯源信息,任何惡意節點都不能偽造合法節點所生成的簽名信息。
(3)抗合謀攻擊。當成員人數少于門限值t時,無法生成門限簽名,只有當至少t個成員共同參與時,才能生成有效的門限簽名。本文方案允許惡意敵手A可以腐敗的成員個數最大為t-1。 保證在少于t個成員的私鑰泄露時,簽名者對溯源信息進行數字簽名的有效性。
本文方案實現在區塊鏈溯源系統中溯源信息的安全上鏈,保證溯源信息的真實性、透明性和不可抵賴性。通過Schnorr門限簽名方案實現鏈下對簽名所需信息的生成與交互。采用Pedersen可驗證秘密共享方案實現無可信中心分配組私鑰。根據溯源系統中的溯源信息上傳場景設置4種角色,分別是溯源信息上傳者、門限簽名成員、簽名合成者和簽名驗證者。其中門限簽名成員為溯源信息所涉及到的各個企業和供應商。區塊鏈門限簽名方案是一種通過節點間的相互協作來生成秘密份額的方案。在該方案中,節點之間共同參與驗證信息的計算,確保驗證結果的正確性。當驗證結果正確時,會生成每個區塊鏈節點的組公鑰和個人私鑰。這種基于門限簽名的機制保證了系統的安全性和可信度。通過節點之間的協作,每個節點都承擔一部分計算和驗證的責任,使得整個過程更加安全可靠。其方案邏輯如圖1所示。

圖1 方案邏輯
如圖1所示,溯源信息上傳者上傳溯源信息M。門限簽名成員使用個人私鑰生成部分簽名。簽名合成者驗證每個部分簽名,并合成部分簽名形成最終的門限簽名。簽名驗證者進行簽名驗證,并將溯源信息上鏈,上鏈過程在本文不作描述。其中由于門限簽名成員為溯源信息的相關者,在實際生產環節中可能會發生變動,因此本文方案允許門限簽名成員的動態加入和退出。
本文方案共包括5個算法,分別為密鑰生成算法TGenkey、門限簽名算法TSign、簽名驗證算法Verify、簽名成員加入算法UserAdd和簽名成員退出算法UserDelete。
2.3.1 密鑰生成:TGenkey
(1)區塊鏈溯源系統參數初始化

(2)簽名成員之間相互協作產生秘密份額
假設在區塊鏈系統中溯源信息有n個相關成員Pi,i=1,2,…,n,t為閾值,每個成員節點都有其唯一的標識符IDi。Pi表示執行操作的一方,Pj表示與Pi進行交互的另一方。此環節產生用戶Pi的公私鑰對 (uski,upki), 以及子密鑰di和組公鑰mpk。具體過程如下:
1)每個門限簽名成員節點Pi,i=1,2,…,n選擇隨機數x∈[1,q-1] 作為他的用戶私鑰uski, 則對應的用戶公鑰upki=yi=xiG。Pi廣播其公鑰upki。

fi(x)=xi+ai,1x+ai,2x2+…+ai,t-1xt-1modq
(5)
節點Pi計算Ci,k并向其它節點廣播
Ci,k=ai,kGmodq,k=1,…,t-1
(6)
同時Pi為其它n-1個成員計算共享子密鑰si,j, 并通過點對點通道發送給Pj,j=1,2,…,n,j≠i
si,j=fi(IDj)
(7)
3)區塊鏈節點Pj接收到Pi發送的si,j后,通過Pi廣播的Ci,k對其進行驗證,核實共享子密鑰是否有效。如果下述等式成立則接收消息,否則將終止密鑰生成算法
(8)
4)節點Pj驗證所有其它節點發送給它的共享子密鑰后,通過下述公式生成其子密鑰dj,并廣播其子公鑰djG
(9)
5)在所有成員計算完dj后,組私鑰為
(10)
任意t個門限簽名成員可以根據拉格朗日差值公式恢復組私鑰d,并且由此計算出組公鑰mpk

(11)
2.3.2 門限簽名:TSign
每次門限簽名由集合P={P1,P2,…,Pn} 中的t個成員Pi,i=1,2,…,t完成簽名。簽名成員通過其子密鑰di對溯源信息M進行部分簽名,將生成的部分簽名發送給指定的簽名合成者,由該合成者對每個部分簽名進行驗證,并合成最終的簽名 (M,r,s)。門限簽名具體過程如下:
(1)Pi,i=1,2,…,t生成隨機數ki∈[1,q-1], 計算Wi=kiG,Qi=diG是Pi的子公鑰。Pi廣播Wi。
(2)當Pj接收到其它t-1個成員的Wi,i=1,2,…t,i≠j后,由此計算W和它的橫坐標x
(12)
(3)Pj計算e=xmodq, 再通過要簽名的溯源信息M計算r=H(e‖M)。 接下來Pj計算sj, 并將部分簽名 (M,r,sj) 通過安全點對點通信通道發送給簽名合成者
sj=kj+djrmodq
(13)
(4)簽名合成者在接收到Pj發送的部分簽名后對其進行驗證下述等式是否成立,若不成立則終止門限簽名算法
Wj=sj-H(e‖M)·Qj
(14)
2.3.3 簽名驗證:Verify
簽名驗證者在接收到 (M,r,s) 后對門限簽名進行驗證。具體過程如下:
(1)簽名驗證者通過組公鑰Q對簽名進行驗證,依次計算 (x′,y′),e′和r′
(x′,y′)=sG-rQe′=x′modqr′=H(e′‖M)
(15)
(2)若r′=r, 則簽名正確,若等式不成立則簽名失敗。
2.3.4 簽名成員加入:UserAdd
當溯源信息涉及的簽名成員集合P需要新成員Pr加入時,Pr需要滿足以下幾點條件。①已存在的成員節點的子密鑰di(i=1,2,…,n) 不會發生改變。②新加入的節點不會改變組公鑰Q。③新節點可以生成自己的子密鑰dr且不暴露其它成員的子密鑰。假設Pr的身份標識為IDr, 具體過程如下:

gi(x)=bi,0+bi,1x+bi,2x2+…+bi,t-1xt-1modq
(16)
Pi計算相應的C′i,k并廣播它
C′i,k=bi,kGmodq,k=0,1,…,t-1
(17)
同時,Pi為其它n-1個成員計算共享子密鑰s′i,j, 并通過安全通道將其發送給Pj
s′i,j=gi(IDj)
(18)
(2)Pj收到Pi發送的s′i,j后,核實其是否有效。如果等式(19)成立,則接收該消息
(19)
(3)Pj在核實s′i,j后通過下述公式計算臨時子密鑰d′j, 并通過安全通信通道將d′j發送給新加入的節點Pr
(20)
(4)新節點Pr在接收到至少t個成員Pi,i=1,2,…,t發送的d′j后,計算自己的子密鑰dr
(21)
2.3.5 簽名成員退出:UserDelete
當溯源信息所涉及的簽名成員集合P有成員退出時,Pi(i=1,2,…,n-1) 需要重新構建每個成員的子密鑰di(i=1,2,…,n-1), 同時確保組私鑰和組公鑰保持不變。假設退出的成員為Pw,其身份標識為IDw,成員退出具體過程如下:

hi(x)=ci,1x+ci,2x2+…+ci,t-1xt-1modq
(22)

(23)

(24)

(25)

(26)
最后,Pj重構并更新其它成員的共享子密鑰,即刪除節點Pw的共享子密鑰,實現節點Pw的退出。
本文所提出的動態Schnorr門限簽名方案的正確性分析包括門限簽名、動態添加成員和動態刪除成員。分別為簽名驗證者可以驗證有效的Schnorr門限簽名;新加入的門限簽名成員可以計算有效的子密鑰,并計算組公鑰;當門限簽名成員退出時,組私鑰和組公鑰不會發生變化。
(1)門限簽名正確性分析
簽名驗證者在接收到關于溯源消息M的門限 (M,r,s) 后,通過等式(15)驗證簽名的有效性。等式(15)成立的證明過程如下:


由于上述證明,所以簽名驗證者計算e′=x′modq,r′=H(e′‖M) 后,若簽名正確則e′=e,r′=r, 證明了簽名的有效性。
(2)成員動態添加的正確性
節點Pi,i=1,2,…,n發送給新加入成員Pr的d′j符合拉格朗日插值多項式模型,那么新加入的節點Pr在收到其它t個成員的臨時秘密份額d′j后,可以通過式(21)計算出其秘密份額dr。
證明

因為
ηi(IDj)=fi(IDj)+gi(IDj)=(xi+bi,0)+(ai,1+bi,1)x+…+(ai,t-1+bi,t-1)xt-1modq

又因為根據式(20)得gi(IDr)=0, 所以

(27)
根據式(10)和式(27),可以得出新加入的節點Pr的臨時子密鑰d′r和dr相等,所以Pr在未暴露其它成員的子密鑰的同時有效地生成了其子密鑰dr, 并可以通過式(11)計算組公鑰。
(3)成員動態退出的正確性
集合P中有成員退出后組私鑰d不發生改變。
因為hi(0)=0, 所以根據式(26)可得
(28)
由式(28)可知,成員退出后組私鑰未發生改變,所以通過式(11)計算的組公鑰也不會發生改變。
3.2.1 去中心化
實現門限Schnorr門限簽名的常用方法是將組私鑰分為n份,并由可信第三方分發給每個成員。通過將子密鑰交由可信第三方完成數字簽名,t個成員即可實現門限簽名。然而,該方法存在一個潛在的問題,即一旦可信第三方出現故障,就無法進行數字簽名的操作。本文所提方案在區塊鏈溯源系統中,簽名集合P中的成員通過安全通信通道進行通信,交互式生成子密鑰和部分門限簽名。在本文方案中,為了確保簽名的有效性,采用了由簽名合成者進行部分驗證和簽名合成的步驟。這個過程可以保證簽名的正確性和一致性。最終,由簽名驗證者對簽名進行驗證,并將驗證通過的簽名廣播到區塊鏈溯源系統中。具體而言,本文方案實現了完全去中心化的目標,主要包括以下幾個步驟:
在密鑰生成算法中,門限簽名成員節點Pi通過式(6)計算Ci,k并向其它節點廣播,同時Pi為其它n-1個成員通過式(7)計算共享子密鑰si,j, 并通過點對點通道發送給Pj,j=1,2,…,n,j≠i。Pj以此無需可信中心便可通過si,j計算其子密鑰dj。
在簽名算法中,集合P中的t個成員將其對溯源消息M生成的部分簽名 (M,r,sj) 發送給簽名合成者進行簽名合成和部分簽名驗證。
同理,在簽名成員加入和退出時集合P中的節點通過式(17)、式(18)、式(23)和式(24)計算需給其他成員發送的信息。經過點對點通道和廣播的形式無需可信第三方完成簽名成員加入和退出時子密鑰的新增和更新操作。
3.2.2 不可偽造性分析
不可偽造性是動態Schnorr門限簽名重要的安全要求之一。不可偽造攻擊模型及具體分析如下。
(1)假設敵手A是第三方攻擊者,偽裝成合法簽名者。其目的是通過偽造門限簽名算法Tsign過程中所需要的子密鑰dA的值來與其他參與者共同生成有效的簽名。
敵手A在獲取到系統公共參數 (Fq,E,G,q,a,b,H) 后,被敵手A腐敗的成員S計算敵手A的公私鑰對 (uskA,upkB) 和其子密鑰dA。 在簽名階段,S將簽名 (M,r,s) 發送給敵手A,敵手A對溯源消息M構造一個有效簽名。在敵手A偽造簽名階段,為了保證偽造簽名的有效性,隨機數k必須被偽造。隨機數k是由集合P中的t個成員隨機生成的隨機數ki相加而得,無法被公開獲取。而且ki在簽名過程過沒有被重新生成過,因此A只能從kiG中嘗試獲取隨機數。此問題是橢圓曲線離散對數問題,該問題是橢圓曲線密碼安全理論的基礎,屬于非確定性多項式完備問題,因此敵手A無法成功地偽造簽名。
(2)假設敵手A是簽名成員集合P中的一個不誠實的成員,并且破壞了其它一些成員節點以生成有效的共享私鑰來偽造簽名。它的目的是破壞門限簽名算法Tsign過程中所需要的子密鑰,從而與其它參與者生成一個有效的簽名。

3.2.3 抗合謀攻擊
Schnorr門限簽名方案的不可偽造性決定本文方案至少t個成員才能生成數字簽名,而少于t個則不能。
假設簽名集合P中有t-1個惡意簽名者進行合謀攻擊,偽造門限簽名。
在簽名階段每個成員Pi(i∈[1,t-1]) 生成隨機數ki∈[1,q-1], 并偽造第t個成員的隨機數kt和子密鑰dt。 惡意簽名者Pi通過式(12)和式(13)計算對溯源信息M的部分簽名信息。在簽名驗證階段,由于其偽造的子密鑰dt在驗證階段無法通過式(15)的驗證,致使簽名失敗。惡意簽名者無法通過重新構造多項式f(xi) 以獲得子密鑰dt, 因離散對數難題也無法通過組公鑰獲取到組私鑰d。所以子密鑰dt被正確偽造的概率與直接偽造組私鑰d成功的概率相等,這意味著,攻擊者無法通過偽造子密鑰來突破門限簽名的安全性。又因為數字簽名具有不可偽造性,t-1個成員無法聯合生成任何交易的簽名。因此本文方案可以有效地抵御成員間的合謀攻擊。
3.3.1 方案對比分析
本節從簽名方式、去中心化、是否能驗證份額以及是否允許節點動態加入和退出4個方面與其它方案進行方案對比。
如表1所示,本文所提方案滿足去中心化、對溯源信息的不可抵賴性和對簽名的不可偽造性,且允許簽名成員的動態加入和退出。本文方案在區塊鏈溯源應用中更具有優勢。

表1 方案對比
3.3.2 效率分析
表2展示了本文提出的Schnorr門限簽名方案與其它簽名方案在門限簽名階段和簽名驗證階段的計算成本對比結果。其中Td表示簽名算法在橢圓曲線上進行標量乘法運算或模冪運算的計算成本,Tm表示模乘運算的計算成本,Th表示哈希函數SHA256運算的計算成本,Tc表示模求逆運算的計算成本,t為閾值。模加法、模減法運算的計算量與模冪運算、模乘運算以及標量乘法運算相比可忽略不計,因此本文不統計模加法和模減法運算的計算成本。

表2 門限簽名計算成本對比
如表2所示,在簽名階段和簽名驗證階段,本文方案的計算成本小于文獻[3]和文獻[12]中所提方案。由于文獻[10]中所提方案的計算成本較為接近。但是,由于文獻[10]所提方案在簽名階段和在簽名驗證階段進行的模冪運算更為復雜,因此本文所提方案的計算成本實際小于文獻[10]所提方案。且文獻[3]所提方案缺少簽名節點動態加入和退出機制。文獻[12]所提方案缺少節點動態退出機制。
對于本文方案的門限簽名算法和簽名驗證算法的計算成本進行仿真對比實驗。門限簽名階段主要由閾值t決定計算開銷。實驗環境為64位ubuntu-20.04.2.0系統,CPU為lntel Core i7-6500U @2.50 GHz,采用GO語言進行代碼編寫。實驗結果如圖2和圖3所示。

圖2 簽名時間對比

圖3 簽名驗證時間對比
在實驗環境和閾值相同的情況下,分別測試100次不同方案的簽名時間,實驗結果取平均值。由圖2可知,相對于文獻[3]、文獻[10]和文獻[12]所提門限簽名方案,本文方案的簽名時間較短,在閾值為20時,簽名時間約為247 ms,具有較高的簽名效率。
在實驗環境相同的條件下,分別對本文方案、文獻[3]所提方案、文獻[10]所提方案和文獻[12]所提方案中的簽名驗證階段進行100次測試,實驗結果如圖3所示。測試結果表明,相對于文獻[3]、文獻[10]和文獻[12]所提方案,本文方案在簽名驗證階段具有較高的簽名驗證效率。并且本文方案有簽名節點動態加入和退出機制,更適用于區塊鏈溯源場景。
根據區塊鏈溯源場景需求,本文提出了一種Schnorr門限簽名方案。解決了溯源信息相關者對溯源信息進行簽名的不可抵賴性、抗合謀攻擊和簽名效率問題。簽名成員協作生成子密鑰和簽名,實現了區塊鏈溯源系統在簽名環節的完全去中心化。在抗合謀攻擊中只有大于t個成員進行合謀才能進行簽名偽造。方案允許簽名成員動態加入和退出,具有良好的可調整性,且在成員加入和退出時,組私鑰和組公鑰不會發生改變。
本文提出的Schnorr門限簽名方案基于Pedersen可驗證秘密共享,在門限簽名階段和簽名驗證階段的計算效率較高,其安全性使其適用于涉及簽名成員動態加入和退出的溯源系統。