杨冠群,刘荫,徐浩,邢宏伟,张建辉,李恩堂
(1. 国网山东省电力公司信息通信公司,山东 济南 250001;2. 山东鲁软数字科技有限公司,山东 济南 250001)
随着微电网行业的不断变革,新能源的布局占据着国家重要的战略地位[1]。2020年4月,国家能源局综合司发布的 《关于做好可再生能源发展“十四五”规划编制工作有关事项的通知》,通知指出:“优先开发当地分散式和分布式可再生能源资源,大力推进分布式可再生电力、热力、燃气等在用户侧直接就近利用,结合储能、氢能等新技术,提升可再生能源在区域能源供应中的比重。”可再生能源分布式是未来的发展方向,而在这样的分布式系统中发展充电站乃至充放电站无疑是大势所趋,甚至有可能成为标配[2]。
随着我国新能源的广泛应用,风电、太阳能等占比大幅提升。例如,大力发展光储充一体化的微电网技术,将清洁能源供电通过光伏发电后存储电能,光伏、储能和充电设施形成了一个微网,根据需求与公共电网智能互动,可实现并网、离网两种不同运行模式[3]。为了缓解充电桩大电流充电时对区域电网的冲击,储能系统的传输配送过程通常伴随分布式发电、分布式售电、智能电表、终端智能充电桩等服务需求。
微电网在迅速扩展的同时,也带来了愈加严重的安全挑战[4]。以风电、光伏为主的新型供电系统呈现分布式架构,集中式的用户管理系统已经无法满足分布式各主体之间进行点对点可信交互的需求。此外,能源物联网的终端节点分布广、范围宽、数量大、环境复杂且计算资源有限,极易受到冒用、篡改等攻击[5-6]。
为适应新型的电力发展要求,2019年,国网公司提出“开展区块链等新技术应用研究,有效支撑和促进‘两网’融合发展”,推动了区块链技术在电力行业的进一步研究和深化应用[7]。区块链开放、共享、协同的技术形态与国网公司建设中国特色国际领先的微网战略目标高度契合,可以有效解决泛在微网建设过程中面临的数据融通、设备安全、个人隐私、架构僵化和多主体协同等问题,在引领泛在微网建设方面具有不可替代的重要作用[8-9]。
区块链技术以其去中心化、安全透明、不易篡改等特性与分布式能源交易的需求具有极高的契合度[10]。为了解决微网中终端节点的身份管理、可信接入和业务访问控制等问题,本文基于FISCO BCOS联盟区块链技术,设计了一个多中心的分布式身份认证系统,支持细粒度的声明描述和基于零知识证明的隐私凭证,实现了实体身份的自主控制、属性级的细粒度访问控制、用户身份的隐私保护和可信数据交换。具体而言,本文贡献如下。
1) 用户身份的自主控制:与传统身份管理不同,身份不必再掌握在身份提供者手中,用户的身份由自己建立和保存,用户自己管理自己的信息,用户完全拥有、控制和管理自己的身份。
2) 分布式可信接入:提出了基于联盟区块链的分布式身份管理技术,支持扁平化的分布式认证,不依赖于单一企业的认证,通过分布式的用户社会关系获得全面的身份认证,真正意义上实现了用户身份自治,通过KYC(know your customer)技术实现身份监管,解决了微网终端节点的分布式可信接入问题。
3) 用户信息身份隐私保护:提出了适用于微网的基于用户细粒度属性的可验证凭证,基于零知识证明技术,系统支持生成匿名凭证,针对用户的敏感信息,可以在不披露秘密信息的情况下完成验证,有效实现了用户身份的隐私保护。
4) 多中心化机构的移植:基于区块链技术,支持多个证书颁发机构并对应不同的信任等级,是一个分布式多中心的身份管理平台,支持多平台、跨链、跨应用间身份标识和凭证的移植。
随着互联网的普及和发展,网络数字身份应运而生,并用于补齐互联网缺失的身份层,解决可信交互的问题。第一代网络身份为应用账户,由中心式的身份提供方分配本地账户并简单地提供用户名和账户密码。
由于不同应用间的本地账户无法联通,人们需要维护大量的应用账户,基于联盟的账户身份产生。SSO单点登录系统[11]是比较流行的联盟身份解决方案,可以解决在多个应用系统中的访问联盟所有应用系统和跨系统的信任问题。传统的微电网的认证系统一般也通过SSO单点登录系统来解决。Celesti等[12]在异构环境中建立联盟的体系结构,提出了一种基于IdP/SP模型和SAML技术的身份认证解决方案。魏晓菁等[13]为国家电网公司建设了全网统一索引的身份管理和认证系统,为国网各大业务体系提供了身份认证、账户管理、SSO单点登录等基础设施服务,节省了各子应用系统之间各自数据保持的存储开销和降低了安全风险,避免了数据孤岛的困境,基本解决了全网互联互通的问题。然而,中心化系统中的用户的身份信息完全由服务商所掌控,可能存在信息超量收集、恶意收集分析、数据泄露和数据买卖等不可控行为。
为了实现用户身份自治,研究人员开始探索基于区块链的数字身份管理方案[14-15]。公钥基础设施(PKI)[16]是较为常用的身份和证书管理技术。Yu等[17]设计并开发了基于区块链的PKI管理框架,用于发布、验证和撤销X.509证书,以解决单点故障和实现对CA中心缺陷的快速反应。uPort[18]是基于以太坊和分布式网络设计的开放式身份系统,基于智能合约实现了支持多中心身份数据的自治,支持多中心化应用。Kikitamara等[19]将身份管理权限归于个人并在区块链系统上共享,从而支持多个系统和应用程序之间交互和服务。
基于区块链的身份认证系统大多基于公共区块链平台,没有针对微电网的联盟场景进行有效改造和整合,难以满足微电网中可信接入、细粒度访问控制等需求,因此不适合电网场景。虽然区块链在电网的应用较多,但大多是集中于区块链平台在电网交易场景中的应用,而缺乏从身份管理的角度来解决分布式身份可信的问题。因此,本文基于FISCO BCOS联盟区块链技术,提出了一个支持多中心的分布式身份认证系统,实现用户身份的自主控制和可信接入,并通过属性声明技术实现属性级的细粒度访问控制。
可信身份认证作为身份治理底层基础设施,用以解决跨部门、跨组织、跨机构的可信身份认证问题,确保用户的身份信息由自己掌握,保护隐私与个人信息,同时为监管保留查验通道(如KYC认证或与eID联通)。其系统目标如下。
(1)自主控制
DID可以由用户自己建立,自己管理自己的信息。用户完全拥有、控制和管理自己的身份。
(2)分布式认证
不依赖于单一企业的认证,通过分布式的用户社会关系获得全面的身份认证。
(3)建立信任
本文先选取委员会节点作为发证者和记账节点,而区块链技术旨在确保网络中每一个记账节点都参与数据交互及记录管理等工作,再根据KYC的真实用户信息记录及审计规则,对用户所提供的信息进行审核,并以委员会节点作为凭证颁发者对用户凭证进行背书,可以实现多中心机构中信任桥梁的建立,由此实现支持多中心的特点及节点间的相互信任。
(4)隐私保护
用户的数字身份标识符无法推测出用户真实的身份信息,用户的可信身份认证标识符和可验证数字凭证链下存储,链上存证。用户属性可表示为离散对数模型,转换为密码承诺隐藏用户隐私,实现更高级别的隐私需求。
(5)可撤销性
使用辅链支撑的撤销策略,实现密码凭据的撤销查询,提供未撤销性证明。
(6)可移植性
支持多平台、跨链、跨应用间身份标识和凭证的移植。
与传统的密钥证书管理PKI体系相似,在可信身份认证生态中,系统拥有4种角色,分别为发证者(Issuer)、持有者(Holder)、验证者(Verifier)和标识符注册机构,其中系统可以拥有多个发证中心,如图1所示。此外,机构委员会成员、系统管理员也是联盟链角色,分别具有管理发证机构的权限和系统管理权限。系统角色具体描述如下。
图1 身份认证系统模型Figure 1 Identity authentication system model
发证者:拥有用户数据并能开具可验证声明凭证的实体,如政府、银行、大学等。区块链中的委员会充当发证者。针对用户的身份社会属性多样化与统一身份管理中心之间的矛盾,本文采用多机构颁发代替传统的中心化证书中心。假设已有一个用于选择委员会节点的许可模型,系统中选取委员会作为证书的颁发者。令Cmt表示委员会,由n个节点组成。委员会节点各自存储一个私钥 sk,用于颁发凭据。相应的公钥pk用于验证凭据。任何一方(分布式应用程序或委员会节点)都可以充当凭据发证者,发证者的主要功能包括发证方注册/注销、发布凭证模板、签发用户凭证等。辅助以KYC规则,对用户所提供的信息进行审核,并以委员会节点作为凭证颁发者对用户凭证进行背书,为多中心机构建立信任的桥梁。
验证者:也称应用方,接受可验证声明凭证并进行验证,由此可以提供给出示可验证声明凭证者某种类型的服务。验证者的主要功能包括发布验证规则、通过链上信息验证用户DID、验证用户凭证等。验证者包括雇主、安全人员和网站等。
持有者:向Issuer请求可验证声明凭证的实体。向验证者出示可验证声明凭证。开具的可验证声明凭证可以放在可验证声明凭证钱包里,方便再次使用。持有者的主要功能包括DID注册/注销/更新、向发证者申请凭证、向验证者展示凭证等。持有者包括学生、员工和客户等。
标识符注册机构:负责维护DID的数据库,如某条区块链、分布式账本(DID里的example字段),方便验证者验证可验证声明凭证、Holder、Issuer、可信身份认证数据库。
微网区块链分布式身份认证系统可以拥有多个CA发证中心,一般由电网机构或其他机构承担,如图2所示。此外,微网中终端节点众多,同一个用户既可以作为持有者,也可以作为验证者。
图2 多授权中心的微网接入架构Figure 2 Microgrid access architecture with multiple authorization centers
本节的符号定义如表1所示。
表1 符号定义Table 1 Symbol definition
(1)DID
DID也可以记为did,参考比特币的双 hash方式,DID标识符的设计可以采用base58 (ripemd160 (sha256(
(2)Subject
Subject表示主体对象,是声明描述的主体对象。实体示例包括人、动物和事物等。
(3)Claim
Claim指用户凭证中的声明,是对自己所持有属性、内容等的声明。
(4)Verifiable Credential
Verifiable Credential指用户向发证方申请和签发的凭证,由元数据、声明和证明组成。
(5)Presentation
可验证展示来自同一主体的一个或多个可验证凭证的数据。
可信身份认证系统包括数字身份管理体系和凭证管理系统。数字身份管理体系包括身份注册阶段、身份验证阶段、KYC过程;凭证管理系统包括凭证创建阶段、存证创建阶段、凭证验证阶段、凭证更新阶段、凭证撤销阶段。
(1)数字身份管理体系
① 身份注册阶段createDid (addr) →{pk, sk,did}:注册是获取身份的过程,需要由链上的机构来承认该所有者的身份,由身份所有者执行。输入用户节点的地址addr,系统创建公私钥(pk,sk)和链上注册用户身份标识符did并返回(did可以直接使用公钥地址)。其中系统用户的公私钥记为(pku, sku),发证者公私钥记为(pkc, skc),验证者公私钥为(pkv, skv)。
② 身份验证阶段verifyDid (did, sign, pku)→result:验证是校验所提供的身份是否为合法身份的过程。身份所有者提供身份标识符did、相关挑战信息的签名sign和身份公钥 pku,sign=Signsku(ch),ch为验证者的挑战。验证者在链上查询did的存在性,用公钥 pku验证用户签名sign的正确性,然后调用智能合约,查询did的属性,返回查询结果result,其中result={TRUE/FALSE},TRUE表示身份验证通过,FALSE表示身份验证失败。
③ KYC过程:联盟委员会对用户所提供的身份信息进行核验,核验通过后加密存储于数据库中,用于后续监管和用户凭证信息比对核实,以防违法交易发生。
(2)凭证管理系统
① 凭证创建阶段createCredential(did,a,v)→cred:凭证创建算法由凭证的发证者执行。DID持有者提供其身份标识符did、用户属性a及对应的属性值v,发证者核验属性后,首先生成其声明claimi={a,v}。然后,计算属性值摘要,并为声明签名生成签名证明S=Signskc(h),h=H(v),其中H为哈希函数;接着,发证者为授权证书添加凭证授权时间、凭证更新时间、用户相关属性、用户did的使用方法、验证类型(密钥类型)、使用端口、更新属性和发证者的签名信息等元数据信息,以完成授权证书的创建和签发。
如果用户所持属性为隐私属性,选定群G的生成元为g∊G,计算A=ga( modq)。选取盲因子r,其承诺值c=gr,于是匿名声明为claim={a,A}并发送给发证者。发证者核验承诺值,验证成功则接受承诺;为声明签名生成签名证明S,S=Signskc(c),并为授权证书添加凭证授权时间、软件相关属性、使用方自身属性和发证者的签名信息,完成授权证书的创建和签发。选取(ch, rp)作为结果证明,该证明可被其他用户和验证者验证。普通凭证创建算法和隐私凭证创建算法分别如算法1、算法2所示。
算法1普通凭证创建算法
输入用户身份标识符did,属性a及对应属性值v
输出凭证结果
② 存证创建阶段createEvidence (object,skc) →ev:输入未上链的对象object(一般为所颁发的凭证对象)和身份私钥skc,算法输出存证ev。计算传入的object对象的哈希值,通过身份私钥skc签名,So=Signskc(ho),生成存证ev={ho,So,ex},ex为其他辅助消息或备注消息,并将存证ev上链。存证创建算法可以由持有者或发证者调用。
③ 凭证验证阶段verifyCredential (did, cred,pk) →result:输入持有者的身份标识did、一个或多个待验证凭证cred和身份公钥pk,验证者首先从凭证cred重构凭证摘要ho'=H(cred),然后使用发证方公钥pkc验证凭证的签名So,并与链上的签名So和摘要ho进行比对,比较ho'与ho是否相等。然 后 返 回 验 证 结 果result,其 中result={TRUE/FALSE},TRUE表示凭证验证通过,FALSE表示凭证验证失败。普通凭证验证算法如算法3所示。
算法3普通凭证验证算法
输入用户身份标识符did,凭证cred,公钥pk
输出TRUE / FALSE
check(did) //查 验did的 存 在 性tag1=verSignpkc(So)//验证签名值
ho'=H(cred) //重构凭证摘要
tag2=isEqual(ho,ho')//从链上读取摘要ho,并与ho'比较
零知识凭证验证算法中,除了常规的输入以外,还需输入一些零知识辅助参数,以支撑不披露属性值的零知识验证;除了常规的凭证验证步骤,还需进行零知识挑战和回应的验证,并从链上读取摘要,并与算法所恢复的摘要数据比较,具体验证如算法4所示。
算法4零知识凭证验证算法
输入用户身份标识符did,凭证cred,公钥pk,挑战/回应值(ch, rp),承诺A
输出TRUE / FALSE
check(did) //查 验did的 存 在 性tag1=verSignpkc(So)//验证签名值
ho'=H(cred) //重构凭证摘要
tag2=isEqual(ho,ho')//从链上读取摘要ho,并与oh'比较
凭证验证包含两种模式,分别为链下模式和链上模式。链下模式中验证者只需验证凭证的签名、有效期、是否撤销等属性项来判断授权证书的真伪,这适用于安全需求较低的场景或者离线/应急场景;链上模式中,除上述验证之外,验证者还需要反向构造存证,调用智能合约向链上查询和比较存证来证明与所持凭证的一致性。链上模式适用于安全需求较高的场景。
④ 凭证更新阶段updateCredential(did, cred,newClaim)→newCred:输入持有者的身份标识did、凭证主体cred和新声明newClaim,newClaimi={a tt'i,val'i}。发证者核验原证书cred和新的属性声明newClaim后,更新授权证书的update属性、版本号和声明主体,并添加签名信息,完成授权证书的更新。
凭证撤销阶段revokeCredential(did,cid,cred)→result:输入持有者的身份标识did、凭证主体cred,发证者核验原证书cred后,更新授权证书的revoke属性,并重新添加签名信息,将撤销凭证编号cid和存证上链。然后返回撤销结果result,其中result={TRUE/FALSE},TRUE表示凭证撤销成功,FALSE表示凭证撤销失败。
基于区块链的电网可信分布式身份认证系统应用于微网的分布式交易体系中。通过使用DID,用户持有全局唯一的身份标识符,且该DID标识符可以由用户自己建立,自己管理自己的信息,因此用户可以完全拥有、控制和管理自己的身份。
由于用户自己掌握身份信息,用户与验证者(应用)之间缺少信任。通过区块链技术,可以对每个节点用户所发布的信息进行确认和共识,以建立链上信息在节点间的信任。
得益于区块链的分布式账本技术,用户无须在每个电网交易系统(甚至是电网以外系统)都注册账号,只要用户和验证者在同一个链中,均可以通过分布式的用户社会关系获得全面的身份认证;验证者可以通过属性对电网用户执行身份准入,拥有对应属性才能接入访问。
虽然用户的数字身份标识符无法推测出用户真实的身份信息,但凭证中可能包含用户的隐私信息。针对敏感的身份信息,用户可以将用户属性表示为离散对数模型,并加密为承诺来隐藏用户隐私,验证者只需要通过零知识证明技术即可有效验证,实现了隐私的保护。针对过期的或存在问题的凭证,用户和管理者可以撤销密码凭据。另外,基于区块链的电网可信分布式身份认证系统可以实现跨平台的移植,如兼容电网以外的系统身份验证。
本文通过在CentOS主机上部署FISCO BCOS和身份认证系统服务器、实验室主机模拟电网客户端来模拟电网的分布式接入验证过程,以验证本文系统的高效性和可用性。服务器主机的参数为:Intel(R) Core i7-7700 CPU @3.60 GHz 3.60 GHz,RAM 16.00 GB,CentOS 7系统。客户端主机的参数为Intel(R) Core i5-4590 CPU @ 3.30 GHz 3.30 GHz,RAM 8.00 GB,采用Apache JMeter测试工具分别对系统的各接口执行了Http请求测试,所有的实验数据为运行10 次的平均值。区块链部署的节点数为6个节点。
系统中的智能合约从数据对象上分为DID合约、Credential合约、CPT(凭证模板合约);从数据结构的定义和设计维度可以分为DidData合约、CredentialData合约、CptData合约、IssuerData合约和其他角色以及对象的权限控制合约,其依赖关系如图3所示。
图3 合约依赖关系Figure 3 Contract dependencies
DID智能合约负责链上ID体系建立,包括生成DID、生成DID相关文档、DID在链上的读取与更新。
Authority智能合约负责进行联盟链权限管理,包括链上DID角色的定义、操作与权限的定义与控制。
系统性能测试时,模拟客户端首先发起身份注册请求,即DID创建请求。不同用户并发数量下DID创建的时间变化趋势如图4所示,从图4可以看出,身份创建时间随用户并发数量增加而增大。
图4 不同用户并发数量下DID创建的时间变化趋势Figure 4 DID creation time under different concurrent users
声明创建时间随用户属性个数的变化如图5所示。可以看出,声明创建时间随用户属性数量的增加而增大,基本呈线性趋势,但增大趋势较弱。实际上分布式的凭证声明中的属性个数是有限的,不会超过20个,因此该系统完全满足实际运行的需要。
图5 声明创建时间随用户属性个数的变化Figure 5 Claim creation time with different number of user attributes
不同用户并发数量下普通凭证创建的时间和零知识凭证创建的时间分别如图6和图7所示。从图6和图7可以看出,凭证创建时间均随用户并发数量的增加而增大,但增长幅度逐渐减弱。且零知识凭证的性能几乎与普通凭证相近,使用性能可以满足实际需要。虽然用户并发数量在增加,但分布式的凭证发放方式降低了系统的总体开销,相比集中式的凭证发放方式,效率有所提高。在实际的系统中,凭证创建分别由不同的委员会节点承担,实际上是互不干扰的独立和并行运行子模块,并不会累计于系统总时间中。
图6 不同用户并发数量下普通凭证创建的时间Figure 6 Credential creation time under different concurrent users
图7 不同用户并发数量下零知识凭证创建的时间Figure 7 Zero-knowledge credential creation time under different concurrent users
不同用户并发数量下普通凭证验证的时间和零知识凭证验证的时间分别如图8、图9所示。可以看出,与凭证创建相似,凭证验证时间随用户并发数量的增加而增大,但增长幅度逐渐减弱。因为用户并发数量在增加,但分布式的凭证验证方式降低了系统的总体开销,相比集中式的验证方式,效率有所提高,总体情况在可接受范围之内。
图8 不同用户并发数量下普通凭证验证的时间Figure 8 Credential verification time under different concurrent users
图9 不同用户并发数量下零知识凭证验证时间Figure 9 Zero-knowledge credential verification time under different concurrent users
存证创建时间和凭证撤销时间随凭证个数的变化分别如图10和图11所示,凭证更新时间随属性个数的变化如图12所示。
图10 存证创建时间随凭证个数的变化Figure 10 Evidence creation time with the number of vouchers
图11 凭证撤销时间随凭证个数的变化Figure 11 Credential revocation time with the number of vouchers
图12 凭证更新时间随属性个数的变化Figure 12 Credential update time with the number of vouchers
如图10和图11所示,存证创建时和凭证撤销时间,限制在同一个用户和模块中,但是系统中的发证者实际上是分布式的而不是集中式的,分布式的存证生成及撤销方式可以降低系统的总体开销,相比集中式的验证方式,效率有所提高。
从图12可以看出,凭证更新时间随用户属性数量的增加而增大,呈线性趋势,由于每个属性的量级限制,增大趋势较弱。在实际应用中,属性个数是有限的,一般为个位数,该时间完全满足实际运行的需要。
为了解决微网中终端节点或应用的可信接入和业务访问控制等问题,本文基于FISCO BCOS区块链提出了一个支持多中心的分布式身份管理平台,支持用户身份的自主控制和多平台、跨链、跨应用间身份标识和凭证的移植。用户完全拥有、控制和管理自己的身份,为微网系统和上层应用构建了一个公开透明可信的分布式身份底层框架,实现了身份的自治和细粒度的访问控制。未来将着重研究认证过程的隐私保护问题。