微眾銀行權(quán)限治理組件:構(gòu)筑區(qū)塊鏈業(yè)務(wù)權(quán)限的“防火墻”
區(qū)塊鏈歷經(jīng)10余年的發(fā)展,基礎(chǔ)技術(shù)框架逐漸完善,鏈上承載的業(yè)務(wù)越來(lái)越豐富,參與方越來(lái)越多。多方協(xié)作能否順暢進(jìn)行、業(yè)務(wù)摩擦能否得到有效解決、既往治理策略和實(shí)踐能否滿(mǎn)足日后高速發(fā)展的需求……行業(yè)關(guān)注的重點(diǎn)逐步聚焦到這些更具挑戰(zhàn)性的難題上。
2021年1月,微眾銀行區(qū)塊鏈在多年技術(shù)研究和應(yīng)用實(shí)踐的基礎(chǔ)上,重磅發(fā)布了《面向區(qū)塊鏈的多方協(xié)作治理框架》白皮書(shū),即MCGF(Multilateral Collaborative Governance Framework)。作為區(qū)塊鏈治理的參考架構(gòu),MCGF全面覆蓋區(qū)塊鏈治理的設(shè)計(jì)規(guī)范、參與角色、核心系統(tǒng)架構(gòu)、功能流程及應(yīng)用場(chǎng)景等領(lǐng)域。
區(qū)塊鏈多方協(xié)作治理組件(WeBankBlockchain-Governance)MCGF框架的實(shí)做基礎(chǔ)和原子性構(gòu)件,可復(fù)用、可定制,由私鑰管理組件(Governance-Key)、賬戶(hù)治理組件(Governance-Account)、權(quán)限治理組件(Governance-Authority)、證書(shū)管理組件(Governance-Cert)等子組件構(gòu)成。它們嵌入和運(yùn)行在整個(gè)MCGF大框架的各部分,宛如高速行駛的汽車(chē)上的車(chē)輪、齒輪、傳動(dòng)組、傳感器,協(xié)同助力構(gòu)建治理框架和提升開(kāi)發(fā)效率。
本篇文章是區(qū)塊鏈多方協(xié)作治理組件系列文章的第二篇,將介紹權(quán)限治理組件(Governance-Authority),歡迎大家積極體驗(yàn)并將使用訴求或優(yōu)化建議反饋給我們。
智能合約權(quán)限管控的必要性
隨著區(qū)塊鏈應(yīng)用日漸復(fù)雜,智能合約的編寫(xiě)也越來(lái)越復(fù)雜。如果不對(duì)智能合約做權(quán)限控制,恐將無(wú)法滿(mǎn)足業(yè)務(wù)的安全性要求。例如,存證場(chǎng)景中,除了上傳存證的函數(shù)外,還有許多專(zhuān)供審核人員調(diào)用的函數(shù),這些函數(shù)應(yīng)僅由審核人員來(lái)使用,如果這些函數(shù)沒(méi)有正確設(shè)置權(quán)限攔截邏輯,整套邏輯就容易被攻擊和操控。聯(lián)盟鏈的應(yīng)用可能會(huì)因此陷入安全危機(jī),更有甚者,造成聯(lián)盟生態(tài)的分崩離析。
對(duì)智能合約進(jìn)行權(quán)限控制有一些備選方案:方案一是在上鏈SDK或代理節(jié)點(diǎn)進(jìn)行訪(fǎng)問(wèn)控制,即鏈下控制;方案二是直接在智能合約層進(jìn)行控制。

其中,鏈下控制權(quán)限的方案并不安全。在區(qū)塊鏈網(wǎng)絡(luò)中,存在多個(gè)分布式對(duì)等的參與節(jié)點(diǎn)。這些聯(lián)盟的參與者之間,彼此并不完全信任。其他參與機(jī)構(gòu)的參與者可能會(huì)直接通過(guò)本機(jī)構(gòu)的區(qū)塊鏈節(jié)點(diǎn)訪(fǎng)問(wèn)智能合約,從而繞開(kāi)鏈下的權(quán)限控制。因此,在鏈下進(jìn)行權(quán)限控制存在漏洞,其他參與者完全可能篡改或控制業(yè)務(wù)合約。
在鏈上實(shí)現(xiàn)嚴(yán)格的權(quán)限管控,即通過(guò)智能合約本身管控合約權(quán)限是更好的方式。多方協(xié)作治理組件中的權(quán)限治理組件(Governance-Authority)就是基于智能合約來(lái)實(shí)現(xiàn)權(quán)限管控的。
認(rèn)識(shí)權(quán)限治理組件(Governance-Authority)

