陈纪成,包子健,罗敏,何德彪
(武汉大学国家网络安全学院空天信息安全与可信计算教育部重点实验室,湖北 武汉 430072)
随着物联网和5G 技术的不断发展,工业物联网(IIoT)成为工业领域的重要发展方向,可以有效提升工业生产的自动化和智能化水平[1]。工业物联网继承了物联网“万物互联”的思想,在环境监测[2]、智慧交通[3]、智能家居[4]等领域都得到了广泛应用,逐渐成为工业4.0 的核心应用之一[5]。广阔的应用前景和巨大的利润潜力,使其受到国内外学术界的广泛关注[6-8]。IIoT 利用局部网络或互联网等通信技术,将传感器、控制器和工作人员等连接在一起,实现信息化、远程管理控制和智能化的网络。通过与云计算、数据挖掘等技术相结合,工业物联网可以更好地对工业数据进行分析,辅助生产过程中的决策[9-10];通过与数字签名、区块链等技术相结合,工业物联网也可以实现更安全的远程设备认证与管理[11-12]。在工业物联网环境中,各种智能设备(传感器、控制器等)通常被部署在智慧工厂中作为数据收集终端或执行终端,以获取或接收工业数据[13]。专家或专业技术人员可以通过向具有指令执行功能的智能设备发送一系列操作指令,实现对设备的远程控制。
然而,近年来针对工业基础设施的网络攻击不断增多,工业物联网的安全问题也越来越引起人们的重视[14-15]。在工业物联网远程设备控制场景中,指令数据对生产过程具有很大的影响。如果一个恶意攻击者向设备发送了恶意操作指令,可能会对工业生产造成严重破坏。因此,对远程操作人员及其指令数据进行安全认证,保证指令来自合法的操作人员,是工业物联网安全运行的必要条件。基于身份的数字签名可以保证用户发出的指令签名是可验证且不可伪造的,同时避免了基于公钥基础设施(PKI)的数字签名方案中复杂的证书管理问题。为了保护操作人员的身份隐私,群签名技术可以在数字签名的基础上隐藏签名者的身份,并可以由群管理者公开某签名的签名者身份,从而兼顾指令签名的匿名性和可监管性,方便身份溯源和追责。同时,涉及关键操作的指令需要经过不少于一人的确认同意,且即使是合法用户也可能存在部分指令错误或者不合规的情况,因此,在指令签名之前需要对指令进行审核,设计两方协同签名则可以满足此安全需求,此处两方协同指的是签名密钥被分割为两部分,签名的过程由保管这两部分密钥的两个人共同完成。
当前,基于国密标准的两方协同群签名相关研究还较少,SM9 算法作为基于身份标识的公钥密码,于2016 年成为国家标准[16]。为了实现国产密码基础设施自主可控,本文以国密SM9 密码算法为基础,设计一种面向IIoT 的远程安全指令控制系统。提出一种基于国密SM9 标识密码算法的两方协同群签名算法,结合区块链实现面向工业物联网的远程安全指令控制系统方案。该方案基于国密标准,远程用户以群ID 来生成对指令的合法签名,且指令的签名过程由发起者和群管理员协同完成,以实现指令签名前的审核,避免关键指令误用。通过引入区块链技术,实现IIoT 平台的去中心化管理,通过智能合约对历史操作记录进行审计与追责。在验证签名阶段通过批量验证减少计算量,以满足大量指令的验证需求。最后进行安全性和性能分析,并与类似方案进行对比。
当前已经有学者针对数字签名、区块链等技术在保障物联网安全方面进行了大量研究。文献[17]提出一种智能家居安全互认证系统,该系统通过集成区块链、群签名等技术,实现了对用户访问历史的可靠审计、匿名验证组成员和高效验证家庭网关等功能。但是,该系统存在签名权力集中、群签名非国密化等问题。文献[18]提出基于许可区块链的匿名可追溯聚合签名(PBATAS)方案,该方案使用智能合约验证匿名来源并在实体之间共享加密材料,为IIoT 提供了可靠的监管支持。文献[19]提出基于证书的短签名方案,并将其应用于工业物联网中,该方案的签名验证阶段可以通过对多条签名聚合实现批量验证,从而节省验证时间。此外,基于证书的签名避免了基于身份标识签名的密钥托管问题和无证书密码体制的公钥替换攻击。针对VANETs 中车辆之间的安全认证问题,文献[20]重构了一个安全高效的短群签名方案,以实现域内的可控匿名认证。通过整合区块链,该文提出了一个区块链辅助的隐私保护跨域认证协议BCGS,在BCGS 中,区块链被用来实现可信信息共享,从而支持车辆之间的跨域认证。
自2016 年SM9 标识密码算法正式成为国家密码行业标准以来,对SM9 标识密码算法及其应用的相关研究工作一直备受重视。文献[21]提出一种基于身份认证的多KGC 群签名方案。在此基础上,结合联盟链的特点,该文设计一种基于SM9 算法的可证明安全区块链隐私保护方案。文献[22]提出基于SM9 商用密码的标识签密方案,相较于先采用SM9数字签名算法对数据进行签名再利用SM9 加密算法加密签名后的数据的方案,该方案在计算开销和密文长度方面有明显减少。文献[23]提出一种基于SM9 算法的两方协同盲签名方案,该方案将签名密钥分割成两部分,分配给2 个签名者,两方合作生成合法的盲签名。文献[24]提出一种基于SM9 门限签名的电力终端安全认证方案,该方案结合无证书标识密码和门限密码,将SM9 私钥进行分割和存储,并采用电力终端与服务端交互计算后合成签名的方法,解决了密钥在电力终端安全便捷存储和使用的问题。为提高智能家居系统中用户签名私钥的安全性,文献[25]基于SM9 数字签名算法提出一种安全高效的两方协同SM9 签名方案,该方案通过协同密钥生成算法生成用户签名私钥,避免了单一KGC 功能过于集中的问题,降低了签名主私钥丢失的风险。
群签名是一种数字签名的变体,旨在允许群体中的任何成员代表整个群体对消息进行匿名签名。自群签名于1991 年被提出以来[26],已经受到广泛的研究和关注。
相比于普通数字签名,群签名具有更好的隐私保护特性。当签名者需要保持匿名时,群签名可以有效地保护其身份,而在发生纠纷时,群管理员可以打开群签名以揭露签名者的真实身份,这种机制保证了系统的可追溯性和安全性。基于身份的群签名方案将身份标识验证与群签名相结合,进一步保护用户的隐私。这种方案在签名时使用用户的身份标识作为签名参数之一,以保证签名是由一个合法用户完成的,同时签名仍然是匿名的。群签名通常包含以下算法[27]:
1)创建:多项式时间概率算法,初始化系统参数并输出群公私钥。
2)群成员加入:输入群成员提供的身份标识信息,群管理员根据此信息生成用户的私钥。
3)签名:多项式时间概率算法,输入一个消息和一个群成员的私钥,输出对该消息的签名。
4)验证:任何人输入原消息、该消息的签名以及群公钥后,输出0 或1 以验证签名是否有效。
5)打开:输入一个签名和群私钥,输出该签名者的身份信息。
区块链是一种分布式数据库技术,可以记录数据和交易,将数据存储在多个节点上并同步更新。区块链的核心特点是去中心化、可信性和不可篡改性。智能合约是一种在区块链上运行的自动化合约。智能合约是以编程的形式记录在区块链上的,可以自动执行程序代码,并且具有安全性、不可篡改性和可编程性的特点。智能合约可以与外部系统进行交互,可以用于自动化支付、数字身份验证、票据追踪等领域。
SM9 标识密码算法是一种基于身份标识的密码体制,2016 年被确定为商用密码国家标准,包括数字签名、密钥交换和公钥加密3 个部分。该算法采用256 bit 的BN 曲线来实现双线性对运算,并基于q-BDHI 困难问题。SM9 数字签名算法包括数字签名生成算法和验证算法。签名者使用由密钥生成中心根据自己的身份标识生成的私钥和待签名的消息生成数字签名,验证者使用签名者的标识以及系统公钥生成验证公钥以验证签名的有效性。本文方案中的SM9 数字签名算法包含如下算法:
3)签名验证算法:验证者收到消息M和签名值(h,S)后,依次计算P=[H1(IDi)]P2+Ppub-s,u=e(S,P),w=u∙gh,并验证等式h=H2(M||w)是否成立。若成立,则签名验证通过;否则,验证失败。
关于SM9 密码算法的其他信息以及应用情况见文献[28-29]。
本文提出的IIoT 远程安全指令控制系统模型如图1 所示,共包含4 个模块,分别为注册中心、用户群、智能网关以及部署物联网设备的智慧工厂,其中,用户群包括群管理员和其他群成员。各部分具体如下:
图1 面向IIoT 的远程安全指令控制系统模型Fig.1 System model of security remote command control for IIoT
1)注册中心:负责群管理员和智能网关注册。
2)用户群:包含群管理员和远程用户,群管理员负责群成员加入、群成员的密钥生成、指令的审核以及群签名的协同生成,远程用户负责发起指令并与群管理员协同对指令数据进行签名。
3)智能网关:作为区块链节点,负责验证签名合法性、维护区块链、部署智能合约以及与智慧工厂的数据转发。
4)智慧工厂:包含智能设备,负责指令执行。
本文设计一种基于SM9 标识密码算法的两方协同群签名算法,并结合区块链提出了面向工业物联网的远程安全指令控制系统方案,方案主要包含5 个阶段,即系统初始化及群建立阶段、群成员加入阶段、签名阶段、验证签名阶段和指令执行阶段,简要的工作流程如图2 所示。当有需要时,还可以执行打开阶段和撤销阶段来获取某个签名者身份或撤销某个群成员。
图2 本文方案工作流程Fig.2 The work flow of the scheme in this paper
在用户端,根据实际的成员组织管理情况确定不同的群并指定该群的管理者。输入安全参数λ,输出 SM9 标识密码算法的安全公共参数{G1,G2,GT,P1,P2,e,N,hid,H1,H2},其 中,N是大素 数且N>2λ,G1、G2为N阶循环子群,P1、P2分别是其生成元,存在P1=φ(P2),双线性对e的值域为N阶乘法循环群GT。hid 为KGC 选择并公开地用一个字节标识的签名私钥生成函数识别符。2 个密码杂凑函数分别为H1:{0,1}*→,H2:{0,1}n×GT×N→,KGC另外选择一个密码杂凑函数H2:{0,1}n×GT→。在一个群中,密钥生成中心KGC 同时也是群管理者GM,生成群公私钥对,具体为:KGC 选择随机数ks∊[1,N-1]作为主私钥(或群私钥),计算G2中的元素Ppub-s作为群公钥,g=e(P1,Ppub-s),因此,群公私钥为(ks,Ppub-s)。群管理者GM 的身份标识为IDGM(其中含有随机数,为方便描述,随机数不在表达式中标出,下同),计算t=H1(IDGM||hid,N)+ks,若t≠0,则秘密保存(ks,t),公开(IDGM,Ppub-s);否则,重新选择IDGM中的随机数。
在IIoT 端,智能网关初始化区块链并作为全节点加入区块链网络,部署相应的智能合约。
根据系统需要,身份为IDA的成员A 可以申请加入群管理者为IDGM的群。输入身份IDA,GM 计算t1=H1(IDA||hid,N)+ks。若t1=0,则成员A 更换IDA中的随机数并重新执行本阶段;否则,GM 计算t2=ks∙,t3=ks∙t-1,选择随机数a,b∊[1,N-1],计算成员A 的部分签名私钥,其中=bP1。同时,GM 计算签名私钥的另一部分其中,GM 秘密保存GM 通过安全信道将DA发送给成员A,并将A 的身份加入群成员名单L={IDi|i=1,2,…,n},至此,成员A 成功加入群。
3.3.1 用户A 发起签名
如果用户A 准备操作设备B 完成指令I,首先构造指令消息M={B,I,IDGM,timestamp},其中,timestamp 是当前的时间戳。接下来,用户A 执行以下步骤:
步骤1计算群GT中的元素g=e(P1,Ppub-s)。
步骤2选取随机数r∊[1,N-1],依次计算P3=[r]P2、P4=[r](H1(IDA||hid,N)P2+Ppub-s)=[r∙t1]P2。
步骤3用户A 向群管理员发起签名请求,包含消息{M,P3,P4}。
3.3.2 群管理员确认签名
群管理员接收到用户A 的签名请求后,首先检查指令M是否符合规定要求,若不符合则拒绝该请求,若符合,则群管理员GM 执行以下步骤:
步骤1按照群 成员名 单L,计 算ti=H1(IDi||hid,N)+ks,i=1,2,…,n,并验证等式P4=tiP3是否成立,若成立,则确定该成员身份IDi;否则,令i=i+1,重新执行此步骤。若验证完所有用户的身份标识后都不成立,则说明用户不在群中,拒绝此申请。
步骤2查询,选取随机数r1,r2∊[ 1,N-1],依次计算将{ω1,ω2,ω3}发送回用户A。
3.3.3 用户生成部分签名
用户A 收到{ω1,ω2,ω3}后,选择随机数r3,r4∊[ 1,N-1],依次计算h=H2(M||ωA,N),hA=r4-h(modN)。将hA发送至GM。
3.3.4 GM 生成部分签名
GM 生成部分签名的步骤如下:
步骤1群管理员收到hA后,依次计算s1=将发送回用户A。
步骤2GM 计算对于hA的打开参数=,秘密保存(P3,)。
3.3.5 用户合成签名
用户A 收到群管理员返回的消息后,计算S1=,输 出签名σM={h,P3,P4,S1,S2},将{M,σM}发送至智能网关。
步骤1依次计算g=e(P1,Ppub-s),t=gh',h1=H1(IDGM||hid,N),P=[h1]P2+Ppub-s。
步骤2计算,若等式u1=u2成立,则进行下一步;否则,签名验证不通过。
步骤3依次计算H2(M||ω,N),若等式h=h'成立,则可以确定该签名来自合法的群成员;否则,该签名验证失败。
验证过程需要进行双线性对运算,计算量较大,当签名数量较多时,繁重的计算可能会使系统崩溃。因此,当验证k条签名时,本文通过批量验证减少计算量。具体如下:
步骤1提前预计算g=e(P1,Ppub-s),h1=H1(IDGM||hid,N),P=[h1]P2+Ppub-s。
步骤2计算若等式U1=U2成立,则进行下一步;否则,签名中有非法签名。
步骤3对于i=1,2,…,k,分别依次计算ti=ghi,若等式hi成立,则可以确定该签名来自合法的群成员;否则,该签名无效。
在验证签名成功后,智能网关将指令发送至对应的智能设备B,设备B 执行结束后,将执行结果返回给网关,网关将通过智能合约上传至区块链,ret 为执行结果。
如果需要确认某个消息M中的某个操作指令I的执行者身份(即该指令的签名者身份),则该执行者所在群的群管理员GM 进行此阶段的计算,具体描述如下:
步骤1GM 调用区块链中的智能合约接口获取需要执行打开操作的消息及对应的签名{Mi,σMi}。
步骤2GM 根据P3检索得到,计算用以查询,根据查询得到IDA。
当用户A 需要被撤销时,GM 在群成员名单L={IDi|i=1,2,…,n}中删除IDA以及即可。
因此,若签名σM是合法的,则h2=h成立。同理可证明批量验证时的正确性,在此不再赘述。
根据基于身份的签名(IBS)的安全模型,方案需满足签名的不可伪造性、匿名性、可追踪性等安全特性并能够抵御各种攻击。本节通过对所提方案中群签名的不可伪造性、匿名性以及可追溯性进行分析,证明方案满足安全性需求。KGC 负责生成用户的私钥,在知道用户身份信息的前提下可以伪造任意群内的用户签名,因此,本文假设KGC 是绝对安全可信的。
不可伪造性要求敌手无法创建正确的证明,证明某个群成员生成了某个有效签名,除非这个用户确实生成了这个签名。由于密码杂凑函数H1、H2都具有单向性且椭圆曲线上的离散对数问题是困难的,敌手通过获取随机数a、b的概率是可忽略的。假设敌手猜测用户A的部分私钥为则可以得到S1=的概率为1/N,是可忽略的。因此,在随机谕言机模型下,如果q-SDH 问题是困难的,那么本文设计的群签名具有不可伪造性。
匿名性要求除群管理者外的任何人都很难从群签名中恢复原始签名者的身份。在签名验证过程中,输入的参数全部为公开参数,不包括用户身份IDA。通过计算ti=H1(IDi||hid,N)+ks,i=1,2,…,n并验证等式P4=tiP3可以确定成员身份。敌手在不知道KGC 的主私钥ks的情况下,根据P3、P4以及S1、S2计算出用户身份的概率是可忽略的。另外,由于随机数{r,r1,r2,r3,r4}在每次签名中都是变化的,因此同一个人对同一个消息的前后2 次签名σM也是不相关的,签名具有不可链接性。
可追溯性要求敌手无法生成群管理者不能打开的签名,或者敌手能够打开但无法产生正确证明的签名。由于GM 对于每一个签名都秘密保存其中包含签名者的身份信息,因此只要有合法签名生成,管理员一定可以打开。计算得到时,如 果CDH 问题是困难的,那么敌手在无法得到ks或r的情况下计算H3(ks∙P3)=H3(r∙Ppub-s)是困难的。
在签名过程中,由于群成员需要和GM 进行交互,因此容易受到恶意攻击。一些常见攻击对本文方案的影响分析如下:
1)重放攻击:由于指令数据M包含时间戳,GM可以在验证M的同时验证消息的时效性。
2)中间人攻击:假如用户A 发起签名请求后被敌手B 截获,敌手B 将指令M更换为M',并继续发送给GM,B 将{ω1,ω2,ω3}转发给A,A 会继续根据M生成哈希值hA,即使B 自己生成关于M'的h'A,由于不知道A 的部分私钥,B 也无法成功伪造{S1,S2}。
3)去同步化攻击:在签名过程中,由于不存在存储表的更新,因此无法实施去同步化攻击。
分析比较本文方案与文献[17,19,25]中的方案,这些方案的签名都具有不可伪造性,因此在匿名性、可追溯性和是否支持协同签名3 个方面进行比较,结果如表1 所示。从表1 可以看出,本文方案满足全部安全特性。
表1 方案安全特性比较Table 1 Comparison of security features of schemes
本节首先分析所提方案的通信消耗,并与文献[25]方案进行比较。文献[25]方案也是采用两方协同签名来实现的,因此比较协同签名生成和签名发送过程中的通信消耗(不考虑存储消耗),结果如表2 所示,其中,|G1|、|G2|和|GT|分别表示群G1、G2和GT中元素的大小,|M|为消息长度。
表2 方案通信消耗比较Table 2 Comparison of communication cost of schemes
结合表1 和表2 可知,为了实现匿名性和可追溯性,本文方案相比文献[25]方案增加了部分通信消耗。对于发起签名的用户来说,在签名生成阶段,本文方案相比文献[25]方案增加了2|G2| +|M|长度的消耗,在签名发送阶段增加了|G1| +2|G2|长度的消耗。
接下来分析本文方案的计算消耗,并与文献[17,19,25]中的方案进行比较。由于运算代价主要集中在双线性对运算TB、群GT中指数运算TE、Map to point 哈希运算TH和群G1、G2中元素 的标量乘运算TM,因此只考虑这4 种运算在方案中的使用次数,其他如哈希运算、模逆运算等计算量较小的操作此处不作考虑。另外,群成员私钥生成后短时间内不会再执行此阶段操作,签名的打开和成员的撤销也不会频繁进行,因此只对比签名和验签的计算消耗。计算消耗对比结果如表3 所示。
表3 方案计算消耗比较Table 3 Comparison of calculate cost of schemes
结合表1 和表3 可知:文献[19]方案计算量最小,但是不提供匿名性、可追溯性,不支持协同签名;文献[17]方案计算量次之,但是不支持协同签名;文献[25]方案比本文方案计算量略低,但是不提供匿名性、可追溯性。本文方案在验签阶段可以对多条签名进行批量验证以减少计算量,当有n条签名时,正常验签时间消耗为3nTB+nTE,批量验证时间消耗为(n+2)TB+nTE,因此,签名数量越多(即n越大),批量验证节省的时间也越多。经计算可得,在签名数量超过20 条时,本文方案通过批量验证节省的时间超过50%。
本文方案在签名和验签阶段用户的计算量比其他方案略高,但是提供了更好的安全特性,在计算消耗较大的验签阶段可以通过对多条签名进行批量验证以减少计算时间消耗,相对多付出的计算代价对于用户和计算能力较强的智能网关来说处于可接受的范围内,因此,本文方案在工业物联网环境中具备实用性。
针对工业物联网中的远程指令控制场景,为兼顾该场景中指令合法性认证、签名者身份匿名性和可监管性,本文设计一种基于SM9 数字签名算法的两方协同群签名算法,结合区块链技术实现工业物联网中的远程安全指令控制方案。该方案基于SM9国密标准,允许远程用户以群ID 来生成对指令的合法签名,在保证指令发起者匿名性的同时,允许群管理员打开签名以公开签名者身份,同时需要群管理员审核签名并共同完成签名以防止关键指令出现错误和不合规的情况。安全性和性能分析结果表明,相较对比方案,本文方案能更好地满足应用场景中的安全性需求,虽然增加了一定的计算和通信消耗,但是对于用户和计算能力较强的智能网关而言处于可接受范围内,且签名验证过程可以通过批量验证来有效减少计算量,使得方案可以较好地兼顾安全性和实用性。由于本文方案没有考虑指令的隐私保护,无论是在协同签名还是在签名发送的过程中,指令数据都以明文传送,且方案只是完成了两方协同签名,难以满足需要2 人以上共同签名的场景需求。因此,下一步会将该方案改进为(t,n)门限群签密,在用户群中通过使用广播加密来秘密传输某个要执行的指令,以达到保护指令数据隐私安全以及多方协同签名的目的。