張曉宇,張麗娜,2
1.西安科技大學 計算機科學與技術學院,西安 710054
2.陜西師范大學 計算機科學學院,西安 710119
監測食品的生產過程以及供應鏈中的信息管理對于確保產品安全至關重要。人們越來越關注供應鏈中食品信息的可追溯性和信息真實性。傳統食品供應鏈存在第三方篡改數據,中心數據庫數據隱私泄露等漏洞,這導致信息的真實性和安全性無法得到保障。因此,食品溯源中的數據信息安全已成為近年來一個熱點研究課題。
如今基于區塊鏈的食品信息安全溯源方案[1]被提出。Fabrizio等人[2]通過條形碼和RFID等智能標簽,在食品供應鏈中實現精確的數據采集和溯源,同時利用區塊鏈的分布式技術存儲數據,可保證數據的真實性。如圖1所示是一種使用智能合約的大豆自動溯源方案[3]。為了控制指定人員能上傳數據,Tian等人[4]將產品與RFTD標簽的唯一標識碼綁定,并對產品的信息數據進行加密保護,防止產品被仿冒。雖然RFID的方案安全性高,但使用RFID的成本過高。許多機構也因為RFID成本高,考慮環保等因素開始建議或強制使用紙質標簽進行溯源。近幾年使用二維碼代替RFID的方案成為趨勢。