權(quán)限治理組件WeBankBlockchain-Governance-Authority的目的在于為智能合約開(kāi)發(fā)者提供權(quán)限控制功能。開(kāi)發(fā)者只要添加少量代碼,即可攔截非法調(diào)用。同時(shí),會(huì)產(chǎn)生一個(gè)專(zhuān)門(mén)的權(quán)限治理合約,用于治理各個(gè)業(yè)務(wù)合約的攔截規(guī)則,對(duì)規(guī)則的修改只需操作權(quán)限治理合約,不需要調(diào)整業(yè)務(wù)合約,且修改實(shí)時(shí)生效。
使用權(quán)限治理組件模式,不僅能防范智能合約被越權(quán)訪(fǎng)問(wèn),還能提供細(xì)粒度、標(biāo)準(zhǔn)化的管控能力,幫助用戶(hù)迅速集成智能合約權(quán)限治理的能力。相關(guān)的運(yùn)作流程如下:

業(yè)務(wù)治理者將權(quán)限管理的智能合約部署到鏈上,可發(fā)起業(yè)務(wù)權(quán)限管理的提案。 業(yè)務(wù)層的智能合約可在業(yè)務(wù)合約中添加權(quán)限管理的鑒權(quán)接口,根據(jù)鑒權(quán)結(jié)果決定是否允許放行。 參與者可通過(guò)鏈上治理合約發(fā)起申請(qǐng),加入具體權(quán)限分組的提案,并交由治理者批準(zhǔn)。假設(shè)治理合約中設(shè)置采用委員會(huì)模式,治理委員會(huì)成員通過(guò)直接投票的方式進(jìn)行閾值投票。其中,一種典型的方式是一票通過(guò),即治理委員會(huì)任意成員投票通過(guò)即可。 業(yè)務(wù)權(quán)限管理合約維護(hù)了用戶(hù)、業(yè)務(wù)合約及函數(shù)的權(quán)限映射關(guān)系。 如存在監(jiān)管者,監(jiān)管者有權(quán)通過(guò)監(jiān)管接口直接發(fā)起監(jiān)管操作,實(shí)現(xiàn)實(shí)時(shí)、可穿透的監(jiān)管。 用戶(hù)發(fā)起業(yè)務(wù)請(qǐng)求,自動(dòng)觸發(fā)智能合約中的業(yè)務(wù)權(quán)限鑒權(quán)接口判斷,該功能自動(dòng)返回鑒權(quán)結(jié)果,實(shí)現(xiàn)業(yè)務(wù)權(quán)限管控的效果。
除了提供合約方式來(lái)管理治理合約之外,為了便于集成到區(qū)塊鏈應(yīng)用中,權(quán)限治理組件還提供了Java SDK。對(duì)于權(quán)限管理人員,既支持通過(guò)手動(dòng)方式來(lái)調(diào)用權(quán)限合約,也支持通過(guò)SDK方式進(jìn)行調(diào)用。
區(qū)塊鏈治理組件實(shí)現(xiàn)了與底層解耦、靈活高效、安全可信、不可篡改的權(quán)限管理治理能力,解決了區(qū)塊鏈應(yīng)用分組管理和精細(xì)化控制的痛點(diǎn)。
關(guān)鍵特性
函數(shù)級(jí)的權(quán)限粒度
聯(lián)盟鏈底層平臺(tái)也支持合約權(quán)限管理,但只能細(xì)化到以合約作為最小單位的粒度。而在權(quán)限體系中,可以進(jìn)一步為合約中的每個(gè)函數(shù)單獨(dú)設(shè)置權(quán)限,同一個(gè)合約中的不同函數(shù)可被設(shè)置為不同的權(quán)限。
支持分組管理
部分聯(lián)盟鏈支持基于賬戶(hù)來(lái)管理和分配權(quán)限。而權(quán)限治理組件則進(jìn)一步支持建立分組,合約函數(shù)的權(quán)限配置基本單位為組,可以設(shè)置整批賬戶(hù)的權(quán)限訪(fǎng)問(wèn)規(guī)則,達(dá)到簡(jiǎn)化配置、優(yōu)化管理的效果。
支持黑白名單
權(quán)限治理組件支持基于黑名單或白名單的方式來(lái)管理函數(shù)訪(fǎng)問(wèn)。用戶(hù)可基于具體的場(chǎng)景,按需選擇是以黑名單還是白名單的方式來(lái)管理權(quán)限。
侵入性低
區(qū)別于鏈級(jí)別的權(quán)限管理,權(quán)限治理組件在使用的時(shí)候更為靈活、輕量。在具體的業(yè)務(wù)場(chǎng)景中,業(yè)務(wù)合約只需要在代碼中引入權(quán)限合約地址,并通過(guò)在需要權(quán)限控制的函數(shù)中訪(fǎng)問(wèn)權(quán)限合約的權(quán)限判斷接口,就可以實(shí)現(xiàn)權(quán)限控制。
多種治理方式
允許中心化和多中心化兩種方式進(jìn)行權(quán)限治理。除了為兼容傳統(tǒng)中心化場(chǎng)景下所提供的管理員模式外;權(quán)限治理組件還提供了多中心化的治理方式。在多中心化方式下,有一個(gè)治理委員會(huì),治理委員會(huì)成員通過(guò)投票來(lái)決定如何更改權(quán)限信息。
支持監(jiān)管審計(jì)
權(quán)限管理預(yù)留了監(jiān)管者的接口,對(duì)監(jiān)管友好,支持嵌入式的監(jiān)管。監(jiān)管者一旦發(fā)現(xiàn)有違法違規(guī)的參與者,可依法依規(guī)發(fā)送監(jiān)管指令,約束和規(guī)范參與者的行為,同時(shí),執(zhí)法的規(guī)則、程序和執(zhí)行都是公開(kāi)、透明的。在權(quán)限治理組件中,決策信息和操作記錄透明可追溯。
技術(shù)詳解
權(quán)限治理組件包含了合約層和SDK層。
合約層:權(quán)限治理組件基于智能合約來(lái)實(shí)現(xiàn),定義了管理模式設(shè)置、用戶(hù)分組管理、授權(quán)申請(qǐng)、授權(quán)審批、鑒權(quán)、取消授權(quán)等操作的接口。所有參與者可以查看和審核該合約的代碼,并按需來(lái)進(jìn)行調(diào)用。參與者可通過(guò)AuthManager合約來(lái)部署和調(diào)用合約。

