張曉宇,張麗娜,2
1.西安科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,西安 710054
2.陜西師范大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,西安 710119
監(jiān)測(cè)食品的生產(chǎn)過(guò)程以及供應(yīng)鏈中的信息管理對(duì)于確保產(chǎn)品安全至關(guān)重要。人們?cè)絹?lái)越關(guān)注供應(yīng)鏈中食品信息的可追溯性和信息真實(shí)性。傳統(tǒng)食品供應(yīng)鏈存在第三方篡改數(shù)據(jù),中心數(shù)據(jù)庫(kù)數(shù)據(jù)隱私泄露等漏洞,這導(dǎo)致信息的真實(shí)性和安全性無(wú)法得到保障。因此,食品溯源中的數(shù)據(jù)信息安全已成為近年來(lái)一個(gè)熱點(diǎn)研究課題。
如今基于區(qū)塊鏈的食品信息安全溯源方案[1]被提出。Fabrizio等人[2]通過(guò)條形碼和RFID等智能標(biāo)簽,在食品供應(yīng)鏈中實(shí)現(xiàn)精確的數(shù)據(jù)采集和溯源,同時(shí)利用區(qū)塊鏈的分布式技術(shù)存儲(chǔ)數(shù)據(jù),可保證數(shù)據(jù)的真實(shí)性。如圖1所示是一種使用智能合約的大豆自動(dòng)溯源方案[3]。為了控制指定人員能上傳數(shù)據(jù),Tian等人[4]將產(chǎn)品與RFTD標(biāo)簽的唯一標(biāo)識(shí)碼綁定,并對(duì)產(chǎn)品的信息數(shù)據(jù)進(jìn)行加密保護(hù),防止產(chǎn)品被仿冒。雖然RFID的方案安全性高,但使用RFID的成本過(guò)高。許多機(jī)構(gòu)也因?yàn)镽FID成本高,考慮環(huán)保等因素開(kāi)始建議或強(qiáng)制使用紙質(zhì)標(biāo)簽進(jìn)行溯源。近幾年使用二維碼代替RFID的方案成為趨勢(shì)。
圖1 基于智能合約的大豆自動(dòng)溯源方案Fig.1 Automatic soybean traceability scheme based on smart contract
隨著手機(jī)的普及,任何智能手機(jī)都可以通過(guò)二維碼閱讀器輕松獲取二維碼數(shù)據(jù)。然而,二維碼編碼信息公開(kāi)的特點(diǎn)會(huì)導(dǎo)致嵌入的二維碼機(jī)密信息受到安全威脅。二維碼只提供數(shù)據(jù)庫(kù)的網(wǎng)站鏈接(URL),授權(quán)用戶可以通過(guò)鏈接URL登錄到數(shù)據(jù)庫(kù),然后獲得機(jī)密數(shù)據(jù)。然而,這種機(jī)制需要維護(hù)數(shù)據(jù)庫(kù)、訪問(wèn)控制等需求。在線解碼還可能數(shù)據(jù)庫(kù)暴露導(dǎo)致其被攻擊,將信息存儲(chǔ)在中心數(shù)據(jù)庫(kù)可能會(huì)導(dǎo)致信息泄露等風(fēng)險(xiǎn)。因此,具有信息防篡改、身份認(rèn)證等功能的二級(jí)二維碼的方案被提出,用于解決二維碼信息安全問(wèn)題。
傳統(tǒng)的數(shù)字秘密隱藏方式[5-6]是利用水印技術(shù)將秘密隱藏到宿主圖像中,該過(guò)程將秘密嵌入到像素或宿主圖像的空域或頻域。但是,這種方案在解碼時(shí)需要做進(jìn)一步的圖像處理,如像素和頻率變換,這導(dǎo)致二維碼閱讀器無(wú)法直接提取秘密。這些方案的解碼方式限制了二維碼閱讀器在現(xiàn)實(shí)中的應(yīng)用。文獻(xiàn)[7]中的水印方案通過(guò)調(diào)整二維像素塊的長(zhǎng)寬比來(lái)隱藏水印,但這種方案相比較文獻(xiàn)[5-6]的有效秘密載荷量和魯棒性有所不足。Lin[8]利用wet paper codes(WPCs)算法對(duì)秘密位進(jìn)行編碼,通過(guò)修改二維碼塊的像素值來(lái)隱藏秘密位流和認(rèn)證位流。但是,這個(gè)秘密的存儲(chǔ)容量非常小。
Tkachenko等人[9]通過(guò)將二維碼的黑色模塊修改成特殊紋理圖案,將秘密信息嵌入二維碼中,使二維碼具有兩層信息存儲(chǔ)功能。該方案的不足在于,二級(jí)存儲(chǔ)機(jī)制受黑色像素塊數(shù)量限制。Wan等人[10]提出的VSSQR方案通過(guò)疊加足夠數(shù)量的二維碼恢復(fù)隱藏信息。恢復(fù)的結(jié)果可由人眼直接識(shí)別,但恢復(fù)秘密圖像時(shí)可能會(huì)造成視覺(jué)失真。Cheng等人[11]的方案通過(guò)將加密的二維碼都直接進(jìn)行異或獲取秘密信息,但是該方案的秘密圖像格式僅限于二值圖像,且秘密有效載荷量小。Lin等人[12]通過(guò)LSB隱寫方案將秘密信息嵌入到二維碼,其中安全強(qiáng)度依賴于秘密隱藏技術(shù)導(dǎo)致了相對(duì)較高的計(jì)算復(fù)雜度。
Chu等人[13]提出了一種基于視覺(jué)密碼學(xué)和模式識(shí)別技術(shù)的二級(jí)二維碼方案,將二維碼的一個(gè)模塊替換為一個(gè)3×3子區(qū)域,將關(guān)鍵點(diǎn)信息存儲(chǔ)在中心區(qū)域中,將圖片信息存儲(chǔ)在周圍8個(gè)子區(qū)域,該方案可以將圖片以水印方式嵌入二維碼中,在不改變二維碼可讀性的前提下,可以清楚地辨認(rèn)出嵌入的圖像。Fu等人[14-15]繼續(xù)改進(jìn)Chu的方案,結(jié)合視覺(jué)密碼將二維碼用于圖像秘密隱藏和恢復(fù),這些方案將二維碼的存儲(chǔ)量擴(kuò)大8倍,有效地提高了秘密載荷量。本文使用這種方案,將簽名轉(zhuǎn)為數(shù)據(jù)流的數(shù)據(jù)方式嵌入到二維碼中,實(shí)現(xiàn)二維碼數(shù)據(jù)的訪問(wèn)控制和身份驗(yàn)證。
溯源方案要求生成大量不同的簽名,所以需要重復(fù)用自己的私鑰對(duì)不同明文進(jìn)行簽名,并認(rèn)證不同的簽名,因此群簽名的驗(yàn)證方案適合溯源的場(chǎng)景。Qiu等人[16]提出利用將成員公鑰之和作為群公鑰的方法,實(shí)現(xiàn)了群簽名的方案,但收集成員私鑰生成群私鑰的過(guò)程會(huì)造成安全風(fēng)險(xiǎn)。經(jīng)典的橢圓曲線數(shù)字簽名(ECDSA)在簽名和驗(yàn)證過(guò)程各使用了1次求逆運(yùn)算,復(fù)雜的求逆運(yùn)算制約效率的提升,使其不能在輕量級(jí)計(jì)算的場(chǎng)景中使用。因此,2008年,潘曉君[17]首次提出了一種基于ECDSA無(wú)模逆計(jì)算的簽名算法。2020年,肖帥等人[18]改進(jìn)的無(wú)模逆ECDSA雙方簽名方案,通過(guò)引入雙參數(shù)以及在簽名和驗(yàn)證階段回避求模逆運(yùn)算,能夠有效防止數(shù)字簽名偽造攻擊。
現(xiàn)有文獻(xiàn)中的大多數(shù)方案描述了區(qū)塊鏈在溯源體系中的理論框架和應(yīng)用,很少關(guān)注以下兩類問(wèn)題:(1)區(qū)塊鏈網(wǎng)絡(luò)中的節(jié)點(diǎn)之間的信息安全問(wèn)題;(2)二維碼信息公開(kāi)的特點(diǎn)導(dǎo)致無(wú)法存儲(chǔ)機(jī)密數(shù)據(jù)。
因此,為了克服上述的缺陷,本文基于區(qū)塊鏈的溯源體系,給出了一個(gè)保障節(jié)點(diǎn)信息安全的解決方案:結(jié)合二級(jí)二維碼與群簽名來(lái)創(chuàng)建一個(gè)安全有效的節(jié)點(diǎn)信息,實(shí)現(xiàn)信息防篡改和身份認(rèn)證的功能。這種溯源方案有效提高信息安全性的同時(shí)可提供隱私保護(hù)的功能。本文方案主要設(shè)計(jì)思路為:(1)本文改進(jìn)文獻(xiàn)[5,8]的二維碼方案,修改二級(jí)信息的嵌入驗(yàn)證機(jī)制,實(shí)現(xiàn)對(duì)信息的完整性驗(yàn)證和二級(jí)信息糾錯(cuò)功能。(2)通過(guò)使用群公鑰生成算法來(lái)改進(jìn)無(wú)模逆ECDSA雙方簽名方案[18],實(shí)現(xiàn)多方群簽名方案。將簽名嵌入二維碼生成分級(jí)信息安全的二級(jí)二維碼,管理層通過(guò)溯源成員上傳的身份簽名σ1來(lái)驗(yàn)證其是否為合法成員,只有合法成員可上傳溯源信息。用戶獲取二維碼的二級(jí)信息σ2利用群簽名算法驗(yàn)證二維碼的完整性。
群簽名是一類特殊的數(shù)字簽名,其概念[19]最早由Chaum和Heyst在1991年提出。Camenish、Stadler等人修改并完善了群簽名算法。一個(gè)完整的群簽名由多名擁有自己密鑰對(duì)的簽名者組成,每個(gè)群體擁有一個(gè)共同的群公鑰,群中的每個(gè)成員都可以使用自己的私鑰代表群對(duì)消息簽名,同時(shí),每個(gè)成員生成的簽名可由群公鑰驗(yàn)證。2003年,Bellare等人首次嚴(yán)格定義和形式化群簽名安全模型[20],標(biāo)準(zhǔn)群簽名方案包含如下5種算法。
(1)創(chuàng)建:產(chǎn)生群公鑰、群私鑰和追蹤密鑰的多項(xiàng)式算法;
(2)注冊(cè):用戶和群管理員之間的交互式協(xié)議,產(chǎn)生新成員的私鑰和身份證書(shū);
(3)簽名:輸入一個(gè)消息和一個(gè)群成員的私鑰后,輸出對(duì)消息的群簽名;
(4)驗(yàn)證:輸入消息,群公鑰和群簽名,輸出群簽名的驗(yàn)證結(jié)果;
(5)追蹤:輸入成員上傳的簽名,輸出驗(yàn)證其合法身份。
無(wú)模逆ECDSA簽名算法[18]是在ECDSA算法上的改進(jìn),通過(guò)避免模逆運(yùn)算有效地提高了簽名的效率,適用于輕量級(jí)設(shè)備的日常使用。
簽名過(guò)程如下:
(1)首先構(gòu)建橢圓曲線的域參數(shù)T=(a,b,G,n,h),發(fā)送方A選擇隨機(jī)整數(shù)d作為私鑰,利用基點(diǎn)G計(jì)算公鑰Q=d×G,生成密鑰對(duì)(Q,d);
(2)A選擇一個(gè)隨機(jī)整數(shù)k∈[1,n-1],計(jì)算點(diǎn)kG=(x1,y1);
(3)找出一組α,β∈[1,n-1],使α,β滿足要求k≡(αr+βdi)(modn);
(4)計(jì)算消息m的哈希值e=H(m);
(5)令r=x1(modn),如果r=0,返回步驟2;
(6)計(jì)算s=r(α+ed)(modn),如果s=0,返回步驟2;
(7)輸出簽名值(r,s,β)。
驗(yàn)證過(guò)程如下:
(1)接受方B在收到消息m和簽名值(r,s,β)后,進(jìn)行以下運(yùn)算;
(2)如果s,r,β?[1,n-1],則驗(yàn)證失??;
(3)計(jì)算簽名消息m的哈希值e=H(m);
(4)計(jì)算γ=(s+βm)(modn),u=er(modn);
(5)計(jì)算γG-uQ=(x2,y2),令v=x2(modn),如果r=0,驗(yàn)證失敗;
(6)如果v=r,驗(yàn)證成功,否則,驗(yàn)證失敗。
1994年,二維碼由Denso wave公司為日本汽車行業(yè)發(fā)明。二維碼由國(guó)際標(biāo)準(zhǔn)化組織(ISO)認(rèn)證并列舉了完整說(shuō)明,二維碼主要特點(diǎn)就是輸出尺寸小但讀取速度非常快。二維碼將信息編碼成二進(jìn)制形式,每個(gè)信息位表示為黑色或白色像素塊,輸入數(shù)據(jù)采用Reed-Solomon糾錯(cuò)碼校正。在二維碼生成過(guò)程中,必須選擇4個(gè)糾錯(cuò)級(jí)別中的一個(gè),最低級(jí)別可恢復(fù)7%的錯(cuò)誤信息,最高級(jí)別可恢復(fù)30%錯(cuò)誤信息。
如今,40個(gè)二維碼版本具有不同的存儲(chǔ)容量。二維碼具有特定的幾何校正結(jié)構(gòu)和高速解碼結(jié)構(gòu),采用3種位置標(biāo)簽進(jìn)行二維碼檢測(cè)和方位校正,使用一個(gè)或多個(gè)對(duì)齊模式進(jìn)行編碼變形調(diào)整。模塊坐標(biāo)由定時(shí)模式設(shè)置。此外,格式信息區(qū)域包含糾錯(cuò)級(jí)別和掩碼模式,代碼版本和糾錯(cuò)位存儲(chǔ)在版本信息區(qū)域。如圖2所示是版本5的二維碼組成結(jié)構(gòu)圖。
圖2 版本5的二維碼組成結(jié)構(gòu)Fig.2 QR code composition structure of version 5
標(biāo)準(zhǔn)二維碼的解碼主要基于兩個(gè)原則:基于像素密度的模塊識(shí)別和基于關(guān)鍵像素的模塊識(shí)別。基于關(guān)鍵像素的識(shí)別是根據(jù)每個(gè)模塊中間區(qū)域的顏色確定模塊識(shí)別結(jié)果。如圖3所示,如果模塊中間的區(qū)域是黑色像素,則識(shí)別為黑色模塊。目前,移動(dòng)終端使用的具有二維碼解碼功能的軟件(如支付寶、微信、淘寶等)支持這一識(shí)別原則。
圖3 基于關(guān)鍵像素點(diǎn)的模式識(shí)別Fig.3 Pattern recognition based on key pixels
本文利用這一識(shí)別原理,將每個(gè)模塊細(xì)分為3×3個(gè)子模塊,如圖4所示,將原模塊的像素信息綁定到中心子模塊,并利用剩下的8個(gè)子模塊隱藏秘密信息,中央模塊為公共消息模塊(public message module,PMM),其余用于存儲(chǔ)秘密消息模塊(secret message module,SMM)。
圖4 劃分為3×3個(gè)子模塊Fig.4 Divided into 3×3 sub modules
漢明碼(Hamming code)是由Richard Hamming在1950年發(fā)明的分組糾錯(cuò)碼?;驹韀21]是構(gòu)造檢驗(yàn)矩陣將校驗(yàn)位嵌入傳輸?shù)男畔⒋a中,通過(guò)奇偶校驗(yàn)位定位錯(cuò)誤位,有效糾正錯(cuò)誤數(shù)據(jù)位。
漢明碼的編碼利用信息位數(shù)k,構(gòu)造糾錯(cuò)的校驗(yàn)矩陣G,根據(jù)G求出傳輸?shù)男畔⒋a字C。漢明碼的編碼過(guò)程如下:
(1)對(duì)于(n,k)漢明碼,總碼長(zhǎng)為n=2m-1,信息位個(gè)數(shù)為k=2m-1-m,校驗(yàn)位個(gè)數(shù)為m=n-k;
(2)設(shè)k位傳輸?shù)男畔⒋a字為C=C1,C2,…,C2m-1,其中糾錯(cuò)校驗(yàn)位表示為剩下C-C′作為信息位;
(3)生成隨機(jī)二進(jìn)制校驗(yàn)矩陣Gm×2m-1;
(4)通過(guò)計(jì)算GCT=0得到嵌入m位校驗(yàn)位C2i(i=0,1,…,m-1)的傳輸信息碼C。
漢明碼的譯碼過(guò)程計(jì)算e判斷接收到的信息碼C?是否有錯(cuò),并根據(jù)e的權(quán)重檢測(cè)出錯(cuò)誤數(shù)據(jù)位并糾正。漢明的譯碼過(guò)程如下:
(1)假設(shè)接收到的信息碼為C?,利用糾錯(cuò)矩陣G計(jì)算e=C?T×G;
(2)若e=0,則表示接收到的C?=C,信息碼無(wú)損失或錯(cuò)誤,譯碼結(jié)束,若e≠0,則表示接收到的C?有錯(cuò)誤位,轉(zhuǎn)至步驟(3);
(3)檢測(cè)eT在校驗(yàn)矩陣G中對(duì)應(yīng)向量位置,將二進(jìn)制向量轉(zhuǎn)換為十進(jìn)制記作q,翻轉(zhuǎn)接收信息碼C?的第q位碼字,即得到正確信息碼C,糾錯(cuò)完畢。
本章描述節(jié)點(diǎn)溯源信息安全的解決方案,即利用二級(jí)二維碼來(lái)確保食品供應(yīng)鏈中的交易信息安全,同時(shí)利用二級(jí)二維碼嵌入改進(jìn)的ECDSA群簽名方案實(shí)現(xiàn)數(shù)據(jù)防篡改和身份認(rèn)證,在二維碼嵌入簽名時(shí),對(duì)生成的簽名進(jìn)行糾錯(cuò)編碼處理。該方案消除了對(duì)可信第三方的需求,并為供應(yīng)鏈的管理和節(jié)點(diǎn)信息安全提供了高完整性、可靠性和安全性的框架。
本文將二級(jí)二維碼與群簽名結(jié)合起來(lái),實(shí)現(xiàn)可驗(yàn)證信息真實(shí)性的產(chǎn)品溯源方案,保證上傳的溯源信息的真實(shí)性,有效防止假冒節(jié)點(diǎn),并允許供應(yīng)鏈實(shí)體之間進(jìn)行安全的信息交易,如圖5所示。本文提出的解決方案將節(jié)點(diǎn)簽名生成和驗(yàn)證的算法包裝成黑盒機(jī)制來(lái)保證各節(jié)點(diǎn)之間的交易安全。
圖5 基于二級(jí)二維碼的區(qū)塊鏈?zhǔn)称匪菰捶桨窮ig.5 Blockchain food traceability scheme based on two-level QR code
每個(gè)參與的實(shí)體都必須注冊(cè)成為群成員,并有唯一的以太網(wǎng)地址來(lái)唯一標(biāo)識(shí)參與者。每個(gè)成員都有自己專屬密鑰對(duì)用于數(shù)字簽名,并驗(yàn)證身份和二維碼的信息完整性。
參與者使用智能合約將產(chǎn)品相關(guān)信息上鏈,通過(guò)二級(jí)二維碼將現(xiàn)實(shí)中的貨物和區(qū)塊鏈連接起來(lái),實(shí)現(xiàn)食品溯源的物聯(lián)網(wǎng)。通過(guò)認(rèn)證二維碼中提取的群簽名,來(lái)驗(yàn)證二維碼的真實(shí)性,確保數(shù)據(jù)不被偽造。節(jié)點(diǎn)上傳身份簽名,驗(yàn)證合法后獲取信息上鏈權(quán)限,每個(gè)參與實(shí)體都有一個(gè)以太網(wǎng)地址,并通過(guò)調(diào)用智能合約中的函數(shù)來(lái)參與,將食品信息上傳到IPFS中。
本節(jié)闡述了該方案如何實(shí)現(xiàn)信息安全,防止假冒節(jié)點(diǎn)上傳虛假信息,實(shí)現(xiàn)二維碼防篡改的功能。過(guò)程包括:(1)簽名的生成和認(rèn)證;(2)二級(jí)二維碼生成與提取。
2.2.1 簽名生成與認(rèn)證
簽名的生成認(rèn)證階段主要是簽名的生成、成員合法身份的驗(yàn)證和簽名消息正確性的驗(yàn)證。本文利用群公鑰生成算法改進(jìn)無(wú)模逆ECDSA簽名算法,將原本雙方協(xié)議擴(kuò)展成多方簽名和認(rèn)證,實(shí)現(xiàn)本文需要的群簽名方案,群簽名的生成與認(rèn)證過(guò)程如下:
Setup。構(gòu)建T=(a,b,G,n,h)作為橢圓曲線的域參數(shù),參數(shù)a、b為橢圓曲線方程的參數(shù),參數(shù)G表示選取的第一個(gè)參考點(diǎn),n為G的階,參數(shù)h代表余因數(shù)控制選取點(diǎn)的密度,帶簽名消息m為商品的唯一標(biāo)識(shí)碼。
UserKeyGen。用戶Ui隨機(jī)取整數(shù)di(1<di≤n-1)作為私鑰,并計(jì)算用戶的公鑰Qi=di×G,最后輸出密鑰對(duì)(Qi,di)。
GroupKeyGen。群管理層OA接收每位群成員的公鑰Qi(i=1,2,…,m),由群管理層計(jì)算出群公鑰Q=Q1+Q2+…+Qm并分發(fā)給群成員,Q′為Q-Qi子群公鑰。
ID-SignGen。(Qi,di)為用戶Ui的密鑰對(duì),待簽名的消息m為商品的唯一標(biāo)識(shí)碼,用戶Ui簽名生成過(guò)程如下:
(1)Ui隨機(jī)選取隨機(jī)整數(shù)k,k∈[1,n-1];
(2)計(jì)算kG=(x1,y1)和r≡x1(modn),如果存在r=0,轉(zhuǎn)到步驟1;
(3)確定整數(shù)k之后,Ui可以找到1組整數(shù)α,β∈[1,n-1],并 且 使 得 整 數(shù)α,β可 以 滿 足 條 件k≡(αr+βdi)(modn);
(4)計(jì)算需要簽名的唯一標(biāo)識(shí)碼m的哈希值e=H(m);
(5)計(jì)算s≡r(α+edi)(modn),如果s=0,轉(zhuǎn)到步驟1;
(6)上傳至管理員OA驗(yàn)證簽名σ1=(s,β,r)。
ID-SignVerify。管理者OA擁有全部的公鑰Qi和群公鑰Q,接收驗(yàn)證U1的簽名σ1=(s,β,r),通過(guò)驗(yàn)證簽名正確,確定U1身份是否真實(shí),來(lái)確定節(jié)點(diǎn)是否為假冒的攻擊者,驗(yàn)證步驟如下:
(1)OA先驗(yàn)證s,α,r是否為區(qū)間[1,n-1]內(nèi)的整數(shù),若驗(yàn)證失敗,則拒絕簽名;
(2)通過(guò)將公開(kāi)的商品唯一標(biāo)識(shí)碼作為公開(kāi)消息m,計(jì)算m的哈希值e=H(m),計(jì)算u=er;
(3)計(jì)算sG+(β-u)Qi=(x3,y3);
(4)令v=x3(modn);
(5)若v=r,則可以確定上傳者為注冊(cè)的群成員,允許其上傳數(shù)據(jù)至區(qū)塊鏈,并生成二級(jí)二維碼嵌入σ2,否則認(rèn)證失敗,拒絕其向區(qū)塊鏈上傳數(shù)據(jù)。
GroupSignGen。(Qi,di)為用戶Ui的密鑰對(duì),待簽名的消息m為商品的唯一標(biāo)識(shí)碼,用戶Ui簽名生成過(guò)程如下:
(1)Ui隨機(jī)選取隨機(jī)整數(shù)k,k∈[1,n-1];
(2)計(jì)算kG=(x1,y1)和r≡x1(modn),如果存在r=0,轉(zhuǎn)到步驟(1);
(3)確定整數(shù)k之后,Ui可以找到1組整數(shù)α,β∈[1,n-1],并 且 使 得 整 數(shù)α,β可 以 滿 足 條 件k≡(αr+βdi)(modn);
(4)計(jì)算需要簽名的唯一標(biāo)識(shí)碼m的哈希值e=H(m);
(5)計(jì)算kG+(β-er)Q′=(x2,y2);(6)計(jì)算r′≡x2(modn),若r′=0,則轉(zhuǎn)到步驟(1);(7)輸出需要嵌入二維碼中的二級(jí)信息簽名σ2=(s,β,r′)。
GroupSignVerify。對(duì)于其他成員Pi來(lái)說(shuō),Pi只有自己的公鑰Qi和群公鑰Q,從二級(jí)二維碼中提取的群簽名σ2并驗(yàn)證,驗(yàn)證步驟如下:
(1)Pi驗(yàn)證s,β,r′是否為[1,n-1]內(nèi)的整數(shù),若驗(yàn)證失敗,則拒絕簽名σ2;
(2)計(jì)算商品標(biāo)識(shí)碼消息m的哈希值e=H(m),令u=er;
(3)計(jì)算(β-u)Q+sG=(x4,y4);
(4)令v=x4(modn);
(5)若v=r′,則接受簽名,證明二維碼沒(méi)有被篡改即區(qū)塊鏈中的信息數(shù)據(jù)真實(shí),否則說(shuō)明區(qū)塊鏈中的數(shù)據(jù)是偽造的。
2.2.2 二級(jí)二維碼生成提取
簽名σ2嵌入二級(jí)二維碼和提取秘密信息的過(guò)程可能會(huì)出現(xiàn)通信數(shù)據(jù)損失,因此本方案采用(7,4)漢明碼對(duì)簽名σ2轉(zhuǎn)換的二進(jìn)制數(shù)據(jù)流S進(jìn)行分組糾錯(cuò)編碼處理,生成可糾正多比特錯(cuò)誤數(shù)據(jù)的數(shù)據(jù)流S′。二級(jí)二維碼的生成主要包括兩個(gè)階段:(1)簽名隱藏算法,(2)簽名恢復(fù)算法。
在秘密隱藏階段,將簽名生成算法得到群簽名轉(zhuǎn)換成二進(jìn)制的數(shù)據(jù)流,并嵌入載體二維碼中得到最終的二級(jí)二維碼。在簽名恢復(fù)階段,根據(jù)融合機(jī)制從相應(yīng)的二級(jí)二維碼中提取消息的群簽名,并通過(guò)群公鑰驗(yàn)證消息的準(zhǔn)確性后,輸出關(guān)于簽名有效性的判斷。
本文采用群簽名來(lái)驗(yàn)證消息正確性,利用二維碼識(shí)別模式的冗余,將秘密信息嵌入二維碼。之后可以通過(guò)識(shí)別二級(jí)的編碼區(qū)域中的黑白像素點(diǎn)來(lái)恢復(fù)秘密消息。
(1)簽名隱藏算法步驟
本文將群簽名嵌入到載體二維碼中,將二維碼的一個(gè)像素模塊用3×3子模塊的中央模塊PMM替換,二維碼仍然保持其可讀性,其余8個(gè)子模塊SMM用于存儲(chǔ)秘密信息。在此基礎(chǔ)上,調(diào)用算法1將群簽名Group-SignGen算法生成的簽名σ2嵌入SMM模塊生成二級(jí)二維碼。
算法1
輸入:驗(yàn)證成功的群簽名σ2,載體二維碼C,大小為m×n。
輸出:帶有群簽名的二級(jí)二維碼T。
步驟1將群簽名信息σ2轉(zhuǎn)換成二進(jìn)制的數(shù)據(jù)流流并表示為S。將3位校驗(yàn)單元嵌入每4位數(shù)據(jù)位中,計(jì)算嵌入校驗(yàn)位后的數(shù)據(jù)流的長(zhǎng)度為l=length(S′)。
步驟2設(shè)p=1。S′(1,p)表示S′的第p塊數(shù)據(jù)。
步驟3設(shè)i=j=2,其中i表示二維碼的行,j表示二維碼的列。
步驟4令p=p+1。如果p>length(S),轉(zhuǎn)至步驟6,否則,轉(zhuǎn)至步驟5。
步驟5如果C1(i,j),C2(i,j),…,Cn(i,j)是功能圖形或S′(1,p)為?,則轉(zhuǎn)到步驟6。否則,轉(zhuǎn)至步驟7。
步驟6對(duì)于任意k(1≤k≤n),生成8位二進(jìn)制隨機(jī)數(shù)并利用矩陣式用生成的隨機(jī)數(shù)帶入:
步驟7對(duì)于任何任意k(1≤k≤n),從S′中有序選擇,并將十進(jìn)制數(shù)轉(zhuǎn)換為8位二進(jìn)制數(shù)。那么,讓:
步驟8令j=j+3。如果j>n,則轉(zhuǎn)至步驟9。否則,轉(zhuǎn)至步驟4。
步驟9令j=2,i=i+3。如果i>m,則轉(zhuǎn)至步驟10。否則,轉(zhuǎn)至步驟4。
步驟10成功輸出一個(gè)二級(jí)二維碼,算法結(jié)束。
(2)簽名恢復(fù)算法步驟
秘密提取和恢復(fù)過(guò)程是秘密隱藏的逆過(guò)程。在信息提取過(guò)程中,為了保證提取數(shù)據(jù)的完整性和準(zhǔn)確性,采用簽名長(zhǎng)度作為輸入?yún)?shù),具體算法見(jiàn)算法2。將簽名提出,通過(guò)調(diào)用GroupSignVerify算法驗(yàn)證簽名的正確性,來(lái)保證二維碼的完整性和真實(shí)性。
算法2
輸入:嵌入群簽名的二級(jí)二維碼T,簽名長(zhǎng)度l。
輸出:群簽名σ2,載體二維碼C。
步驟1設(shè)i=j=2,其中i表示二維碼的行參數(shù),j表示二維碼的列參數(shù)。
步驟2設(shè)flag=0,其中flag表示提取的秘密位的計(jì)數(shù)器。
步驟3如果T1(i,j),T2(i,j),…,Tn(i,j)在功能區(qū)域,則令參數(shù)j=j+3,如果j>n,則令參數(shù)i=i+3。如果定位點(diǎn)處于T1(i,j),T2(i,j),…,Tn(i,j)在編碼區(qū)域,則轉(zhuǎn)到步驟4。
步驟4按以下公式將黑白像素值提取出二進(jìn)制數(shù)據(jù)流:
步驟5將提取到的8 bit的二進(jìn)制數(shù)據(jù)流S′t添加到S′末位。
步驟6如果flag>l,則轉(zhuǎn)至步驟9。否則,轉(zhuǎn)至步驟7。
步驟7令j=j+3。如果j>n,則轉(zhuǎn)至步驟8。否則,轉(zhuǎn)至步驟3。
步驟8令j=2,i=i+3。如果i>m,則轉(zhuǎn)至步驟9。否則,轉(zhuǎn)至步驟3。
步驟9利用漢明校驗(yàn)位糾正數(shù)據(jù)流S′,再提取原數(shù)據(jù)流S。
步驟10將數(shù)據(jù)流S轉(zhuǎn)化為十進(jìn)制,輸出群簽名。秘密提取恢復(fù)算法結(jié)束。
(1)上傳簽名的驗(yàn)證
管理者收到簽名信息σ1=(s,β,r)和唯一標(biāo)識(shí)碼m的哈希值e,并且管理者擁有群公鑰和所有的公鑰Q1,Q2,…,Qn,正確性分析如下:
所以可得出:v=x3=x1=r(modn)。
(2)其他成員驗(yàn)證簽名
其他成員收到簽名信息σ2=(s,β,r′)和明文m的哈希值e,他們只擁有群公鑰和自己的公鑰Qi,正確性分析如下:
若(s,β,r′)是對(duì)群消息m的簽名信息,成員使用群公鑰進(jìn)行驗(yàn)證,則:
所以可得出:v=x4=x2=r′(modn)。
3.2.1 數(shù)據(jù)防篡改
簽名的生成過(guò)程需要明文信息m參與,從而保證信息的完整性。如果信息發(fā)生變化,那么相對(duì)的哈希值則會(huì)改變,而生成簽名消息的過(guò)程中,如果簽名信息的哈希值改變,群成員的簽名認(rèn)證無(wú)法通過(guò),保證簽名數(shù)據(jù)不會(huì)被篡改。
在節(jié)點(diǎn)交互時(shí),首先提取簽名消息,并驗(yàn)證簽名真?zhèn)蝸?lái)確定二維碼是否被篡改。同時(shí)只有群內(nèi)部成員擁有修改的權(quán)限,通過(guò)上傳身份簽名,驗(yàn)證成功后可以獲得上傳信息的權(quán)限,每次數(shù)據(jù)記錄到區(qū)塊鏈后不可更改,從而保證數(shù)據(jù)的真實(shí)性。
3.2.2 抗密鑰泄露
大多數(shù)情況下,可利用相同隨機(jī)數(shù)構(gòu)造二階線性方程組,解出用戶的私鑰,從而造成私鑰的泄露。所以本文對(duì)不同消息進(jìn)行簽名時(shí),使用不同的隨機(jī)數(shù)防止密鑰泄露。
本文的方案每次簽名的隨機(jī)數(shù)不同,通過(guò)si的表達(dá)式得出以下方程組(1)為:
未知量di,α1,α2,…,αn,由此得出n個(gè)方程組有n+1個(gè)未知數(shù),根據(jù)代數(shù)知識(shí),不能求出私鑰di。所以本文方案在保證隨機(jī)數(shù)不同時(shí),能夠防止密鑰泄露。
3.2.3 簽名防偽造
攻擊者進(jìn)行主動(dòng)攻擊,只能攻擊消息m的哈希值。由于攻擊者不知道密鑰對(duì)以及簽名者的私鑰di,因此攻擊者偽造出的簽名消息不能通過(guò)驗(yàn)證,嵌入二維碼的簽名不能被偽造,后續(xù)的節(jié)點(diǎn)就可以根據(jù)二級(jí)信息來(lái)驗(yàn)證二維碼的真實(shí)性,這樣,就彌補(bǔ)了二維碼可被偽造的安全缺陷。
3.2.4 身份可追蹤
由ID-SignVerify的過(guò)程可以得知,管理者OA擁有全部成員的公鑰,簽名驗(yàn)證過(guò)程需要上傳者保證上傳的身份簽名σ1真實(shí),管理者才能使用對(duì)應(yīng)的公鑰成功驗(yàn)證簽名者的身份。因此,上傳者想要上傳群簽名就需要管理者協(xié)助通過(guò)身份驗(yàn)證,管理者OA協(xié)助的同時(shí)也保存Ui相關(guān)的身份信息。當(dāng)出現(xiàn)爭(zhēng)議時(shí)管理者OA可以通過(guò)ID-SignVerify過(guò)程實(shí)現(xiàn)對(duì)上傳者的身份信息的追蹤。
為了評(píng)估本文提出方案的可行性,本文列舉了一系列實(shí)驗(yàn)結(jié)果,并與其他文獻(xiàn)的相關(guān)結(jié)果進(jìn)行比較。
根據(jù)所舉例子中需要隱藏的信息長(zhǎng)度,本文選擇糾錯(cuò)等級(jí)為H,版本為5的二維碼作為載體圖像。實(shí)驗(yàn)結(jié)果如表1所示,可以看到二級(jí)二維碼的像素點(diǎn)更密集,在不改變?cè)休d體二維碼存儲(chǔ)空間的條件下,將二維碼容量擴(kuò)大了8倍。由于長(zhǎng)度顯示限制,提取結(jié)果圖給出了部分實(shí)驗(yàn)結(jié)果截圖。
表1 二級(jí)二維碼的生成和提取Table 1 Generation and extraction of two-level QR code
本文基于二維碼的模塊識(shí)別特性采用3×3的矩陣作為模塊識(shí)別單元,秘密載荷量為載體二維碼容量的9倍。與其他文獻(xiàn)秘密載荷量比較結(jié)果如表2所示。
表2 秘密載荷量對(duì)比Table 2 Number of secret bits in proposed scheme and related works
文獻(xiàn)[8,10]利用二維碼的容錯(cuò)性,通過(guò)修改二維碼的部分像素實(shí)現(xiàn)秘密信息的嵌入,這使得秘密信息的最大載荷量局限于二維碼的糾錯(cuò)能力?;诙S碼的識(shí)讀模式,文獻(xiàn)[9]通過(guò)用紋理圖案替換二維碼中的黑色模塊來(lái)嵌入秘密信息;不同于文獻(xiàn)[8-10],本文用3×3的子模塊替換了全部模塊,所以信息嵌入量具有秘密載荷量較高的優(yōu)勢(shì)。
群簽名的生成由兩步構(gòu)成,先利用SHA256哈希算法預(yù)處理商品標(biāo)識(shí)碼消息m生成固定長(zhǎng)度消息e,之后通過(guò)GroupSignGen算法得到σ2=(s,β,r′),其中σ2最大長(zhǎng)度為768 bit,嵌入漢明校驗(yàn)位的最終簽名長(zhǎng)度為1 344 bit,低于載體二維碼的最大載荷量。因秘密載荷量可以隨二維碼版本提高而提高,所以可根據(jù)二級(jí)秘密信息的長(zhǎng)度選擇合適版本的載體二維碼。
當(dāng)二級(jí)二維碼通過(guò)公開(kāi)信道傳輸時(shí),外部干擾是不可避免的,如遮擋、旋轉(zhuǎn)或壓縮。為了驗(yàn)證一般圖像處理后的二級(jí)二維碼仍然具有可讀性,以及可以正確地提取二級(jí)信息,本文分析了二級(jí)二維碼抵抗幾何攻擊的性能,結(jié)果如表3所示。
表3 圖像處理操作測(cè)試結(jié)果Table 3 Image processing operation test results
本文的方案在幾何變換后仍可以有效地提取出各類信息。同時(shí),本文方案生成的二維碼還支持被各類手機(jī)軟件正確讀取,如淘寶、支付寶、微信等。表4列舉的二級(jí)二維碼被各類軟件掃描的結(jié)果表明,本文方案是可行的,生成的二級(jí)二維碼具有自適應(yīng)性。
表4 掃描結(jié)果對(duì)比Table 4 Comparison of scanning results
本節(jié)從二維碼的容錯(cuò)率以及二級(jí)信息的有效載荷量等方面與其他文獻(xiàn)進(jìn)行了比較。表5為本文與其他相關(guān)方案的比較結(jié)果??梢钥闯霰疚姆桨笡](méi)有占用載體二維碼的糾錯(cuò)區(qū)域,從而保證二級(jí)二維碼高魯棒性,使其可以抵御幾何攻擊,并具有較高秘密載荷量。
表5 二級(jí)二維碼方案比較Table 5 Two-level QR code scheme comparison
文獻(xiàn)[8,10,12]利用二維碼的糾錯(cuò)能力隱藏秘密信息,降低了二維碼應(yīng)對(duì)幾何攻擊的魯棒性。文獻(xiàn)[9,11]利用視覺(jué)方案隱藏和提取秘密信息,可以保證二維碼的魯棒性,但提取時(shí)需要額外的圖像處理增加了計(jì)算量。本文方案將二維碼像素?cái)U(kuò)展為3×3的子區(qū)域,不影響魯棒性的同時(shí)可通過(guò)算法2直接掃描提取秘密信息。文獻(xiàn)[10-11]的秘密提取方法是對(duì)多張二維碼異或疊加,需要多個(gè)份額的參與,這種方式具有不穩(wěn)定性。本文和其他方案只需一個(gè)二維碼即可完成信息隱藏和提取。
與其他方案相比,本文方案在二級(jí)信息有效載荷量方面存在顯著優(yōu)勢(shì),相比較表中其他方案將秘密信息存儲(chǔ)在二維碼的封面圖像的方法,本文將數(shù)據(jù)存儲(chǔ)量擴(kuò)大了8倍,有效提高了秘密載荷量。
本文方案利用二級(jí)二維碼實(shí)現(xiàn)節(jié)點(diǎn)間的信息驗(yàn)證,以二維碼版本5,糾錯(cuò)等級(jí)為H的二維碼為例,普通二維碼的掃描平均耗時(shí)為0.416 s,RFID掃描的平均耗時(shí)為0.15 s,本文二級(jí)二維碼方案掃描提取一級(jí)信息平均耗時(shí)為0.432 s,提取二級(jí)信息平均耗時(shí)為0.441 s,群簽名認(rèn)證的仿真實(shí)驗(yàn)平均耗時(shí)0.021 5 s,總體平均耗時(shí)為0.894 5 s,由此得出本文方案的掃碼耗時(shí)控制在1 s以內(nèi)。雖然該方案的耗時(shí)略高于RFID和普通二維碼,但溯源過(guò)程涉及生產(chǎn)、物流和銷售等環(huán)節(jié),因此時(shí)間跨度較大,所以二級(jí)二維碼對(duì)總體溯源過(guò)程造成的影響可忽略不計(jì)。
本文的群簽名方案相較于ECDSA算法,避免模逆運(yùn)算降低算法的復(fù)雜度,提高了簽名的效率。設(shè)n為模乘運(yùn)算的有限域,根據(jù)文獻(xiàn)[18]計(jì)算一次模乘的復(fù)雜度為O(n2lnn),乘運(yùn)算的復(fù)雜度為O(n2),模逆運(yùn)算復(fù)雜度為O(9n2)。將傳統(tǒng)的ECDSA方案計(jì)算復(fù)雜度與本文群簽名方案計(jì)算復(fù)雜度作比較,ECDSA的計(jì)算復(fù)雜度為N1=O(8n2lnn+21n2),本文的簽名驗(yàn)證算法的計(jì)算復(fù)雜度為N2=O(4n2lnn+3n2),成員簽名認(rèn)證算法計(jì)算復(fù)雜度為N3=O(4n2lnn+4n2),簽名總計(jì)算復(fù)雜度為N4=O(8n2lnn+7n2)。本文方案相比較ECDSA方案的計(jì)算復(fù)雜度較低,效率會(huì)更高。
因此,本文方案的掃碼耗時(shí)略高,但通過(guò)降低驗(yàn)證算法的時(shí)間復(fù)雜度,保證了整體溯源方案的效率。
本節(jié)從溯源方案的節(jié)點(diǎn)安全方面與其他文獻(xiàn)進(jìn)行了比較。表6為本文與其他相關(guān)溯源方案的比較結(jié)果。可以看出本文方案同時(shí)具備身份驗(yàn)證和訪問(wèn)控制的功能,有效保障節(jié)點(diǎn)間信息安全,并且使用二級(jí)二維碼有效降低溯源成本。
表6 溯源方案節(jié)點(diǎn)安全性比較Table 6 Comparison of node security of traceability scheme
文獻(xiàn)[4]利用RFID控制節(jié)點(diǎn)使用特定設(shè)備上傳信息。文獻(xiàn)[22]通過(guò)輔助數(shù)據(jù)庫(kù)建立身份信息索引,驗(yàn)證上傳節(jié)點(diǎn)身份,這種方法可能會(huì)吸引攻擊者對(duì)輔助數(shù)據(jù)庫(kù)進(jìn)行攻擊。文獻(xiàn)[23]使用雙鏈跟蹤上傳者身份信息,但是雙聯(lián)驗(yàn)證計(jì)算量較大。文獻(xiàn)[24]是利用傳統(tǒng)區(qū)塊鏈防止信息篡改,保障數(shù)據(jù)存儲(chǔ)階段的安全。
本文使用群簽名和二級(jí)二維碼同時(shí)實(shí)現(xiàn)身份驗(yàn)證與訪問(wèn)控制,不僅保證節(jié)點(diǎn)真實(shí)性,還可以保證信息上傳和存儲(chǔ)階段的完整性,并在節(jié)點(diǎn)間使用紙質(zhì)二維碼有效控制成本。
本文提出了一個(gè)保障節(jié)點(diǎn)信息安全的溯源方案,利用二級(jí)二維碼嵌入群簽名的方案來(lái)保證溯源信息的真實(shí)。與其他方案相比,本文通過(guò)上傳者的身份驗(yàn)證防止非法攻擊,并利用二級(jí)二維碼保證數(shù)據(jù)真實(shí)性,有效地解決節(jié)點(diǎn)交易過(guò)程中的信息安全問(wèn)題。由于本文給出的溯源方案具有通用性,因此各類供應(yīng)鏈都可以使用本文方案追蹤溯源信息,具有實(shí)際的應(yīng)用價(jià)值。在未來(lái)的工作中,計(jì)劃進(jìn)一步提高該方案的二級(jí)數(shù)據(jù)魯棒性,保證方案適用于更復(fù)雜的識(shí)別環(huán)境。