圖1 基于智能合約的大豆自動溯源方案Fig.1 Automatic soybean traceability scheme based on smart contract
隨著手機的普及,任何智能手機都可以通過二維碼閱讀器輕松獲取二維碼數據。然而,二維碼編碼信息公開的特點會導致嵌入的二維碼機密信息受到安全威脅。二維碼只提供數據庫的網站鏈接(URL),授權用戶可以通過鏈接URL登錄到數據庫,然后獲得機密數據。然而,這種機制需要維護數據庫、訪問控制等需求。在線解碼還可能數據庫暴露導致其被攻擊,將信息存儲在中心數據庫可能會導致信息泄露等風險。因此,具有信息防篡改、身份認證等功能的二級二維碼的方案被提出,用于解決二維碼信息安全問題。
傳統的數字秘密隱藏方式[5-6]是利用水印技術將秘密隱藏到宿主圖像中,該過程將秘密嵌入到像素或宿主圖像的空域或頻域。但是,這種方案在解碼時需要做進一步的圖像處理,如像素和頻率變換,這導致二維碼閱讀器無法直接提取秘密。這些方案的解碼方式限制了二維碼閱讀器在現實中的應用。文獻[7]中的水印方案通過調整二維像素塊的長寬比來隱藏水印,但這種方案相比較文獻[5-6]的有效秘密載荷量和魯棒性有所不足。Lin[8]利用wet paper codes(WPCs)算法對秘密位進行編碼,通過修改二維碼塊的像素值來隱藏秘密位流和認證位流。但是,這個秘密的存儲容量非常小。
Tkachenko等人[9]通過將二維碼的黑色模塊修改成特殊紋理圖案,將秘密信息嵌入二維碼中,使二維碼具有兩層信息存儲功能。該方案的不足在于,二級存儲機制受黑色像素塊數量限制。Wan等人[10]提出的VSSQR方案通過疊加足夠數量的二維碼恢復隱藏信息?;謴偷慕Y果可由人眼直接識別,但恢復秘密圖像時可能會造成視覺失真。Cheng等人[11]的方案通過將加密的二維碼都直接進行異或獲取秘密信息,但是該方案的秘密圖像格式僅限于二值圖像,且秘密有效載荷量小。Lin等人[12]通過LSB隱寫方案將秘密信息嵌入到二維碼,其中安全強度依賴于秘密隱藏技術導致了相對較高的計算復雜度。
Chu等人[13]提出了一種基于視覺密碼學和模式識別技術的二級二維碼方案,將二維碼的一個模塊替換為一個3×3子區域,將關鍵點信息存儲在中心區域中,將圖片信息存儲在周圍8個子區域,該方案可以將圖片以水印方式嵌入二維碼中,在不改變二維碼可讀性的前提下,可以清楚地辨認出嵌入的圖像。Fu等人[14-15]繼續改進Chu的方案,結合視覺密碼將二維碼用于圖像秘密隱藏和恢復,這些方案將二維碼的存儲量擴大8倍,有效地提高了秘密載荷量。本文使用這種方案,將簽名轉為數據流的數據方式嵌入到二維碼中,實現二維碼數據的訪問控制和身份驗證。
溯源方案要求生成大量不同的簽名,所以需要重復用自己的私鑰對不同明文進行簽名,并認證不同的簽名,因此群簽名的驗證方案適合溯源的場景。Qiu等人[16]提出利用將成員公鑰之和作為群公鑰的方法,實現了群簽名的方案,但收集成員私鑰生成群私鑰的過程會造成安全風險。經典的橢圓曲線數字簽名(ECDSA)在簽名和驗證過程各使用了1次求逆運算,復雜的求逆運算制約效率的提升,使其不能在輕量級計算的場景中使用。因此,2008年,潘曉君[17]首次提出了一種基于ECDSA無模逆計算的簽名算法。2020年,肖帥等人[18]改進的無模逆ECDSA雙方簽名方案,通過引入雙參數以及在簽名和驗證階段回避求模逆運算,能夠有效防止數字簽名偽造攻擊。
現有文獻中的大多數方案描述了區塊鏈在溯源體系中的理論框架和應用,很少關注以下兩類問題:(1)區塊鏈網絡中的節點之間的信息安全問題;(2)二維碼信息公開的特點導致無法存儲機密數據。
因此,為了克服上述的缺陷,本文基于區塊鏈的溯源體系,給出了一個保障節點信息安全的解決方案:結合二級二維碼與群簽名來創建一個安全有效的節點信息,實現信息防篡改和身份認證的功能。這種溯源方案有效提高信息安全性的同時可提供隱私保護的功能。本文方案主要設計思路為:(1)本文改進文獻[5,8]的二維碼方案,修改二級信息的嵌入驗證機制,實現對信息的完整性驗證和二級信息糾錯功能。(2)通過使用群公鑰生成算法來改進無模逆ECDSA雙方簽名方案[18],實現多方群簽名方案。將簽名嵌入二維碼生成分級信息安全的二級二維碼,管理層通過溯源成員上傳的身份簽名σ1來驗證其是否為合法成員,只有合法成員可上傳溯源信息。用戶獲取二維碼的二級信息σ2利用群簽名算法驗證二維碼的完整性。
群簽名是一類特殊的數字簽名,其概念[19]最早由Chaum和Heyst在1991年提出。Camenish、Stadler等人修改并完善了群簽名算法。一個完整的群簽名由多名擁有自己密鑰對的簽名者組成,每個群體擁有一個共同的群公鑰,群中的每個成員都可以使用自己的私鑰代表群對消息簽名,同時,每個成員生成的簽名可由群公鑰驗證。2003年,Bellare等人首次嚴格定義和形式化群簽名安全模型[20],標準群簽名方案包含如下5種算法。
(1)創建:產生群公鑰、群私鑰和追蹤密鑰的多項式算法;
(2)注冊:用戶和群管理員之間的交互式協議,產生新成員的私鑰和身份證書;
(3)簽名:輸入一個消息和一個群成員的私鑰后,輸出對消息的群簽名;
(4)驗證:輸入消息,群公鑰和群簽名,輸出群簽名的驗證結果;
(5)追蹤:輸入成員上傳的簽名,輸出驗證其合法身份。
無模逆ECDSA簽名算法[18]是在ECDSA算法上的改進,通過避免模逆運算有效地提高了簽名的效率,適用于輕量級設備的日常使用。
簽名過程如下:
(1)首先構建橢圓曲線的域參數T=(a,b,G,n,h),發送方A選擇隨機整數d作為私鑰,利用基點G計算公鑰Q=d×G,生成密鑰對(Q,d);
(2)A選擇一個隨機整數k∈[1,n-1],計算點kG=(x1,y1);
(3)找出一組α,β∈[1,n-1],使α,β滿足要求k≡(αr+βdi)(modn);
(4)計算消息m的哈希值e=H(m);
(5)令r=x1(modn),如果r=0,返回步驟2;
(6)計算s=r(α+ed)(modn),如果s=0,返回步驟2;
(7)輸出簽名值(r,s,β)。
驗證過程如下:
(1)接受方B在收到消息m和簽名值(r,s,β)后,進行以下運算;
(2)如果s,r,β?[1,n-1],則驗證失敗;
(3)計算簽名消息m的哈希值e=H(m);
(4)計算γ=(s+βm)(modn),u=er(modn);
(5)計算γG-uQ=(x2,y2),令v=x2(modn),如果r=0,驗證失敗;
(6)如果v=r,驗證成功,否則,驗證失敗。
1994年,二維碼由Denso wave公司為日本汽車行業發明。二維碼由國際標準化組織(ISO)認證并列舉了完整說明,二維碼主要特點就是輸出尺寸小但讀取速度非常快。二維碼將信息編碼成二進制形式,每個信息位表示為黑色或白色像素塊,輸入數據采用Reed-Solomon糾錯碼校正。在二維碼生成過程中,必須選擇4個糾錯級別中的一個,最低級別可恢復7%的錯誤信息,最高級別可恢復30%錯誤信息。
如今,40個二維碼版本具有不同的存儲容量。二維碼具有特定的幾何校正結構和高速解碼結構,采用3種位置標簽進行二維碼檢測和方位校正,使用一個或多個對齊模式進行編碼變形調整。模塊坐標由定時模式設置。此外,格式信息區域包含糾錯級別和掩碼模式,代碼版本和糾錯位存儲在版本信息區域。如圖2所示是版本5的二維碼組成結構圖。

