微众银行权限治理组件:构筑区块链业务权限的“防火墙”
区块链历经10余年的发展,基础技术框架逐渐完善,链上承载的业务越来越丰富,参与方越来越多。多方协作能否顺畅进行、业务摩擦能否得到有效解决、既往治理策略和实践能否满足日后高速发展的需求……行业关注的重点逐步聚焦到这些更具挑战性的难题上。
2021年1月,微众银行区块链在多年技术研究和应用实践的基础上,重磅发布了《面向区块链的多方协作治理框架》白皮书,即MCGF(Multilateral Collaborative Governance Framework)。作为区块链治理的参考架构,MCGF全面覆盖区块链治理的设计规范、参与角色、核心系统架构、功能流程及应用场景等领域。
区块链多方协作治理组件(WeBankBlockchain-Governance)MCGF框架的实做基础和原子性构件,可复用、可定制,由私钥管理组件(Governance-Key)、账户治理组件(Governance-Account)、权限治理组件(Governance-Authority)、证书管理组件(Governance-Cert)等子组件构成。它们嵌入和运行在整个MCGF大框架的各部分,宛如高速行驶的汽车上的车轮、齿轮、传动组、传感器,协同助力构建治理框架和提升开发效率。
本篇文章是区块链多方协作治理组件系列文章的第二篇,将介绍权限治理组件(Governance-Authority),欢迎大家积极体验并将使用诉求或优化建议反馈给我们。
智能合约权限管控的必要性
随着区块链应用日渐复杂,智能合约的编写也越来越复杂。如果不对智能合约做权限控制,恐将无法满足业务的安全性要求。例如,存证场景中,除了上传存证的函数外,还有许多专供审核人员调用的函数,这些函数应仅由审核人员来使用,如果这些函数没有正确设置权限拦截逻辑,整套逻辑就容易被攻击和操控。联盟链的应用可能会因此陷入安全危机,更有甚者,造成联盟生态的分崩离析。
对智能合约进行权限控制有一些备选方案:方案一是在上链SDK或代理节点进行访问控制,即链下控制;方案二是直接在智能合约层进行控制。
其中,链下控制权限的方案并不安全。在区块链网络中,存在多个分布式对等的参与节点。这些联盟的参与者之间,彼此并不完全信任。其他参与机构的参与者可能会直接通过本机构的区块链节点访问智能合约,从而绕开链下的权限控制。因此,在链下进行权限控制存在漏洞,其他参与者完全可能篡改或控制业务合约。
在链上实现严格的权限管控,即通过智能合约本身管控合约权限是更好的方式。多方协作治理组件中的权限治理组件(Governance-Authority)就是基于智能合约来实现权限管控的。
认识权限治理组件(Governance-Authority)
权限治理组件WeBankBlockchain-Governance-Authority的目的在于为智能合约开发者提供权限控制功能。开发者只要添加少量代码,即可拦截非法调用。同时,会产生一个专门的权限治理合约,用于治理各个业务合约的拦截规则,对规则的修改只需操作权限治理合约,不需要调整业务合约,且修改实时生效。
使用权限治理组件模式,不仅能防范智能合约被越权访问,还能提供细粒度、标准化的管控能力,帮助用户迅速集成智能合约权限治理的能力。相关的运作流程如下:
业务治理者将权限管理的智能合约部署到链上,可发起业务权限管理的提案。 业务层的智能合约可在业务合约中添加权限管理的鉴权接口,根据鉴权结果决定是否允许放行。 参与者可通过链上治理合约发起申请,加入具体权限分组的提案,并交由治理者批准。假设治理合约中设置采用委员会模式,治理委员会成员通过直接投票的方式进行阈值投票。其中,一种典型的方式是一票通过,即治理委员会任意成员投票通过即可。 业务权限管理合约维护了用户、业务合约及函数的权限映射关系。 如存在监管者,监管者有权通过监管接口直接发起监管操作,实现实时、可穿透的监管。 用户发起业务请求,自动触发智能合约中的业务权限鉴权接口判断,该功能自动返回鉴权结果,实现业务权限管控的效果。
除了提供合约方式来管理治理合约之外,为了便于集成到区块链应用中,权限治理组件还提供了Java SDK。对于权限管理人员,既支持通过手动方式来调用权限合约,也支持通过SDK方式进行调用。
区块链治理组件实现了与底层解耦、灵活高效、安全可信、不可篡改的权限管理治理能力,解决了区块链应用分组管理和精细化控制的痛点。
关键特性
函数级的权限粒度
联盟链底层平台也支持合约权限管理,但只能细化到以合约作为最小单位的粒度。而在权限体系中,可以进一步为合约中的每个函数单独设置权限,同一个合约中的不同函数可被设置为不同的权限。
支持分组管理
部分联盟链支持基于账户来管理和分配权限。而权限治理组件则进一步支持建立分组,合约函数的权限配置基本单位为组,可以设置整批账户的权限访问规则,达到简化配置、优化管理的效果。
支持黑白名单
权限治理组件支持基于黑名单或白名单的方式来管理函数访问。用户可基于具体的场景,按需选择是以黑名单还是白名单的方式来管理权限。
侵入性低
区别于链级别的权限管理,权限治理组件在使用的时候更为灵活、轻量。在具体的业务场景中,业务合约只需要在代码中引入权限合约地址,并通过在需要权限控制的函数中访问权限合约的权限判断接口,就可以实现权限控制。
多种治理方式
允许中心化和多中心化两种方式进行权限治理。除了为兼容传统中心化场景下所提供的管理员模式外;权限治理组件还提供了多中心化的治理方式。在多中心化方式下,有一个治理委员会,治理委员会成员通过投票来决定如何更改权限信息。
支持监管审计
权限管理预留了监管者的接口,对监管友好,支持嵌入式的监管。监管者一旦发现有违法违规的参与者,可依法依规发送监管指令,约束和规范参与者的行为,同时,执法的规则、程序和执行都是公开、透明的。在权限治理组件中,决策信息和操作记录透明可追溯。
技术详解
权限治理组件包含了合约层和SDK层。
合约层:权限治理组件基于智能合约来实现,定义了管理模式设置、用户分组管理、授权申请、授权审批、鉴权、取消授权等操作的接口。所有参与者可以查看和审核该合约的代码,并按需来进行调用。参与者可通过AuthManager合约来部署和调用合约。
上图中,粉色部分为一些基础的工具合约:
SingletonVoter:提供了投票相关功能的统一封装。 WeVoteWeight:定义了投票权重相关的功能和数据结构。 WeVoteRequest:定义了投票提案相关的功能和数据结构。 WEBoardVoteGuard:依托LibBoardVote,抽象并对外提供了多个投票相关的接口。 LibWeightMap:提供了Map的基础数据结构工具库。 LibAddressSet:提供了地址处理的工具库。 WEBasicAuth:提供权限管理的基础功能,比如合约属主校验和属主转移。
蓝色部分为账户及相关的实现合约:
AclManager:管理和存储了组、账户、函数签名、权限等。 WEAdmin:管理和存储了管理员相关的账户和提供权限移交等功能。 GovManager:提供了治理者和治理模式设置等管理。
黄色部分为部署治理相关合约的接口合约,旨在提供对外统一的接口合约,便于用户快速部署。
SDK层:封装了上述权限治理合约的所有接口,帮助用户通过Java SDK的方式来通过Java代码来执行这些操作,使得应用操作和管理更加顺畅、灵活。
应用场景
在供应链金融、农牧产品溯源等区块链业务场景中,通常建立的是复杂的业务权限模型,如:在业务隔离方面,支持对业务应用进行分组管理;在管理粒度方面,支持细化管控到智能合约函数的级别;在治理规则方面,支持各类准入管理;在治理模式方面,支持管理员和委员会模式;在生效时间方面,支持实时生效。
供应链金融
在供应链金融场景中,部分银行与供应链上下游企业组成一个“供应链金融+区块链”的联盟,以盘活核心企业与其多级供应商之间的应收账款资产的流动性,为供应链上下游的核心企业及供应商提供灵活、创新的融资渠道,尤其利于规模较小、金融服务获得不充分的小微企业。
但供应链金融涉及复杂的数据权限治理问题。例如,数据上传后,银行只有可读权限;不同的供应链核心企业只允许操作本供应链内部的合约数据;本供应链内的相关融资信息由交易方写入,不允许其他企业上传……
依托权限治理组件,供应链金融场景中的各参与方:如各银行、核心企业、大型供应商可组成一个业务权限的治理委员会。治理委员会可根据需求创建不同的成员分组。例如,在同一供应链链条内,所有参与方被添加到该分组中,可灵活进行相关的权限治理。
权限治理组件有效为供应链和区块链的“双链舞动”保驾护航。
农牧产品溯源
现有的农牧产品溯源过程中,生产、流通、售卖各方呈现信息孤岛,且各自的数据存在被篡改的风险,使用区块链能有效保证农牧产品在生产、运输、售卖等环节的信息真实、有效。
在农牧产品溯源场景中,对于同一件商品,其所涉及到的生产方、流通方、销售方到最终的消费者以及监管方,需要将相关的信息上到同一条链中。该场景要求各方独立操作,将各自环节的数据予以上传,例如流通方不能操作生产环节所涉及的合约函数……
因而,农牧产品溯源场景对涉及到智能合约权限的控制提出了较高的要求。
农牧产品溯源的各参与方可利用业务权限治理组件,成立一个权限治理的委员会,来管理各自的权限。治理者可创建专门的分组,针对相同的商品,对所涉及到的不同环节,配置不同的控制权限。
权限治理组件是诸多应用场景的安全“防火墙”。在同一个联盟链中,可基于业务灵活创建不同的分组。通过对治理模式、治理成员、不同分组、黑白名单和合约函数等信息进行设置,满足复杂业务场景下的权限治理需求。
即刻使用
上述相关代码和技术文档已更新,欢迎体验和 star 支持。如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。
文档地址:
https://governance-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Governance-Auth/index.html
GitHub代码库地址:
https://github.com/WeBankBlockchain/Governance-Authority
gitee代码库地址:
如项目对您有帮助,欢迎点亮我们的小星星(点击项目右上方Star按钮)。 欢迎提交代码(Pull requests)。 提问和提交BUG。 如果发现代码存在安全漏洞,可通过https://security.webank.com/上报。