上圖中,粉色部分為一些基礎(chǔ)的工具合約:
SingletonVoter:提供了投票相關(guān)功能的統(tǒng)一封裝。 WeVoteWeight:定義了投票權(quán)重相關(guān)的功能和數(shù)據(jù)結(jié)構(gòu)。 WeVoteRequest:定義了投票提案相關(guān)的功能和數(shù)據(jù)結(jié)構(gòu)。 WEBoardVoteGuard:依托LibBoardVote,抽象并對(duì)外提供了多個(gè)投票相關(guān)的接口。 LibWeightMap:提供了Map的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)工具庫(kù)。 LibAddressSet:提供了地址處理的工具庫(kù)。 WEBasicAuth:提供權(quán)限管理的基礎(chǔ)功能,比如合約屬主校驗(yàn)和屬主轉(zhuǎn)移。
藍(lán)色部分為賬戶(hù)及相關(guān)的實(shí)現(xiàn)合約:
AclManager:管理和存儲(chǔ)了組、賬戶(hù)、函數(shù)簽名、權(quán)限等。 WEAdmin:管理和存儲(chǔ)了管理員相關(guān)的賬戶(hù)和提供權(quán)限移交等功能。 GovManager:提供了治理者和治理模式設(shè)置等管理。
黃色部分為部署治理相關(guān)合約的接口合約,旨在提供對(duì)外統(tǒng)一的接口合約,便于用戶(hù)快速部署。
SDK層:封裝了上述權(quán)限治理合約的所有接口,幫助用戶(hù)通過(guò)Java SDK的方式來(lái)通過(guò)Java代碼來(lái)執(zhí)行這些操作,使得應(yīng)用操作和管理更加順暢、靈活。
應(yīng)用場(chǎng)景
在供應(yīng)鏈金融、農(nóng)牧產(chǎn)品溯源等區(qū)塊鏈業(yè)務(wù)場(chǎng)景中,通常建立的是復(fù)雜的業(yè)務(wù)權(quán)限模型,如:在業(yè)務(wù)隔離方面,支持對(duì)業(yè)務(wù)應(yīng)用進(jìn)行分組管理;在管理粒度方面,支持細(xì)化管控到智能合約函數(shù)的級(jí)別;在治理規(guī)則方面,支持各類(lèi)準(zhǔn)入管理;在治理模式方面,支持管理員和委員會(huì)模式;在生效時(shí)間方面,支持實(shí)時(shí)生效。
供應(yīng)鏈金融
在供應(yīng)鏈金融場(chǎng)景中,部分銀行與供應(yīng)鏈上下游企業(yè)組成一個(gè)“供應(yīng)鏈金融+區(qū)塊鏈”的聯(lián)盟,以盤(pán)活核心企業(yè)與其多級(jí)供應(yīng)商之間的應(yīng)收賬款資產(chǎn)的流動(dòng)性,為供應(yīng)鏈上下游的核心企業(yè)及供應(yīng)商提供靈活、創(chuàng)新的融資渠道,尤其利于規(guī)模較小、金融服務(wù)獲得不充分的小微企業(yè)。
但供應(yīng)鏈金融涉及復(fù)雜的數(shù)據(jù)權(quán)限治理問(wèn)題。例如,數(shù)據(jù)上傳后,銀行只有可讀權(quán)限;不同的供應(yīng)鏈核心企業(yè)只允許操作本供應(yīng)鏈內(nèi)部的合約數(shù)據(jù);本供應(yīng)鏈內(nèi)的相關(guān)融資信息由交易方寫(xiě)入,不允許其他企業(yè)上傳……
依托權(quán)限治理組件,供應(yīng)鏈金融場(chǎng)景中的各參與方:如各銀行、核心企業(yè)、大型供應(yīng)商可組成一個(gè)業(yè)務(wù)權(quán)限的治理委員會(huì)。治理委員會(huì)可根據(jù)需求創(chuàng)建不同的成員分組。例如,在同一供應(yīng)鏈鏈條內(nèi),所有參與方被添加到該分組中,可靈活進(jìn)行相關(guān)的權(quán)限治理。
權(quán)限治理組件有效為供應(yīng)鏈和區(qū)塊鏈的“雙鏈舞動(dòng)”保駕護(hù)航。
農(nóng)牧產(chǎn)品溯源
現(xiàn)有的農(nóng)牧產(chǎn)品溯源過(guò)程中,生產(chǎn)、流通、售賣(mài)各方呈現(xiàn)信息孤島,且各自的數(shù)據(jù)存在被篡改的風(fēng)險(xiǎn),使用區(qū)塊鏈能有效保證農(nóng)牧產(chǎn)品在生產(chǎn)、運(yùn)輸、售賣(mài)等環(huán)節(jié)的信息真實(shí)、有效。
在農(nóng)牧產(chǎn)品溯源場(chǎng)景中,對(duì)于同一件商品,其所涉及到的生產(chǎn)方、流通方、銷(xiāo)售方到最終的消費(fèi)者以及監(jiān)管方,需要將相關(guān)的信息上到同一條鏈中。該場(chǎng)景要求各方獨(dú)立操作,將各自環(huán)節(jié)的數(shù)據(jù)予以上傳,例如流通方不能操作生產(chǎn)環(huán)節(jié)所涉及的合約函數(shù)……
因而,農(nóng)牧產(chǎn)品溯源場(chǎng)景對(duì)涉及到智能合約權(quán)限的控制提出了較高的要求。
農(nóng)牧產(chǎn)品溯源的各參與方可利用業(yè)務(wù)權(quán)限治理組件,成立一個(gè)權(quán)限治理的委員會(huì),來(lái)管理各自的權(quán)限。治理者可創(chuàng)建專(zhuān)門(mén)的分組,針對(duì)相同的商品,對(duì)所涉及到的不同環(huán)節(jié),配置不同的控制權(quán)限。
權(quán)限治理組件是諸多應(yīng)用場(chǎng)景的安全“防火墻”。在同一個(gè)聯(lián)盟鏈中,可基于業(yè)務(wù)靈活創(chuàng)建不同的分組。通過(guò)對(duì)治理模式、治理成員、不同分組、黑白名單和合約函數(shù)等信息進(jìn)行設(shè)置,滿(mǎn)足復(fù)雜業(yè)務(wù)場(chǎng)景下的權(quán)限治理需求。
即刻使用
上述相關(guān)代碼和技術(shù)文檔已更新,歡迎體驗(yàn)和 star 支持。如需咨詢(xún)技術(shù)問(wèn)題,歡迎關(guān)注本公眾號(hào),對(duì)話(huà)框回復(fù)【小助手】進(jìn)技術(shù)交流群。
文檔地址:
https://governance-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Governance-Auth/index.html
GitHub代碼庫(kù)地址:
https://github.com/WeBankBlockchain/Governance-Authority
gitee代碼庫(kù)地址:
如項(xiàng)目對(duì)您有幫助,歡迎點(diǎn)亮我們的小星星(點(diǎn)擊項(xiàng)目右上方Star按鈕)。 歡迎提交代碼(Pull requests)。 提問(wèn)和提交BUG。 如果發(fā)現(xiàn)代碼存在安全漏洞,可通過(guò)https://security.webank.com/上報(bào)。