圖2 版本5的二維碼組成結構Fig.2 QR code composition structure of version 5
標準二維碼的解碼主要基于兩個原則:基于像素密度的模塊識別和基于關鍵像素的模塊識別?;陉P鍵像素的識別是根據每個模塊中間區域的顏色確定模塊識別結果。如圖3所示,如果模塊中間的區域是黑色像素,則識別為黑色模塊。目前,移動終端使用的具有二維碼解碼功能的軟件(如支付寶、微信、淘寶等)支持這一識別原則。

圖3 基于關鍵像素點的模式識別Fig.3 Pattern recognition based on key pixels
本文利用這一識別原理,將每個模塊細分為3×3個子模塊,如圖4所示,將原模塊的像素信息綁定到中心子模塊,并利用剩下的8個子模塊隱藏秘密信息,中央模塊為公共消息模塊(public message module,PMM),其余用于存儲秘密消息模塊(secret message module,SMM)。

圖4 劃分為3×3個子模塊Fig.4 Divided into 3×3 sub modules
漢明碼(Hamming code)是由Richard Hamming在1950年發明的分組糾錯碼。基本原理[21]是構造檢驗矩陣將校驗位嵌入傳輸的信息碼中,通過奇偶校驗位定位錯誤位,有效糾正錯誤數據位。
漢明碼的編碼利用信息位數k,構造糾錯的校驗矩陣G,根據G求出傳輸的信息碼字C。漢明碼的編碼過程如下:
(1)對于(n,k)漢明碼,總碼長為n=2m-1,信息位個數為k=2m-1-m,校驗位個數為m=n-k;
(2)設k位傳輸的信息碼字為C=C1,C2,…,C2m-1,其中糾錯校驗位表示為剩下C-C′作為信息位;
(3)生成隨機二進制校驗矩陣Gm×2m-1;
(4)通過計算GCT=0得到嵌入m位校驗位C2i(i=0,1,…,m-1)的傳輸信息碼C。
漢明碼的譯碼過程計算e判斷接收到的信息碼C?是否有錯,并根據e的權重檢測出錯誤數據位并糾正。漢明的譯碼過程如下:
(1)假設接收到的信息碼為C?,利用糾錯矩陣G計算e=C?T×G;
(2)若e=0,則表示接收到的C?=C,信息碼無損失或錯誤,譯碼結束,若e≠0,則表示接收到的C?有錯誤位,轉至步驟(3);
(3)檢測eT在校驗矩陣G中對應向量位置,將二進制向量轉換為十進制記作q,翻轉接收信息碼C?的第q位碼字,即得到正確信息碼C,糾錯完畢。
本章描述節點溯源信息安全的解決方案,即利用二級二維碼來確保食品供應鏈中的交易信息安全,同時利用二級二維碼嵌入改進的ECDSA群簽名方案實現數據防篡改和身份認證,在二維碼嵌入簽名時,對生成的簽名進行糾錯編碼處理。該方案消除了對可信第三方的需求,并為供應鏈的管理和節點信息安全提供了高完整性、可靠性和安全性的框架。
本文將二級二維碼與群簽名結合起來,實現可驗證信息真實性的產品溯源方案,保證上傳的溯源信息的真實性,有效防止假冒節點,并允許供應鏈實體之間進行安全的信息交易,如圖5所示。本文提出的解決方案將節點簽名生成和驗證的算法包裝成黑盒機制來保證各節點之間的交易安全。

