中心化的權限系統(tǒng)使用場景受限,同時增加了網絡運維成本以及用戶使用成本。百度超級鏈基于ACL權限模型實現(xiàn)了一套去中心化的權限系統(tǒng),同時保持著可擴展、易用的特性,有助于開發(fā)者快速上手。
本期超級鏈學院線上微課堂就帶你解鎖超級鏈去中心化的權限系統(tǒng)!明星講師超哥將主要圍繞以下幾點展開:
1.權限系統(tǒng)在區(qū)塊鏈中有哪些作用?
2.超級鏈權限系統(tǒng)是如何構建的?
3.用戶如何快速上手超級鏈權限系統(tǒng)?
4.使用過程有哪些常見問題需要避免?
5.超級鏈權限系統(tǒng)與其他系統(tǒng)的異同點?
快來繼續(xù)往下看吧!
Q1:賬戶與權限系統(tǒng)的定義是什么?
賬戶用于標識區(qū)塊鏈網絡中不同身份,而權限控制用于約束資源獲取/更新等能力。
賬戶與權限系統(tǒng)就是指結合賬戶與權限控制兩個要素,以賬戶為粒度對資源獲取/更新等能力進行約束的一種系統(tǒng)要素。這里的賬戶包括普通賬戶以及合約賬戶。
Q2:賬戶與權限系統(tǒng)有哪些常見模型?
區(qū)塊鏈中常見的權限控制模型包括:基于ACL的權限控制模型、基于RBAC的權限控制模型以及基于ABAC的權限控制模型。
Q3:賬戶與權限系統(tǒng)在區(qū)塊鏈中有哪些作用?
權限系統(tǒng)用于保障區(qū)塊鏈網絡中普通用戶資產、合約用戶資產的安全,只有擁有相應權限的用戶才能訪問/更新相應的數(shù)據(jù),做到用戶對自己的數(shù)據(jù)具有所有權。
常見的權限系統(tǒng)包括以聯(lián)盟鏈為代表的MSP身份認證系統(tǒng),以公鏈為代表的去中心化權限系統(tǒng)。
Q4:超級鏈采用的哪種賬戶與權限模型呢?
超級鏈其實已經實現(xiàn)了一套基于CA的權限控制系統(tǒng),適用于聯(lián)盟鏈應用場景。為了不僅適用于聯(lián)盟鏈場景,同時適用于公鏈場景的需求,超級鏈還自研了一套基于ACL權限控制模型的去中心化的賬戶與權限系統(tǒng)。當初設計去中心化的賬戶與權限系統(tǒng)主要是為了公鏈場景下,支持智能合約數(shù)據(jù)資產的訪問權限控制,保障合約資產數(shù)據(jù)的安全。
到目前為止,超級鏈中普通賬戶的權限認證也走去中心化權限系統(tǒng),實現(xiàn)了權限認證的入口統(tǒng)一。目前,超級鏈自研的權限控制系統(tǒng)支持簽名閾值策略、AK集簽名策略等。
閾值策略是指每個用戶持有一定權重的權限,當授權用戶的總權重達到一定閾值時,表明鑒權通過。AK集策略是指集合中的AK之間的與以及集合之間的或邏輯表達式,來決定是否鑒權通過。
Q5:超級鏈是如何實現(xiàn)賬戶與權限系統(tǒng)的?
權限系統(tǒng)主要包括賦權與鑒權兩個部分,這兩個方法以系統(tǒng)合約的形式實現(xiàn)。在創(chuàng)建合約賬戶、設置合約賬戶權限列表、設置合約方法權限列表時,會分別調用賦權與鑒權這兩類系統(tǒng)合約。
(1)超級鏈是如何實現(xiàn)賦權的?什么操作涉及到賦權?
賦權是指為合約賬戶或者合約方法設置訪問權限列表,涉及到更新數(shù)據(jù)庫數(shù)據(jù)。
一般在創(chuàng)建合約賬戶、設置合約賬戶權限列表、設置合約方法權限列表時都會涉及到賦權操作。
主要操作就是將一個《key,value》寫入數(shù)據(jù)庫,value通常為json格式的權限配置文件,而key就是合約賬戶的ID或者合約方法的ID。
賦權過程中,還會對參數(shù)進行有效性驗證,比如合約賬戶命名規(guī)范是否合法,權限列表數(shù)量是否達到上限。
(2)超級鏈是如何實現(xiàn)鑒權的?什么操作涉及到鑒權?
鑒權是指驗證一組簽名是否具有足夠權限執(zhí)行特定的操作,比如調用某個合約的某個方法、普通用戶轉賬等。
主要通過權限樹模型進行權限認證流程,具體流程如下:
①根據(jù)實體的鏈上權限規(guī)則構造出權限樹,并緩存每個非葉子節(jié)點的具體權限規(guī)則;
②按層遍歷權限樹,從最底層的節(jié)點進行鑒權;
a.如果節(jié)點是一個普通的address,直接判斷是否滿足實體的權限需求;
b.如果節(jié)點是一個合約賬號,則遞歸判斷其所有子節(jié)點是否獲得授權;
③如果當前節(jié)點為根節(jié)點,則按照(2)中的鑒權規(guī)則判斷,得到最終的鑒權結果;
通常,涉及到數(shù)據(jù)更新的地方都需要鑒權。
Q6:應該如何使用超級鏈的賬戶與權限系統(tǒng)?
只需要正確填寫Initiator以及AuthRequire以及對應的簽名即可。
Initiator通常從data/keys/address文件中獲取,AuthRequire通常從data/acl/addrs文件中獲取。
我們以創(chuàng)建一個合約賬戶為例,說明如何使用。
step1: 準備一個acl配置文件,命名為newAccount.json,內容如下:
{
“module_name”: “xkernel”,
“method_name”: “NewAccount”,
“args” : {
“account_name”: “1111111111111111”,
“acl”: “{\”pm\“: {\”rule\“: 1,\”acceptValue\“: 0.6},\”aksWeight\“: {\”AK1\“: 0.5,\”AK2\“: 0.5}}”
}
}
其中,module_name是指創(chuàng)建合約賬戶調用的系統(tǒng)合約名字;
method_name是指創(chuàng)建合約賬戶調用的系統(tǒng)合約方法名字;
account_name是指待創(chuàng)建的合約賬戶名字;
acl就是具體的權限配置規(guī)則,其中rule是指特定的權限模型,acceptValue是權限閾值,aksWeight是指具體的權限比重配置。
step2: 發(fā)起預執(zhí)行,命令如下:
。/xchain-cli multisig gen - -desc newAccount.json
step3: 對預執(zhí)行結果進行簽名,命令如下:
。/xchain-cli multisig sign --output my.sign
step4: 將預執(zhí)行結果以及簽名組裝成一個完整的交易并轉發(fā)到網絡,命令如下:
。/xchain-cli multisig send my.sign my.sign
Q7:超級鏈權限模型與其他模型有何異同點呢?
Fabric:
實現(xiàn)了一套基于MSP的權限認證系統(tǒng),通過CA進行證書授權,基于ABAC進行權限訪問控制。
只適用于聯(lián)盟鏈場景,不適用于公鏈,且ABAC方式較復雜。
EOS:
基于RBAC實現(xiàn)一套賬戶權限系統(tǒng),RBAC將角色與權限掛鉤。
Ethereum:
權限控制都是靠每個合約自己在代碼中定義。
Bitcoin:
沒有權限控制。
分享結束后,群里涌現(xiàn)出的精彩問題,摘取部分分享給各位。
問:超級鏈的權限模型是不是不使用CA證書?因為在我的理解中,CA是個中心化的東西。
答:我們支持CA模型,不過當前開源的版本沒有實現(xiàn)CA。我們的聯(lián)盟鏈解決方案包含了CA,但目前開源版本的權限系統(tǒng)是獨立于CA存在的,是一種完全去中心化的權限系統(tǒng)。
問:普通賬戶權限認證的去中心化權限系統(tǒng)是在哪個版本升級了?普通用戶該如何使用權限系統(tǒng)呢?
答:普通賬戶的權限驗證一直都是在鏈上完成的,后來將普通賬戶的權限驗證接口統(tǒng)一到了權限系統(tǒng)中了。
普通用戶的權限驗證就是公私鑰驗證。
問:物聯(lián)網的海量數(shù)據(jù)接入鏈會發(fā)生什么事?是否有具體有關充電樁場景應用的案例呢?
答:這種場景對網絡的性能有要求。如果網絡性能不行,容易阻塞。
超級鏈之前恰好有過汽車充電樁數(shù)據(jù)接入區(qū)塊鏈的案例,在這個案例中,我們通過LCV輕量級節(jié)點植入到充電樁中,從源頭保證數(shù)據(jù)可信采集,并將實際充電結算數(shù)據(jù)上鏈,解決了充電樁服務商、電力部門和用戶之間的數(shù)據(jù)互信問題。
問:rule是指特定的權限模型,acceptValue是權限閾值,aksWeight是指具體的權限比重配置。那權限模型、閾值、權限比重配置,可以說明一下這3個嗎?
答:權限模型是指使用什么樣的ACL規(guī)則模型來驗證權限,可選的有閾值模型和AK集模型。如果選擇閾值模型,那么ACL中每個address可以配置一個權重,這個權重配置列表就是aksWeight,那么將所有簽名Address的權重累加,如果超過acceptValue這個閾值,就說明權限驗證成功。
問:EOS實現(xiàn)RBAC將角色與權限掛鉤。這種是不是更適合聯(lián)盟鏈業(yè)務場景?超級鏈選擇的acl的優(yōu)勢是什么?
答:超級鏈的ACL并不是傳統(tǒng)意義的訪問控制列表,而是一種基于賬戶列表的可擴展的權限模型。舉例來說,我們提供的AK集模型就可以支持賬戶集合之間的邏輯關系判斷。所以基于這種可擴展的權限模型,用戶甚至可以定制出自己的RBAC模型,這種靈活性要比RBAC更高。
問:由于企業(yè)內部可能存在賬號系統(tǒng)中用戶信息被惡意泄露的問題,超級鏈中的授權鑒權能否發(fā)展成為企業(yè)內部賬號系統(tǒng)?或者說未來有沒有可能打造一款類似產品,部署在企業(yè)內部做私有鏈?
答:對于企業(yè)賬戶信息泄露的問題,可以從兩個角度考慮,第一個角度是單個用戶密碼泄露導致的單個用戶信息泄露,這個在區(qū)塊鏈場景下如果用戶私鑰泄露也同樣會泄露個人信息;第二個角度是因為用戶數(shù)據(jù)中心化存儲帶來的中心化系統(tǒng)數(shù)據(jù)泄露問題,這種情況通過區(qū)塊鏈可以將用戶信息作為個人隱私數(shù)據(jù)保留在個人賬戶中,典型的例如去中心化身份系統(tǒng),可以做到不會因為中心化系統(tǒng)被攻破而泄露所有用戶的信息。
問:有方法實現(xiàn)去中心化的身份認證系統(tǒng)嗎?
答:DID去中心化身份系統(tǒng)有標準實現(xiàn),我們也會在未來開源我們自己的DID解決方案。
問:Fabric中的CA認證能不能拓展到其他場景呢?例如:登陸某一網站或者APP,通過掃描二維碼,進行CA授權及權限劃分。
答:超級鏈不是Fabric,不過我們也有CA。除此之外,我們的權限系統(tǒng)是一種更靈活、可擴展的權限模型。理論上,可以通過擴展權限模型來支持外部驗證系統(tǒng),不過外部系統(tǒng)數(shù)據(jù)不在鏈上,當外部用戶發(fā)生變化時,鏈上并無法及時得知,有可能導致數(shù)據(jù)不一致問題。
責任編輯;zl
評論
查看更多