左黎明,陳祚松,湯鵬志,易傳佳
(1.華東交通大學(xué) 理學(xué)院,江西 南昌 330013;2.華東交通大學(xué) 系統(tǒng)工程與密碼學(xué)研究所,江西 南昌 330013)
隨著國(guó)民經(jīng)濟(jì)的高速發(fā)展和人民生活水平的不斷提高,人們對(duì)于商品的檔次有了更高的追求。但由于受到暴利的驅(qū)使,高檔商品的假冒偽劣行為屢禁不止。其中高檔酒類的仿冒行為極其嚴(yán)重。1998年的“山西朔州假酒案”,造成27人死亡,200多人住院治療[1]。2016年6月,湖南常德警方破獲涉案金額逾兩千萬(wàn)元的特大假酒案。2017年6月,南陽(yáng)市警方偵破的特大制售假酒案,涉案總價(jià)值2.8億元。這些假冒偽劣產(chǎn)品不僅嚴(yán)重影響著國(guó)家的經(jīng)濟(jì)發(fā)展,還危及著合法企業(yè)和消費(fèi)者的切身利益[2]。這也不斷地推動(dòng)著防偽技術(shù)的發(fā)展。
目前大多數(shù)防偽技術(shù)主要分為結(jié)構(gòu)防偽和防偽標(biāo)志認(rèn)證兩種形式。其中結(jié)構(gòu)防偽如1996年付正華[3]提出的防偽瓶蓋注射模的設(shè)計(jì),公開了一種結(jié)構(gòu)型的防偽技術(shù),但因?yàn)榻Y(jié)構(gòu)無(wú)法還原的特性使得瓶中酒沒有及時(shí)飲用而導(dǎo)致酒精揮發(fā)后影響酒的品質(zhì)。通過防偽標(biāo)志進(jìn)行認(rèn)證防偽的如1993年Tirkel等[4]提出的數(shù)字水印技術(shù)[5-7]。1994年,日本Denso-Wave公司發(fā)明了二維條碼技術(shù)[8-9]。2010年,法國(guó)Prooftag公司推出氣泡防偽技術(shù)[10]以及一些其他的印刷防偽技術(shù)[11-12]。但由于這些信息都是靜態(tài)的,每次防偽識(shí)別時(shí)都是相同的內(nèi)容,所以很難做到完全防止被惡意復(fù)制。而隨著高級(jí)印刷技術(shù)的普及,以及電子信息技術(shù)的進(jìn)步,這些靜態(tài)的防偽標(biāo)志的仿造變得非常容易。
針對(duì)這些問題,文中提出了一種基于SM2智能安全芯片的高檔酒防偽系統(tǒng),以智能安全芯片為核心,通過智能安全芯片與防偽認(rèn)證服務(wù)系統(tǒng)之間的雙向數(shù)字簽名認(rèn)證,并且每次認(rèn)證后都更新產(chǎn)品防偽信息保證防偽信息的新鮮性,以實(shí)現(xiàn)產(chǎn)品防偽的安全性、可靠性和易用性。
SM2橢圓曲線公鑰密碼算法(elliptic curve cryptography,ECC)是國(guó)內(nèi)于2010年12月公開的商用密碼算法標(biāo)準(zhǔn)[13-14]。ECC的求解是基于求解橢圓曲線離散對(duì)數(shù)問題(elliptic curve discrete logarithm problem,ECDLP),而將橢圓曲線應(yīng)用于公鑰密碼系統(tǒng)的思想是由Koblitz[15]和Miller[16]各自獨(dú)立提出的。ECDLP與大數(shù)分解和有限域上離散對(duì)數(shù)問題相比求解難度大得多。
因此,ECC在密鑰規(guī)模小得多的情況下能夠達(dá)到其他公鑰密碼算法相同的安全程度。正是由于ECC的密鑰規(guī)模小、安全程度高的優(yōu)勢(shì),使其在國(guó)內(nèi)商用密碼行業(yè)得到了大規(guī)模的應(yīng)用和推廣。
1.2.1 系統(tǒng)參數(shù)
元素?cái)?shù)目為q的有限域Fq;橢圓曲線E(Fq),屬于方程E(Fq)的兩個(gè)元素a和b(a,b∈Fq);E(Fq)上的無(wú)窮遠(yuǎn)點(diǎn)或零點(diǎn)O;E(Fq)上階為n的基點(diǎn)G=(xG,yG)(G!= 且xG,yG∈Fq)。
1.2.2 用戶公/私鑰的建立
用戶A隨機(jī)選取整數(shù)dA(1≤sA≤n-1),并計(jì)算pA=dAG=(xA,yA)。其中dA作為用戶私鑰,pA作為用戶公鑰對(duì)外公開。
1.2.3 簽名生成
對(duì)于消息M的簽名生成過程如下:
(1)使用雜湊函數(shù)對(duì)待簽名消息M進(jìn)行處理得到e;
(2)選擇隨機(jī)數(shù)k∈[1,n-1],然后計(jì)算橢圓曲線點(diǎn)(x1,y1)=kG;
(3)計(jì)算r=(e+x1)modn,若r=0或r+k=n則返回第二步;
(4)計(jì)算s=((1+dA)-1(k-r.dA))modn,若s=0則返回第二步;
(5)將(r,s)作為消息M的數(shù)字簽名輸出。
1.2.4 簽名驗(yàn)證
對(duì)于簽名信息(r,s)進(jìn)行以下驗(yàn)證:
(1)驗(yàn)證r∈[1,n-1]和s∈[1,n-1]是否成立,若不成立則驗(yàn)證不過;
(2)使用雜湊函數(shù)對(duì)待簽名消息M進(jìn)行處理得到e';
(3)計(jì)算t=(r+s)modn,若t=0,則驗(yàn)證不通過;
如圖1所示,整個(gè)防偽系統(tǒng)由三部分組成:內(nèi)嵌SM2智能安全芯片的瓶蓋體、配套驗(yàn)證器、防偽認(rèn)證服務(wù)系統(tǒng)。首先使用配套驗(yàn)證器讀取瓶蓋體上內(nèi)嵌的SM2智能安全芯片中的產(chǎn)品身份標(biāo)識(shí)碼的簽名信息及其他基本信息;然后通過配套驗(yàn)證器間接發(fā)送到防偽認(rèn)證服務(wù)系統(tǒng)進(jìn)行簽名驗(yàn)證,簽名驗(yàn)證通過后,防偽認(rèn)證服務(wù)系統(tǒng)產(chǎn)生新的產(chǎn)品身份標(biāo)識(shí)碼和該產(chǎn)品身份標(biāo)識(shí)碼的簽名信息,并通過配套驗(yàn)證器間接發(fā)送到瓶蓋上的SM2智能安全芯片上進(jìn)行簽名驗(yàn)證。通過雙向簽名信息的驗(yàn)證過程來(lái)達(dá)到產(chǎn)品防偽的效果。每一次防偽驗(yàn)證后,SM2智能安全芯片和防偽認(rèn)證服務(wù)系統(tǒng)都會(huì)更新防偽認(rèn)證信息以保證防偽信息的新鮮性。
圖1 防偽系統(tǒng)架構(gòu)
防偽瓶蓋的結(jié)構(gòu)如圖2所示。SM2智能安全芯片內(nèi)嵌在瓶蓋頂部中心,用于射頻感應(yīng)供電的線圈兩端連接芯片的同時(shí)以芯片為中心向外繞圈,并且與瓶蓋的下端連通。在瓶蓋開啟時(shí)瓶蓋體與下端分離,線圈也隨之?dāng)嚅_,智能芯片受損從而無(wú)法進(jìn)行防偽認(rèn)證。這種設(shè)計(jì)的目的是防止不法分子回收瓶蓋進(jìn)行產(chǎn)品仿冒行為,但在輕微結(jié)構(gòu)損壞的情況下仍然保證了瓶蓋原有的密封產(chǎn)品的功能。
圖2 防偽瓶蓋結(jié)構(gòu)
該方案中的SM2智能安全芯片采用深圳華視微電子有限公司設(shè)計(jì)的型號(hào)為CVF1040D的安全芯片。其擁有唯一的ID,可重復(fù)擦寫10萬(wàn)次,最大可達(dá)8 MB程序存儲(chǔ)器映射和8 MB數(shù)據(jù)存儲(chǔ)器映射,并且含了SM2協(xié)處理器,支持ISO/IEC 7816和ISO/IEC 14443接口。
配套驗(yàn)證器主要分為兩類:一類是由顯示屏模塊、用于網(wǎng)絡(luò)連接的無(wú)線模塊和GPRS模塊組成的配套讀卡器;另一類是含有NFC功能并安裝了配套APP的移動(dòng)終端[17-18]。
防偽認(rèn)證服務(wù)系統(tǒng)由數(shù)據(jù)中心、簽名服務(wù)模塊和產(chǎn)品管理模塊組成,并通過防火墻保證對(duì)外數(shù)據(jù)交互的安全。數(shù)據(jù)中心存儲(chǔ)了產(chǎn)品防偽認(rèn)證所需的關(guān)鍵信息(如表1所示)和其他產(chǎn)品信息,為產(chǎn)品防偽認(rèn)證和產(chǎn)品管理提供了數(shù)據(jù)支持。
簽名服務(wù)模塊包括了SM2系列算法的插件,提供了密鑰對(duì)生成、簽名信息生成、簽名信息驗(yàn)證等功能,并為其他應(yīng)用提供了遠(yuǎn)程接口調(diào)用服務(wù)。
產(chǎn)品管理模塊對(duì)外提供產(chǎn)品信息查詢服務(wù),對(duì)內(nèi)提供產(chǎn)品信息新增、修改、刪除、出入庫(kù)管理以及各類報(bào)表統(tǒng)計(jì)服務(wù)。
防偽認(rèn)證流程主要分為兩個(gè)階段:SM2智能安全芯片的防偽信息初始化階段;產(chǎn)品流通和消費(fèi)者購(gòu)買時(shí)的產(chǎn)品防偽認(rèn)證階段。
在防偽認(rèn)證協(xié)議中C(Client)為待防偽認(rèn)證產(chǎn)品,S(Server)為防偽認(rèn)證服務(wù)器,V(Validator)為配套驗(yàn)證器,該協(xié)議的具體過程如下:
(1)V→C:{APDUCommand};
(2)C→V:{SM2_Sign(SystemPKey||CardID),CardID,SystemID,SM2_Sign(CardID)};
(3)V→S:{SM2_Sign(SystemPKey||CardID),CardID,SystemID,SM2_Sign(CardCode)};
(4)S→V:{SM2_Sign(NewCardCode),NewCardCode};
(5)V→C:{APDUCommand,SM2_Sign(NewCardCode),NewCardCode};
(6)C→V:{Result};
當(dāng)一個(gè)產(chǎn)品生產(chǎn)完成時(shí),生產(chǎn)廠商在防偽認(rèn)證服務(wù)系統(tǒng)中為該產(chǎn)品生成相應(yīng)的產(chǎn)品防偽認(rèn)證關(guān)鍵信息及其他基本信息,其中產(chǎn)品唯一ID、產(chǎn)品公鑰、產(chǎn)品私鑰、產(chǎn)品身份標(biāo)識(shí)碼存儲(chǔ)到數(shù)據(jù)中心,而系統(tǒng)唯一ID、產(chǎn)品唯一ID、產(chǎn)品公鑰、產(chǎn)品簽名信息、系統(tǒng)簽名信息則通過配套工具寫入到智能安全芯片中。
如圖3所示,在產(chǎn)品流通或者消費(fèi)者購(gòu)買后需要驗(yàn)證產(chǎn)品的真?zhèn)螘r(shí)可以通過以下步驟進(jìn)行防偽認(rèn)證:
步驟1:使用配套驗(yàn)證器靠近瓶蓋體向SM2智能安全芯片發(fā)送APDU指令,SM2智能安全芯片響應(yīng)指令,將基本信息返回給配套驗(yàn)證器,然后配套驗(yàn)證器將該基本信息發(fā)送到防偽認(rèn)證服務(wù)系統(tǒng)的簽名服務(wù)模塊。
步驟2:簽名服務(wù)模塊接收到產(chǎn)品基本信息后,根據(jù)系統(tǒng)唯一ID從數(shù)據(jù)中心獲得系統(tǒng)公鑰,并使用系統(tǒng)公鑰、產(chǎn)品唯一ID、系統(tǒng)公鑰驗(yàn)證系統(tǒng)簽名信息,驗(yàn)證通過則進(jìn)行下一步驗(yàn)證,否則返回驗(yàn)證失敗并結(jié)束防偽認(rèn)證;根據(jù)產(chǎn)品唯一ID從數(shù)據(jù)中心查找產(chǎn)品身份標(biāo)識(shí)碼、產(chǎn)品公鑰和產(chǎn)品私鑰,使用產(chǎn)品公鑰、產(chǎn)品身份標(biāo)識(shí)碼驗(yàn)證產(chǎn)品簽名信息,驗(yàn)證通過則簽名服務(wù)模塊產(chǎn)生一個(gè)新的產(chǎn)品身份標(biāo)識(shí)碼并使用產(chǎn)品私鑰對(duì)新的產(chǎn)品身份標(biāo)識(shí)碼簽名后得到新的產(chǎn)品簽名信息,將新的產(chǎn)品身份標(biāo)識(shí)碼和新的產(chǎn)品簽名信息返回,同時(shí)將新的產(chǎn)品身份標(biāo)識(shí)碼更新到數(shù)據(jù)中心,驗(yàn)證失敗則直接返回驗(yàn)證失敗并結(jié)束防偽認(rèn)證。
步驟3:配套驗(yàn)證器接收到防偽認(rèn)證服務(wù)系統(tǒng)的簽名服務(wù)模塊返回認(rèn)證信息后,如果驗(yàn)證失敗則結(jié)果直接顯示給用戶并結(jié)束認(rèn)證,如果接收到的是新的產(chǎn)品身份標(biāo)識(shí)碼和新的產(chǎn)品簽名信息則結(jié)合相應(yīng)的APDU指令發(fā)送給SM2智能安全芯片。
步驟4:SM2智能安全芯片接收到新的產(chǎn)品身份標(biāo)識(shí)碼和新的產(chǎn)品簽名信息后使用產(chǎn)品公鑰、新的產(chǎn)品身份標(biāo)識(shí)碼、新的產(chǎn)品簽名信息進(jìn)行簽名驗(yàn)證,并將驗(yàn)證結(jié)果返回到配套驗(yàn)證器中同時(shí)將新的產(chǎn)品簽名信息更新到SM2智能安全芯片中。
步驟5:配套驗(yàn)證器根據(jù)SM2智能安全芯片返回的驗(yàn)證結(jié)果顯示防偽認(rèn)證結(jié)果。
根據(jù)系統(tǒng)設(shè)計(jì),需要對(duì)產(chǎn)品內(nèi)嵌的智能安全芯片進(jìn)行初始化,這個(gè)過程中將產(chǎn)品基本信息寫入到智能安全芯片中,其部分核心代碼如下:
public staticSmartSecurityChip CardInit()
{
SmartSecurityChip ssc=new SmartSecurityChip();//生成芯片對(duì)象
ssc.SystemID=SystemID;//將系統(tǒng)唯一ID初始化
ssc.CardID=GetCardID();//讀取產(chǎn)品唯一ID
ssc.CardCode=GenerateCardCode();//生成產(chǎn)品身份標(biāo)識(shí)碼
SM2.TanGenSM2KeyPair(out ssc.CardPublicKey, out CardPrivateKey);//生成公鑰/私鑰
SM2.TanSM2Sign(ssc.CardCode, out ssc.CardSign);//生成產(chǎn)品身簽名信息
SM2.TanSM2Sign(ssc.CardID+ssc.CardPublicKey,SystemSKey,out ssc.InfoSign);//生成系統(tǒng)簽名信息
WirteToCard(ssc);//基本信息寫入智能安全芯片中
returnssc;
}
圖4所示為智能安全芯片初始化過程生成的基本信息,同時(shí)將基本信息寫入到智能安全芯片中。
圖4 智能安全芯片初始化產(chǎn)生的基本信息
在產(chǎn)品防偽認(rèn)證時(shí),服務(wù)器接收到產(chǎn)品基本信息后分別對(duì)InfoSign和CardSign進(jìn)行驗(yàn)證,然后生成NewCardCode、NewCardSign,其部分核心代碼如下:
//服務(wù)端根據(jù)System、CardID、CardPublicKey驗(yàn)證InfoSign
SCServiceSystem.VerifyInfoSign(ssc.CardID+ssc.CardPublicKey,ssc.InfoSign,SCServiceSystem.SystemPKey);
//服務(wù)端根據(jù)CardPublicKey、CardCode驗(yàn)證CardSign
SCServiceSystem.VerifyCardSign (ssc.CardCode,ssc.CardSign, ssc.CardPublicKey);
stringNewCardCode=string.Empty;
stringNewCardSign=string.Empty;
//服務(wù)端生成NewCardCode和NewCardSign;
SCServiceSystem.GenNewCardCodeAndSign(out NewCardCode, out NewCardSign);
圖5所示為產(chǎn)品認(rèn)證模擬中服務(wù)端根據(jù)產(chǎn)品發(fā)送的認(rèn)證信息進(jìn)行InfoSign和CardSign驗(yàn)證的具體過程和內(nèi)容,以及生成的NewCardCode和NewCardSign。
圖5 防偽認(rèn)證階段各認(rèn)證步驟結(jié)果
防偽認(rèn)證服務(wù)器端對(duì)產(chǎn)品基本信息認(rèn)證通過后,通過配套驗(yàn)證器間接發(fā)送NewCardCode和NewCardSign至產(chǎn)品內(nèi)嵌的智能安全芯片中,智能安全芯片根據(jù)CardPublicKey和NewCardCode驗(yàn)證NewCardSign,其部分核心代碼如下:
//根據(jù)newCardCode、CardPublicKey驗(yàn)證newCardSign
publicbool Verify(string newCardCode,string newCardSign)
{
bool result=SM2.TanSM2Verify (newCardCode,this.CardPublicKey,newCardSign);
ShowDetails(newCardCode,newCardSign,result);
return result;
}
圖6所示為智能安全芯片根據(jù)CardPublicKey和NewCardCode驗(yàn)證NewCardSign的具體過程及結(jié)果。
圖6 智能安全芯片簽名認(rèn)證信息及結(jié)果
經(jīng)過20組防偽認(rèn)證仿真后,得到智能安全芯片的初始化平均耗時(shí)為0.239 518 8 s,防偽認(rèn)證服務(wù)系統(tǒng)的認(rèn)證平均耗時(shí)為0.339 992 9 s,智能安全芯片的簽名認(rèn)證平均耗時(shí)為0.142 21 s。智能安全芯片的0.239 518 8 s的產(chǎn)品初始化時(shí)間相較于整個(gè)產(chǎn)品生產(chǎn)流程而言是非??焖俚?,而模擬的整個(gè)產(chǎn)品防偽認(rèn)證過程時(shí)間合計(jì)為0.482 202 9 s,對(duì)于消費(fèi)者和經(jīng)銷商而言產(chǎn)品的防偽認(rèn)證過程可以實(shí)現(xiàn)“所見即所得”的效果。
基于SM2智能安全芯片的高檔酒防偽系統(tǒng)是一個(gè)由防偽瓶蓋、配套驗(yàn)證器、防偽認(rèn)證服務(wù)系統(tǒng)組成的防偽解決方案。采用SM2智能安全芯片內(nèi)嵌瓶蓋頂部,線圈連通開蓋結(jié)構(gòu)的設(shè)計(jì),在瓶蓋開啟時(shí)的結(jié)構(gòu)輕微損壞,既保證了瓶蓋原有的封口功能又使智能安全芯片因結(jié)構(gòu)損壞而失去防偽功能,從而杜絕了不法商家回收瓶蓋來(lái)制造偽冒產(chǎn)品的行為。以SM2系列算法為防偽認(rèn)證核心并通過防偽產(chǎn)品與防偽認(rèn)證服務(wù)系統(tǒng)之間的雙向身份認(rèn)證保證了防偽認(rèn)證的安全性和可靠性。并且每次防偽驗(yàn)證后SM2智能安全芯片和防偽認(rèn)證服務(wù)系統(tǒng)都會(huì)更新防偽認(rèn)證信息,充分保證了認(rèn)證信息的新鮮性。通過仿真模擬證明了防偽認(rèn)證在高安全性的前提下保證了防偽驗(yàn)證的高效性。