圖5 基于二級二維碼的區塊鏈食品溯源方案Fig.5 Blockchain food traceability scheme based on two-level QR code
每個參與的實體都必須注冊成為群成員,并有唯一的以太網地址來唯一標識參與者。每個成員都有自己專屬密鑰對用于數字簽名,并驗證身份和二維碼的信息完整性。
參與者使用智能合約將產品相關信息上鏈,通過二級二維碼將現實中的貨物和區塊鏈連接起來,實現食品溯源的物聯網。通過認證二維碼中提取的群簽名,來驗證二維碼的真實性,確保數據不被偽造。節點上傳身份簽名,驗證合法后獲取信息上鏈權限,每個參與實體都有一個以太網地址,并通過調用智能合約中的函數來參與,將食品信息上傳到IPFS中。
本節闡述了該方案如何實現信息安全,防止假冒節點上傳虛假信息,實現二維碼防篡改的功能。過程包括:(1)簽名的生成和認證;(2)二級二維碼生成與提取。
2.2.1 簽名生成與認證
簽名的生成認證階段主要是簽名的生成、成員合法身份的驗證和簽名消息正確性的驗證。本文利用群公鑰生成算法改進無模逆ECDSA簽名算法,將原本雙方協議擴展成多方簽名和認證,實現本文需要的群簽名方案,群簽名的生成與認證過程如下:
Setup。構建T=(a,b,G,n,h)作為橢圓曲線的域參數,參數a、b為橢圓曲線方程的參數,參數G表示選取的第一個參考點,n為G的階,參數h代表余因數控制選取點的密度,帶簽名消息m為商品的唯一標識碼。
UserKeyGen。用戶Ui隨機取整數di(1<di≤n-1)作為私鑰,并計算用戶的公鑰Qi=di×G,最后輸出密鑰對(Qi,di)。
GroupKeyGen。群管理層OA接收每位群成員的公鑰Qi(i=1,2,…,m),由群管理層計算出群公鑰Q=Q1+Q2+…+Qm并分發給群成員,Q′為Q-Qi子群公鑰。
ID-SignGen。(Qi,di)為用戶Ui的密鑰對,待簽名的消息m為商品的唯一標識碼,用戶Ui簽名生成過程如下:
(1)Ui隨機選取隨機整數k,k∈[1,n-1];
(2)計算kG=(x1,y1)和r≡x1(modn),如果存在r=0,轉到步驟1;
(3)確定整數k之后,Ui可以找到1組整數α,β∈[1,n-1],并 且 使 得 整 數α,β可 以 滿 足 條 件k≡(αr+βdi)(modn);
(4)計算需要簽名的唯一標識碼m的哈希值e=H(m);
(5)計算s≡r(α+edi)(modn),如果s=0,轉到步驟1;
(6)上傳至管理員OA驗證簽名σ1=(s,β,r)。
ID-SignVerify。管理者OA擁有全部的公鑰Qi和群公鑰Q,接收驗證U1的簽名σ1=(s,β,r),通過驗證簽名正確,確定U1身份是否真實,來確定節點是否為假冒的攻擊者,驗證步驟如下:
(1)OA先驗證s,α,r是否為區間[1,n-1]內的整數,若驗證失敗,則拒絕簽名;
(2)通過將公開的商品唯一標識碼作為公開消息m,計算m的哈希值e=H(m),計算u=er;
(3)計算sG+(β-u)Qi=(x3,y3);
(4)令v=x3(modn);
(5)若v=r,則可以確定上傳者為注冊的群成員,允許其上傳數據至區塊鏈,并生成二級二維碼嵌入σ2,否則認證失敗,拒絕其向區塊鏈上傳數據。
GroupSignGen。(Qi,di)為用戶Ui的密鑰對,待簽名的消息m為商品的唯一標識碼,用戶Ui簽名生成過程如下:
(1)Ui隨機選取隨機整數k,k∈[1,n-1];
(2)計算kG=(x1,y1)和r≡x1(modn),如果存在r=0,轉到步驟(1);
(3)確定整數k之后,Ui可以找到1組整數α,β∈[1,n-1],并 且 使 得 整 數α,β可 以 滿 足 條 件k≡(αr+βdi)(modn);
(4)計算需要簽名的唯一標識碼m的哈希值e=H(m);
(5)計算kG+(β-er)Q′=(x2,y2);(6)計算r′≡x2(modn),若r′=0,則轉到步驟(1);(7)輸出需要嵌入二維碼中的二級信息簽名σ2=(s,β,r′)。
GroupSignVerify。對于其他成員Pi來說,Pi只有自己的公鑰Qi和群公鑰Q,從二級二維碼中提取的群簽名σ2并驗證,驗證步驟如下:
(1)Pi驗證s,β,r′是否為[1,n-1]內的整數,若驗證失敗,則拒絕簽名σ2;
(2)計算商品標識碼消息m的哈希值e=H(m),令u=er;
(3)計算(β-u)Q+sG=(x4,y4);
(4)令v=x4(modn);
(5)若v=r′,則接受簽名,證明二維碼沒有被篡改即區塊鏈中的信息數據真實,否則說明區塊鏈中的數據是偽造的。
2.2.2 二級二維碼生成提取
簽名σ2嵌入二級二維碼和提取秘密信息的過程可能會出現通信數據損失,因此本方案采用(7,4)漢明碼對簽名σ2轉換的二進制數據流S進行分組糾錯編碼處理,生成可糾正多比特錯誤數據的數據流S′。二級二維碼的生成主要包括兩個階段:(1)簽名隱藏算法,(2)簽名恢復算法。
在秘密隱藏階段,將簽名生成算法得到群簽名轉換成二進制的數據流,并嵌入載體二維碼中得到最終的二級二維碼。在簽名恢復階段,根據融合機制從相應的二級二維碼中提取消息的群簽名,并通過群公鑰驗證消息的準確性后,輸出關于簽名有效性的判斷。
本文采用群簽名來驗證消息正確性,利用二維碼識別模式的冗余,將秘密信息嵌入二維碼。之后可以通過識別二級的編碼區域中的黑白像素點來恢復秘密消息。
(1)簽名隱藏算法步驟
本文將群簽名嵌入到載體二維碼中,將二維碼的一個像素模塊用3×3子模塊的中央模塊PMM替換,二維碼仍然保持其可讀性,其余8個子模塊SMM用于存儲秘密信息。在此基礎上,調用算法1將群簽名Group-SignGen算法生成的簽名σ2嵌入SMM模塊生成二級二維碼。
算法1
輸入:驗證成功的群簽名σ2,載體二維碼C,大小為m×n。
輸出:帶有群簽名的二級二維碼T。
步驟1將群簽名信息σ2轉換成二進制的數據流流并表示為S。將3位校驗單元嵌入每4位數據位中,計算嵌入校驗位后的數據流的長度為l=length(S′)。
步驟2設p=1。S′(1,p)表示S′的第p塊數據。
步驟3設i=j=2,其中i表示二維碼的行,j表示二維碼的列。
步驟4令p=p+1。如果p>length(S),轉至步驟6,否則,轉至步驟5。
步驟5如果C1(i,j),C2(i,j),…,Cn(i,j)是功能圖形或S′(1,p)為?,則轉到步驟6。否則,轉至步驟7。
步驟6對于任意k(1≤k≤n),生成8位二進制隨機數并利用矩陣式用生成的隨機數帶入:

步驟7對于任何任意k(1≤k≤n),從S′中有序選擇,并將十進制數轉換為8位二進制數。那么,讓:

步驟8令j=j+3。如果j>n,則轉至步驟9。否則,轉至步驟4。
步驟9令j=2,i=i+3。如果i>m,則轉至步驟10。否則,轉至步驟4。
步驟10成功輸出一個二級二維碼,算法結束。
(2)簽名恢復算法步驟
秘密提取和恢復過程是秘密隱藏的逆過程。在信息提取過程中,為了保證提取數據的完整性和準確性,采用簽名長度作為輸入參數,具體算法見算法2。將簽名提出,通過調用GroupSignVerify算法驗證簽名的正確性,來保證二維碼的完整性和真實性。
算法2
輸入:嵌入群簽名的二級二維碼T,簽名長度l。
輸出:群簽名σ2,載體二維碼C。
步驟1設i=j=2,其中i表示二維碼的行參數,j表示二維碼的列參數。
步驟2設flag=0,其中flag表示提取的秘密位的計數器。
步驟3如果T1(i,j),T2(i,j),…,Tn(i,j)在功能區域,則令參數j=j+3,如果j>n,則令參數i=i+3。如果定位點處于T1(i,j),T2(i,j),…,Tn(i,j)在編碼區域,則轉到步驟4。
步驟4按以下公式將黑白像素值提取出二進制數據流:

步驟5將提取到的8 bit的二進制數據流S′t添加到S′末位。
步驟6如果flag>l,則轉至步驟9。否則,轉至步驟7。
步驟7令j=j+3。如果j>n,則轉至步驟8。否則,轉至步驟3。
步驟8令j=2,i=i+3。如果i>m,則轉至步驟9。否則,轉至步驟3。
步驟9利用漢明校驗位糾正數據流S′,再提取原數據流S。
步驟10將數據流S轉化為十進制,輸出群簽名。秘密提取恢復算法結束。
(1)上傳簽名的驗證
管理者收到簽名信息σ1=(s,β,r)和唯一標識碼m的哈希值e,并且管理者擁有群公鑰和所有的公鑰Q1,Q2,…,Qn,正確性分析如下:
所以可得出:v=x3=x1=r(modn)。
(2)其他成員驗證簽名
其他成員收到簽名信息σ2=(s,β,r′)和明文m的哈希值e,他們只擁有群公鑰和自己的公鑰Qi,正確性分析如下:
若(s,β,r′)是對群消息m的簽名信息,成員使用群公鑰進行驗證,則:

所以可得出:v=x4=x2=r′(modn)。
3.2.1 數據防篡改
簽名的生成過程需要明文信息m參與,從而保證信息的完整性。如果信息發生變化,那么相對的哈希值則會改變,而生成簽名消息的過程中,如果簽名信息的哈希值改變,群成員的簽名認證無法通過,保證簽名數據不會被篡改。
在節點交互時,首先提取簽名消息,并驗證簽名真偽來確定二維碼是否被篡改。同時只有群內部成員擁有修改的權限,通過上傳身份簽名,驗證成功后可以獲得上傳信息的權限,每次數據記錄到區塊鏈后不可更改,從而保證數據的真實性。
3.2.2 抗密鑰泄露
大多數情況下,可利用相同隨機數構造二階線性方程組,解出用戶的私鑰,從而造成私鑰的泄露。所以本文對不同消息進行簽名時,使用不同的隨機數防止密鑰泄露。
本文的方案每次簽名的隨機數不同,通過si的表達式得出以下方程組(1)為:

未知量di,α1,α2,…,αn,由此得出n個方程組有n+1個未知數,根據代數知識,不能求出私鑰di。所以本文方案在保證隨機數不同時,能夠防止密鑰泄露。
3.2.3 簽名防偽造
攻擊者進行主動攻擊,只能攻擊消息m的哈希值。由于攻擊者不知道密鑰對以及簽名者的私鑰di,因此攻擊者偽造出的簽名消息不能通過驗證,嵌入二維碼的簽名不能被偽造,后續的節點就可以根據二級信息來驗證二維碼的真實性,這樣,就彌補了二維碼可被偽造的安全缺陷。
3.2.4 身份可追蹤
由ID-SignVerify的過程可以得知,管理者OA擁有全部成員的公鑰,簽名驗證過程需要上傳者保證上傳的身份簽名σ1真實,管理者才能使用對應的公鑰成功驗證簽名者的身份。因此,上傳者想要上傳群簽名就需要管理者協助通過身份驗證,管理者OA協助的同時也保存Ui相關的身份信息。當出現爭議時管理者OA可以通過ID-SignVerify過程實現對上傳者的身份信息的追蹤。
為了評估本文提出方案的可行性,本文列舉了一系列實驗結果,并與其他文獻的相關結果進行比較。
根據所舉例子中需要隱藏的信息長度,本文選擇糾錯等級為H,版本為5的二維碼作為載體圖像。實驗結果如表1所示,可以看到二級二維碼的像素點更密集,在不改變原有載體二維碼存儲空間的條件下,將二維碼容量擴大了8倍。由于長度顯示限制,提取結果圖給出了部分實驗結果截圖。

表1 二級二維碼的生成和提取Table 1 Generation and extraction of two-level QR code
本文基于二維碼的模塊識別特性采用3×3的矩陣作為模塊識別單元,秘密載荷量為載體二維碼容量的9倍。與其他文獻秘密載荷量比較結果如表2所示。

表2 秘密載荷量對比Table 2 Number of secret bits in proposed scheme and related works
文獻[8,10]利用二維碼的容錯性,通過修改二維碼的部分像素實現秘密信息的嵌入,這使得秘密信息的最大載荷量局限于二維碼的糾錯能力?;诙S碼的識讀模式,文獻[9]通過用紋理圖案替換二維碼中的黑色模塊來嵌入秘密信息;不同于文獻[8-10],本文用3×3的子模塊替換了全部模塊,所以信息嵌入量具有秘密載荷量較高的優勢。
群簽名的生成由兩步構成,先利用SHA256哈希算法預處理商品標識碼消息m生成固定長度消息e,之后通過GroupSignGen算法得到σ2=(s,β,r′),其中σ2最大長度為768 bit,嵌入漢明校驗位的最終簽名長度為1 344 bit,低于載體二維碼的最大載荷量。因秘密載荷量可以隨二維碼版本提高而提高,所以可根據二級秘密信息的長度選擇合適版本的載體二維碼。
當二級二維碼通過公開信道傳輸時,外部干擾是不可避免的,如遮擋、旋轉或壓縮。為了驗證一般圖像處理后的二級二維碼仍然具有可讀性,以及可以正確地提取二級信息,本文分析了二級二維碼抵抗幾何攻擊的性能,結果如表3所示。

表3 圖像處理操作測試結果Table 3 Image processing operation test results
本文的方案在幾何變換后仍可以有效地提取出各類信息。同時,本文方案生成的二維碼還支持被各類手機軟件正確讀取,如淘寶、支付寶、微信等。表4列舉的二級二維碼被各類軟件掃描的結果表明,本文方案是可行的,生成的二級二維碼具有自適應性。

表4 掃描結果對比Table 4 Comparison of scanning results
本節從二維碼的容錯率以及二級信息的有效載荷量等方面與其他文獻進行了比較。表5為本文與其他相關方案的比較結果??梢钥闯霰疚姆桨笡]有占用載體二維碼的糾錯區域,從而保證二級二維碼高魯棒性,使其可以抵御幾何攻擊,并具有較高秘密載荷量。

