【背景】
作为一种去中心化的分布式系统,区块链系统在生产环境中会受到网络条件、节点规模、监管政策等多方面因素的影响,因此系统需要解决运维与合规问题,以保证分布式系统线上运行的安全与稳定。

在计算机系统中,广义上的权限体系一般包括三个部分:授权、鉴权及受保护资源。受保护资源指的是访问需要受到一定条件约束的资源;授权指的是用户主动或被动获取访问受限资源能力的过程;鉴权指的是用户访问受限资源时通过特定机制和凭证校验用户是否具有访问能力的过程。

区块链系统中的权限体系,会根据受保护资源对系统的影响范围被划分成若干层级。每个层级又可以细分出不同的受保护资源。不同的受保护资源可具有截然不同的权限管理机制。

【权限层级】
总体上,在区块链系统中,权限体系所保护的资源一般可以从资源对区块链系统的影响层级范围的维度划分成四类:对整个链运转产生影响的链级权限、对单个智能合约运行产生影响的合约权限、对区块链上单个账号产生影响的账号权限及只对区块链系统中单个节点产生影响的节点权限。

▲链级权限
链级资源:区块链系统中需要所有节点保持一致的参数配置集合。
链级资源的访问:在区块链系统中对上述配置进行统一变更的操作。
链级权限就是保护链级资源的权限机制。链级资源一般在区块链系统创世时就稳定地存在于区块链系统中,一般需要通过特殊的交易来访问,保证节点间的一致性;其访问必须在一定程度上受限,不可以轻易被访问,一旦被随意访问,容易导致功能的混乱,进而整个系统受到不可逆的损害。

▲合约权限
合约权限:业务智能合约操作接口的访问控制。
受保护的操作包括智能合约的维护与调用。智能合约的维护一般指的是智能合约代码的更新、智能合约的状态变更等,其维护权限默认赋予智能合约的部署者。

不论是智能合约的维护还是调用,都需要通过特定的标识符来指向所访问的合约,基于智能合约的标识符,在区块链执行器层面可以提供黑白名单的机制对智能合约的接口进行整体保护。

▲账号权限
在区块链账本上的主体,除了智能合约一般还包括区块链账号。账号权限核心就是保护区块链账本上的账号,使其不会被随意使用,它既包含了交易发起方的验证,又包含了发起方是否有权限向交易接收方发起操作的验证。

▲节点权限
上述三类权限受保护的主体,不论是链级参数、合约接口或区块链账号,都是一个区块链系统中全局的概念,因此上述三类权限控制机制在区块链系统中所有的节点上,都是以相同的方式运作的。

节点权限相比上述三类权限来说,是一个单点的概念。理论上一个区块链系统中的节点只需要满足特定的协议,可以用不同的方式来实现,也可以对客户端提供不同的接口。节点权限所保护的资源对象就是实现区块链节点协议的服务器端对其客户端暴露的接口,确保接口不可以被随意访问。

【权限管理模型】
介绍了权限体系所保护的资源,下面将介绍权限管理模型:如何进行授权和鉴权。

目前在区块链系统中使用权限管理模型有多种,例如基于公钥密码学的权限管理模型、基于链下多重签名的权限管理模型、基于提案投票的权限管理模型、基于角色的权限管理模型等,在实际区块链系统设计和实现中,往往会使用多个权限管理模型组合形成其权限体系,此处主要介绍基于提案投票的权限管理模型。

▲基于提案投票的权限管理模型
基于提案投票的权限管理模型:通过在内置智能合约或在业务智能合约中设计一套提案投票机制来保护特定资源的机制。在整个体系中包含两方面要素,参与者管理与提案投票管理。

参与者管理:管理有哪些用户可以参与提案投票管理,此处则是基于角色的权限管理模型来对参与者进行管理的;

提案投票管理则:访问受保护资源必须以提案的形式发起交易,然后由参与者发起投票交易,通过投票来决定提案是否能够被执行。

基于提案投票的权限管理模型初始化时,需要初始化投票系统的状态,并且记录在区块链账本上。

