基于SM2智能安全芯片的高档酒防伪系统设计
2019-02-25左黎明陈祚松汤鹏志易传佳
左黎明,陈祚松,汤鹏志,易传佳
(1.华东交通大学 理学院,江西 南昌 330013;2.华东交通大学 系统工程与密码学研究所,江西 南昌 330013)
0 引 言
随着国民经济的高速发展和人民生活水平的不断提高,人们对于商品的档次有了更高的追求。但由于受到暴利的驱使,高档商品的假冒伪劣行为屡禁不止。其中高档酒类的仿冒行为极其严重。1998年的“山西朔州假酒案”,造成27人死亡,200多人住院治疗[1]。2016年6月,湖南常德警方破获涉案金额逾两千万元的特大假酒案。2017年6月,南阳市警方侦破的特大制售假酒案,涉案总价值2.8亿元。这些假冒伪劣产品不仅严重影响着国家的经济发展,还危及着合法企业和消费者的切身利益[2]。这也不断地推动着防伪技术的发展。
目前大多数防伪技术主要分为结构防伪和防伪标志认证两种形式。其中结构防伪如1996年付正华[3]提出的防伪瓶盖注射模的设计,公开了一种结构型的防伪技术,但因为结构无法还原的特性使得瓶中酒没有及时饮用而导致酒精挥发后影响酒的品质。通过防伪标志进行认证防伪的如1993年Tirkel等[4]提出的数字水印技术[5-7]。1994年,日本Denso-Wave公司发明了二维条码技术[8-9]。2010年,法国Prooftag公司推出气泡防伪技术[10]以及一些其他的印刷防伪技术[11-12]。但由于这些信息都是静态的,每次防伪识别时都是相同的内容,所以很难做到完全防止被恶意复制。而随着高级印刷技术的普及,以及电子信息技术的进步,这些静态的防伪标志的仿造变得非常容易。
针对这些问题,文中提出了一种基于SM2智能安全芯片的高档酒防伪系统,以智能安全芯片为核心,通过智能安全芯片与防伪认证服务系统之间的双向数字签名认证,并且每次认证后都更新产品防伪信息保证防伪信息的新鲜性,以实现产品防伪的安全性、可靠性和易用性。
1 SM2公钥密码算法
1.1 SM2算法简介
SM2椭圆曲线公钥密码算法(elliptic curve cryptography,ECC)是国内于2010年12月公开的商用密码算法标准[13-14]。ECC的求解是基于求解椭圆曲线离散对数问题(elliptic curve discrete logarithm problem,ECDLP),而将椭圆曲线应用于公钥密码系统的思想是由Koblitz[15]和Miller[16]各自独立提出的。ECDLP与大数分解和有限域上离散对数问题相比求解难度大得多。
因此,ECC在密钥规模小得多的情况下能够达到其他公钥密码算法相同的安全程度。正是由于ECC的密钥规模小、安全程度高的优势,使其在国内商用密码行业得到了大规模的应用和推广。
1.2 SM2签名算法
1.2.1 系统参数
元素数目为q的有限域Fq;椭圆曲线E(Fq),属于方程E(Fq)的两个元素a和b(a,b∈Fq);E(Fq)上的无穷远点或零点O;E(Fq)上阶为n的基点G=(xG,yG)(G!= 且xG,yG∈Fq)。
1.2.2 用户公/私钥的建立
用户A随机选取整数dA(1≤sA≤n-1),并计算pA=dAG=(xA,yA)。其中dA作为用户私钥,pA作为用户公钥对外公开。
1.2.3 签名生成
对于消息M的签名生成过程如下:
(1)使用杂凑函数对待签名消息M进行处理得到e;
(2)选择随机数k∈[1,n-1],然后计算椭圆曲线点(x1,y1)=kG;
(3)计算r=(e+x1)modn,若r=0或r+k=n则返回第二步;
(4)计算s=((1+dA)-1(k-r.dA))modn,若s=0则返回第二步;
(5)将(r,s)作为消息M的数字签名输出。
1.2.4 签名验证
对于签名信息(r,s)进行以下验证:
(1)验证r∈[1,n-1]和s∈[1,n-1]是否成立,若不成立则验证不过;
(2)使用杂凑函数对待签名消息M进行处理得到e';
(3)计算t=(r+s)modn,若t=0,则验证不通过;
2 系统架构设计
如图1所示,整个防伪系统由三部分组成:内嵌SM2智能安全芯片的瓶盖体、配套验证器、防伪认证服务系统。首先使用配套验证器读取瓶盖体上内嵌的SM2智能安全芯片中的产品身份标识码的签名信息及其他基本信息;然后通过配套验证器间接发送到防伪认证服务系统进行签名验证,签名验证通过后,防伪认证服务系统产生新的产品身份标识码和该产品身份标识码的签名信息,并通过配套验证器间接发送到瓶盖上的SM2智能安全芯片上进行签名验证。通过双向签名信息的验证过程来达到产品防伪的效果。每一次防伪验证后,SM2智能安全芯片和防伪认证服务系统都会更新防伪认证信息以保证防伪信息的新鲜性。
图1 防伪系统架构
2.1 瓶盖结构设计
防伪瓶盖的结构如图2所示。SM2智能安全芯片内嵌在瓶盖顶部中心,用于射频感应供电的线圈两端连接芯片的同时以芯片为中心向外绕圈,并且与瓶盖的下端连通。在瓶盖开启时瓶盖体与下端分离,线圈也随之断开,智能芯片受损从而无法进行防伪认证。这种设计的目的是防止不法分子回收瓶盖进行产品仿冒行为,但在轻微结构损坏的情况下仍然保证了瓶盖原有的密封产品的功能。
图2 防伪瓶盖结构
该方案中的SM2智能安全芯片采用深圳华视微电子有限公司设计的型号为CVF1040D的安全芯片。其拥有唯一的ID,可重复擦写10万次,最大可达8 MB程序存储器映射和8 MB数据存储器映射,并且含了SM2协处理器,支持ISO/IEC 7816和ISO/IEC 14443接口。
2.2 配套验证器
配套验证器主要分为两类:一类是由显示屏模块、用于网络连接的无线模块和GPRS模块组成的配套读卡器;另一类是含有NFC功能并安装了配套APP的移动终端[17-18]。
2.3 防伪认证服务系统
防伪认证服务系统由数据中心、签名服务模块和产品管理模块组成,并通过防火墙保证对外数据交互的安全。数据中心存储了产品防伪认证所需的关键信息(如表1所示)和其他产品信息,为产品防伪认证和产品管理提供了数据支持。
签名服务模块包括了SM2系列算法的插件,提供了密钥对生成、签名信息生成、签名信息验证等功能,并为其他应用提供了远程接口调用服务。
产品管理模块对外提供产品信息查询服务,对内提供产品信息新增、修改、删除、出入库管理以及各类报表统计服务。
3 防伪认证流程
防伪认证流程主要分为两个阶段:SM2智能安全芯片的防伪信息初始化阶段;产品流通和消费者购买时的产品防伪认证阶段。
3.1 防伪认证协议
在防伪认证协议中C(Client)为待防伪认证产品,S(Server)为防伪认证服务器,V(Validator)为配套验证器,该协议的具体过程如下:
(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};
3.2 SM2智能安全芯片初始化阶段
当一个产品生产完成时,生产厂商在防伪认证服务系统中为该产品生成相应的产品防伪认证关键信息及其他基本信息,其中产品唯一ID、产品公钥、产品私钥、产品身份标识码存储到数据中心,而系统唯一ID、产品唯一ID、产品公钥、产品签名信息、系统签名信息则通过配套工具写入到智能安全芯片中。
3.3 产品防伪认证阶段
如图3所示,在产品流通或者消费者购买后需要验证产品的真伪时可以通过以下步骤进行防伪认证:
步骤1:使用配套验证器靠近瓶盖体向SM2智能安全芯片发送APDU指令,SM2智能安全芯片响应指令,将基本信息返回给配套验证器,然后配套验证器将该基本信息发送到防伪认证服务系统的签名服务模块。
步骤2:签名服务模块接收到产品基本信息后,根据系统唯一ID从数据中心获得系统公钥,并使用系统公钥、产品唯一ID、系统公钥验证系统签名信息,验证通过则进行下一步验证,否则返回验证失败并结束防伪认证;根据产品唯一ID从数据中心查找产品身份标识码、产品公钥和产品私钥,使用产品公钥、产品身份标识码验证产品签名信息,验证通过则签名服务模块产生一个新的产品身份标识码并使用产品私钥对新的产品身份标识码签名后得到新的产品签名信息,将新的产品身份标识码和新的产品签名信息返回,同时将新的产品身份标识码更新到数据中心,验证失败则直接返回验证失败并结束防伪认证。
步骤3:配套验证器接收到防伪认证服务系统的签名服务模块返回认证信息后,如果验证失败则结果直接显示给用户并结束认证,如果接收到的是新的产品身份标识码和新的产品签名信息则结合相应的APDU指令发送给SM2智能安全芯片。
步骤4:SM2智能安全芯片接收到新的产品身份标识码和新的产品签名信息后使用产品公钥、新的产品身份标识码、新的产品签名信息进行签名验证,并将验证结果返回到配套验证器中同时将新的产品签名信息更新到SM2智能安全芯片中。
步骤5:配套验证器根据SM2智能安全芯片返回的验证结果显示防伪认证结果。
4 实验仿真与效率分析
4.1 智能安全芯片初始化
根据系统设计,需要对产品内嵌的智能安全芯片进行初始化,这个过程中将产品基本信息写入到智能安全芯片中,其部分核心代码如下:
public staticSmartSecurityChip CardInit()
{
SmartSecurityChip ssc=new SmartSecurityChip();//生成芯片对象
ssc.SystemID=SystemID;//将系统唯一ID初始化
ssc.CardID=GetCardID();//读取产品唯一ID
ssc.CardCode=GenerateCardCode();//生成产品身份标识码
SM2.TanGenSM2KeyPair(out ssc.CardPublicKey, out CardPrivateKey);//生成公钥/私钥
SM2.TanSM2Sign(ssc.CardCode, out ssc.CardSign);//生成产品身签名信息
SM2.TanSM2Sign(ssc.CardID+ssc.CardPublicKey,SystemSKey,out ssc.InfoSign);//生成系统签名信息
WirteToCard(ssc);//基本信息写入智能安全芯片中
returnssc;
}
图4所示为智能安全芯片初始化过程生成的基本信息,同时将基本信息写入到智能安全芯片中。
图4 智能安全芯片初始化产生的基本信息
4.2 产品防伪认证模拟
在产品防伪认证时,服务器接收到产品基本信息后分别对InfoSign和CardSign进行验证,然后生成NewCardCode、NewCardSign,其部分核心代码如下:
//服务端根据System、CardID、CardPublicKey验证InfoSign
SCServiceSystem.VerifyInfoSign(ssc.CardID+ssc.CardPublicKey,ssc.InfoSign,SCServiceSystem.SystemPKey);
//服务端根据CardPublicKey、CardCode验证CardSign
SCServiceSystem.VerifyCardSign (ssc.CardCode,ssc.CardSign, ssc.CardPublicKey);
stringNewCardCode=string.Empty;
stringNewCardSign=string.Empty;
//服务端生成NewCardCode和NewCardSign;
SCServiceSystem.GenNewCardCodeAndSign(out NewCardCode, out NewCardSign);
图5所示为产品认证模拟中服务端根据产品发送的认证信息进行InfoSign和CardSign验证的具体过程和内容,以及生成的NewCardCode和NewCardSign。
图5 防伪认证阶段各认证步骤结果
防伪认证服务器端对产品基本信息认证通过后,通过配套验证器间接发送NewCardCode和NewCardSign至产品内嵌的智能安全芯片中,智能安全芯片根据CardPublicKey和NewCardCode验证NewCardSign,其部分核心代码如下:
//根据newCardCode、CardPublicKey验证newCardSign
publicbool Verify(string newCardCode,string newCardSign)
{
bool result=SM2.TanSM2Verify (newCardCode,this.CardPublicKey,newCardSign);
ShowDetails(newCardCode,newCardSign,result);
return result;
}
图6所示为智能安全芯片根据CardPublicKey和NewCardCode验证NewCardSign的具体过程及结果。
图6 智能安全芯片签名认证信息及结果
4.3 效率分析
经过20组防伪认证仿真后,得到智能安全芯片的初始化平均耗时为0.239 518 8 s,防伪认证服务系统的认证平均耗时为0.339 992 9 s,智能安全芯片的签名认证平均耗时为0.142 21 s。智能安全芯片的0.239 518 8 s的产品初始化时间相较于整个产品生产流程而言是非常快速的,而模拟的整个产品防伪认证过程时间合计为0.482 202 9 s,对于消费者和经销商而言产品的防伪认证过程可以实现“所见即所得”的效果。
5 结束语
基于SM2智能安全芯片的高档酒防伪系统是一个由防伪瓶盖、配套验证器、防伪认证服务系统组成的防伪解决方案。采用SM2智能安全芯片内嵌瓶盖顶部,线圈连通开盖结构的设计,在瓶盖开启时的结构轻微损坏,既保证了瓶盖原有的封口功能又使智能安全芯片因结构损坏而失去防伪功能,从而杜绝了不法商家回收瓶盖来制造伪冒产品的行为。以SM2系列算法为防伪认证核心并通过防伪产品与防伪认证服务系统之间的双向身份认证保证了防伪认证的安全性和可靠性。并且每次防伪验证后SM2智能安全芯片和防伪认证服务系统都会更新防伪认证信息,充分保证了认证信息的新鲜性。通过仿真模拟证明了防伪认证在高安全性的前提下保证了防伪验证的高效性。