表5 二級二維碼方案比較Table 5 Two-level QR code scheme comparison
文獻[8,10,12]利用二維碼的糾錯能力隱藏秘密信息,降低了二維碼應對幾何攻擊的魯棒性。文獻[9,11]利用視覺方案隱藏和提取秘密信息,可以保證二維碼的魯棒性,但提取時需要額外的圖像處理增加了計算量。本文方案將二維碼像素擴展為3×3的子區域,不影響魯棒性的同時可通過算法2直接掃描提取秘密信息。文獻[10-11]的秘密提取方法是對多張二維碼異或疊加,需要多個份額的參與,這種方式具有不穩定性。本文和其他方案只需一個二維碼即可完成信息隱藏和提取。
與其他方案相比,本文方案在二級信息有效載荷量方面存在顯著優勢,相比較表中其他方案將秘密信息存儲在二維碼的封面圖像的方法,本文將數據存儲量擴大了8倍,有效提高了秘密載荷量。
本文方案利用二級二維碼實現節點間的信息驗證,以二維碼版本5,糾錯等級為H的二維碼為例,普通二維碼的掃描平均耗時為0.416 s,RFID掃描的平均耗時為0.15 s,本文二級二維碼方案掃描提取一級信息平均耗時為0.432 s,提取二級信息平均耗時為0.441 s,群簽名認證的仿真實驗平均耗時0.021 5 s,總體平均耗時為0.894 5 s,由此得出本文方案的掃碼耗時控制在1 s以內。雖然該方案的耗時略高于RFID和普通二維碼,但溯源過程涉及生產、物流和銷售等環節,因此時間跨度較大,所以二級二維碼對總體溯源過程造成的影響可忽略不計。
本文的群簽名方案相較于ECDSA算法,避免模逆運算降低算法的復雜度,提高了簽名的效率。設n為模乘運算的有限域,根據文獻[18]計算一次模乘的復雜度為O(n2lnn),乘運算的復雜度為O(n2),模逆運算復雜度為O(9n2)。將傳統的ECDSA方案計算復雜度與本文群簽名方案計算復雜度作比較,ECDSA的計算復雜度為N1=O(8n2lnn+21n2),本文的簽名驗證算法的計算復雜度為N2=O(4n2lnn+3n2),成員簽名認證算法計算復雜度為N3=O(4n2lnn+4n2),簽名總計算復雜度為N4=O(8n2lnn+7n2)。本文方案相比較ECDSA方案的計算復雜度較低,效率會更高。
因此,本文方案的掃碼耗時略高,但通過降低驗證算法的時間復雜度,保證了整體溯源方案的效率。
本節從溯源方案的節點安全方面與其他文獻進行了比較。表6為本文與其他相關溯源方案的比較結果。可以看出本文方案同時具備身份驗證和訪問控制的功能,有效保障節點間信息安全,并且使用二級二維碼有效降低溯源成本。

表6 溯源方案節點安全性比較Table 6 Comparison of node security of traceability scheme
文獻[4]利用RFID控制節點使用特定設備上傳信息。文獻[22]通過輔助數據庫建立身份信息索引,驗證上傳節點身份,這種方法可能會吸引攻擊者對輔助數據庫進行攻擊。文獻[23]使用雙鏈跟蹤上傳者身份信息,但是雙聯驗證計算量較大。文獻[24]是利用傳統區塊鏈防止信息篡改,保障數據存儲階段的安全。
本文使用群簽名和二級二維碼同時實現身份驗證與訪問控制,不僅保證節點真實性,還可以保證信息上傳和存儲階段的完整性,并在節點間使用紙質二維碼有效控制成本。
本文提出了一個保障節點信息安全的溯源方案,利用二級二維碼嵌入群簽名的方案來保證溯源信息的真實。與其他方案相比,本文通過上傳者的身份驗證防止非法攻擊,并利用二級二維碼保證數據真實性,有效地解決節點交易過程中的信息安全問題。由于本文給出的溯源方案具有通用性,因此各類供應鏈都可以使用本文方案追蹤溯源信息,具有實際的應用價值。在未來的工作中,計劃進一步提高該方案的二級數據魯棒性,保證方案適用于更復雜的識別環境。