首先,要进行的是参与者的初始化,包括初始化所有可以参与投票的参与者的标识符和参与者的投票权重。

然后是投票机制参数的初始化,包括同意票阈值、反对票阈值、提案失效条件等。一般来说,提案需要一个最长有效期,这个有效期可以通过区块高度或交易打包时间来规定,也就是说,一个提案在账本上成功创建之后,在高度小于一定值或打包时间小于一定值的区块内才允许被投票或执行。

最后就是资源访问接口的初始化,一般来说,最通用的做法是将资源的访问接口以类似RPC接口注册的方式注册为一个可以通过提案投票机制调用的接口。值得注意的是,通常可以将参与者与提案投票的参数变更接口注册为提案可访问的资源,实现系统的自维护。

基于提案投票的权限管理模型的授权鉴权流程如下图所示,访问系统资源主要有以下三个需要用户操作的环节:

基于提案投票的权限管理模型的授权鉴权流程

1)提案
提案环节,一般需要结合数字签名来证明提案的发起者在参与者列表中。此外,发起提案需要将资源接口调用所需要的参数全部包含在交易参数中发到区块链系统上。提案交易执行时,一般会嵌入检查条件来检查是否能够进行提案创建。通过检查后,调用参数将包含在提案数据中存放在区块链账本上,供后续使用。当提案产生之后,可以通过多种交互机制来通知所有参与者,如消息队列或客户端轮询等。

2)投票
提案创建之后,参与者通过各自的手段获取到提案信息,并根据自己对调用的认可情况来选择是否使用密钥签署投票交易,对提案发起同意票或反对票。区块链系统执行时会在账本上记录参与者的投票信息。

3)执行
当提案的同意票达到要求的阈值,参与者就可以使用密钥签署执行交易来使提案生效了。具体方法是从账本上读出资源调用参数,然后进行调用。

上述环节描述了基于提案投票的权限管理模型初始化和运作的一般机制,具体在区块链系统实现中,一般基于该模型做一定程度的简化或扩展。例如,可能会合并其中的投票和请求执行的步骤,以实现自动执行;还可以根据对提案执行顺序的要求引入一些顺序保障机制等。在该模型中,授权涉及初始化、提案、投票三个过程;鉴权则是通过执行提案时检查同意票是否达到阈值来进行。

【小结】
本文从权限体系的三个部分入手,根据权限体系受保护资源对区块链系统的影响层级范围,介绍了在区块链系统中不同范围的受保护资源,并阐述了一种用于授权和鉴权的权限管理模型——基于提案投票的权限管理模型。后续我们还会对基于提案投票的权限管理模型是如何对链级权限进行管理的进行详细介绍。

作者简介
刘明美
趣链科技基础平台部 区块链网络研究小组

参考文献
[1] 《区块链技术指南》

【权限专栏】谁允许你访问了?相关推荐

  1. 云服务器共享文件如何访问权限,怎么设置共享文件夹访问权限?

    对于办公室一族来说,共享文件夹是一件普通又正常的事情,为了对共享文件的使用进行有效的管理,防止越权访问共享文件的行为,尤其是防止随意修改共享文件.随意删除共享文件以及随意复制共享文件的行为,我们通常需 ...

  2. 【SQL Server配置管理器】提示:无法连接到 WMI 提供程序。您没有权限或者该服务器无法访问...

    [SQL Server配置管理器]提示:无法连接到 WMI 提供程序.您没有权限或者该服务器无法访问 //开始运行Cmd.exe进命令行 //进入MSsql2008安装目录cd /Program Fi ...

  3. 无法连接到WMI提供程序。你没有权限或者该服务器无访问

    已解决:无法连接到WMI提供程序.你没有权限或者该服务器无访问··· 我想用sql server做一个数据库的作业,主要是想用一下asp做个网页.首先需要安装sql server,刚开始以为是件很简单 ...

  4. 计算机共享访问权限 xp,上面就是xp访问win7共享要密码的解决方法

    系统之家WinXP系统访问win7共享要密码的解决方法.不知道大家有没有发现,有时候我们用xp访问win7共享要密码!这个问题有点大啊,有些朋友为了保险起见,特地将密码设置得很复杂,每次访问都要输入的 ...

  5. 计算机连共享盘被禁止用户,共享文件夹无法访问、设置文件夹访问权限、共享文件夹拒绝访问的解决方法...

    在开启共享文件的局域网中,经常出现共享文件无法访问.共享文件夹拒绝访问的问题,导致大家使用共享文件受到限制,影响工作的开展.这一方面是Windows操作系统自身的共享文件访问功能设计缺陷,另一方面也由 ...

  6. VMware Workstation 无法连接到虚拟机。请确保您有权限运行该程序、访问改程序使用的所有目录以及访问所有临时文件目录。未能将管道连接到虚拟机: 所有的管道范例都在使用中。

    现象: 虚拟机无端出现,VMware Workstation 无法连接到虚拟机.请确保您有权限运行该程序.访问改程序使用的所有目录以及访问所有临时文件目录.未能将管道连接到虚拟机: 所有的管道范例都在 ...

  7. OSS在private权限下的无参数访问(Nginx反向代理实现)

    本文主要介绍内容 oss默认权限策略是private,当修改到public-read或更高权限时会提示存在安全风险.如果需要访问oss资源需要在地址上添加签名内容,不利于地址的存储和使用.本文会介绍如 ...

  8. vsftpd类似wu-ftpd分类(Class)的配置-给不同网段的人以不同的上传权限-对虚拟用户进行访问IP限制...

    主要是用于实现:"给不同网段的人以不同的上传权限"和"对虚拟用户进行访问IP限制"这两个功能.实现方法就是利用tcp_warppers的setenv LOAD_ ...

  9. java变量访问权限_JAVA成员变量的访问权限

    成员变量的访问权限 我看到很多地方谈到关于Java里变量的访问权限问题. 很多地方认为对于默认修饰符的理解是这样的: 不写时默认为friendly 但就我所知Java里没有 friendly这一关键字 ...

最新文章

  1. Fedora相关(一)
  2. OpenShift 4 - 用Compliance Operator对OpenShift进行安全合规扫描
  3. python能熔断吗_在大型项目上,Python 是个烂语言吗?
  4. 智能优化算法:猫群优化算法-附代码
  5. BZOJ1604 洛谷2906:[USACO2008 OPEN]Cow Neighborhoods 奶牛的邻居——题解
  6. kubernetes视频教程笔记 (38)-高可用的K8S构建-系统初始化
  7. 微服务网关(gateway)概述 与 嵌入式 Zuul 反向代理
  8. Win7安装英文语言包(图文)
  9. Mac 怎么打开两个终端
  10. 威金VIKing病毒专杀 ,瑞星viking专杀
  11. win7升级win10之后硬盘分区变为动态无效硬盘解决办法
  12. html5图片并列排版,图片并列排版实现
  13. python-while-函数
  14. Codeforce 1296 C. Yet Another Walking Robot
  15. 【转】C++ 常用的STL查找函数方法
  16. 基于领域模型的微服务划分--实战案例解析
  17. 蚌埠市哪有学计算机编程的,蚌埠小孩学习编程
  18. RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详
  19. CSGO服务器租用如何选择合适的配置?CSGO服务器怎么选择?
  20. W7正在锁定计算机,win7输错密码锁定了怎么办 win7电脑被锁定的解锁方法

热门文章

  1. 下游任务(downstream task)含义
  2. Python新手入门百问百答
  3. dsp和通用计算机的区别,dsp芯片是什么 dsp芯片和通用微处理器有什么区别
  4. vue2创建简易时钟
  5. 传奇人物《周兴和》书连载26 猫与老鼠的游戏
  6. 白沙工业园新松机器人_郑州东强再传佳音,总投资约48亿,两大科技园区备案批复,开工时间已拟定!...
  7. 使用python调用minitab_学习Minitab第一天:如何将Minitab链接到Excel以获取快速解答...
  8. 用Word2003也能给文档加上稿纸(转)
  9. C语言-递归法将一个数字转换成字符串
  10. Python解决ValueError: array must not contain infs or NaNs