EOS技术白皮书学习笔记(二)- 账户系统
本文由币乎社区(bihu.com)内容支持计划赞助
在看本文前,最好先了解区块链相关概念:比特币。以太坊,钱包,智能合约,秘钥等
为了更好的理解,先看看一个普通账户系统需要哪些功能
假设我刚进入一个网站,我首先要能注册一个帐号,然后能用帐号登录,登录成功后能够在一定时间内保持已登录状态,同时我还有可能要对帐号的一些基本信息进行修改。另外出于之前密码泄露事件的影响,我不希望我的密码是被明文保存,希望我的帐号是安全的。
基于以上一个用户使用的流程来说,一个帐号系统功能可以进行如下划分:
用户注册
用户登录
用户登录后身份校验
用户基本信息修改
用户基本信息获取
用户安全中心
从上述功能上考虑,可以进行如下划分:
用户基本信息服务,提供用户的基本信息的获取和修改,
用户的注册和登录服务,提供用户的注册、登录授权颁发用户的登录标识
用户身份校验服务,对用户的登录标识进行校验
用户安全中心服务,提供用户的重要信息的修改如登录的邮箱手机号,密码等。用户在进行这些敏感信息的修改是需要进行身份认证,来保证用户的安全性。
简单来说一个账户系统就是为用户设计的,需要考虑用户在应用上的各方面的需求。
下面我们来看看EOS.IO为用户设计了怎样的账户系统。
技术白皮书上关于账户系统,列举了以下几点
4.帐户
消息和消息处理程序
基于角色的权限管理
命名权限级别
命名消息处理程序组
权限映射
权限评估
默认权限组
权限的并行评估
有强制延迟的消息
密钥被盗后的恢复
虽然还不知道以上列出的概念具体讲的是什么,但单从字面上就可以看出,它有消息、权限、安全等功能。相比于比特币,以太坊的只有私钥和地址概念的账户系统,可以说是非常先进了。他们的区别有点像没有装图形界面系统的电脑和装了图形界面系统(例如:Windows,macos)的电脑的区别。
另外,EOS可以使用一个人类可以阅读的2-32个字符来创建账户,而比特币和以太坊的账户地址是一串看不懂意思的字符串。
以及,EOS的账户支持域的概念,你可以创建一个叫jack的账号,表示为@Jack,接着你可以再创建一个叫做@shuai.jack的账户,并且这个账户只能由你创建。
从以上几点可以看出,EOS在可用性上比比特币、以太坊好太多。
在现实生活中,每个人都不是独立的个体,人与人的沟通是生活中不可或缺的部分。在EOS系统中也是一样,账户与账户之间需要通信,而"消息"就是他们之间通信用的语言。
EOS的消息处理机制
每个账户都可以发送结构化消息到其他账户
账户可以定义消息被接收后的处理脚本(程序)
每个账户有自己独有的数据库,只能自己的消息处理程序访问
账户的消息处理程序可以想其他账户发送消息
消息和自动的消息处理程序的组合是EOS定义智能合约的方式
当用户使用一个应用(基于EOS)的时候,会有各种各样的操作,而有些操作比较私密,不能随便操作,需要密码等权限。就好比你用“登录密码”可以登录支付宝,但是需要“支付密码”才能支付。所以对账户进行权限管理是很有必要的,EOS的权限管理是基于角色的。
基于角色的权限管理
1)判断一条消息或消息程序或事务是否被授权,最简单的形式是这条消息是否包含一个签名,并且知道这个消息是谁的
2)为了更细和更高级的控制权限,EOS提供了一个声明式权限管理系统,把个人和群组绑定在一起。这怎么理解呢?一般来说,大范围的权限可以控制群组(角色),细的权限可以控制个人,而个人又可以在群组(角色)里,还可以是多个群组,这样就可以做到权限的随意控制。
3)认证和权限管理必须标准化,并与应用程序的业务逻辑分开。这使得开发工具能够以通用的方式管理权限,并为性能优化提供重要的机会。
4)EOS还提供多账户的控制,多用户控制是提升安全性的最重要因素,如果能正确使用,可以极大地消除黑客盗窃的风险(把钱放到多个钱包比放在一个钱包安全吧)。
5)EOS还允许当前账户和其他账户的各个权限进行组合,并发送到另外的账户。这就类似支付宝的“登录密码”和“支付密码“。
想要做到以上几条,EOS是怎么做的,以下是它的权限管理方案:
1)命名的权限级别
EOS允许不同的权限设定不同的名字,当然它提供了两个默认的级别,它们分别是最高级的Owner,其次是Active。其他的权限级别的名字可以自己定义了,例如,你需要定义两个权限级别,一个给你老婆用,一个给你孩子用,你就可以分别取名为老婆大人、小可爱。
2)命名消息处理程序组
这个是干嘛用的呢?每个账户将自己处理消息的程序按照@accountname.groupa.subgroupb.MessageType这样的格式命名后,可以给其他账户使用。在这样的模式下,可以将创建和取消订单的交易合约与存取款的交易合约分离。这种交易合约的分组对用户使用交易合约提供了较大便利。
# 权限映射:命名权限级别和命名的消息处理群组之间是可以做映射(关联)的。
# 权限评估:怎么判断权限的大小?EOS是按照从小到大的权限顺序进行判断的。例如:当 @alice 以 "Action" 类型发送一条消息给 @bob 时,首先会检查 @alice 是否为 @bob.groupa.subgroup.Action 定义过权限映射。 如果什么都没有找到,紧接着检查 @bob.groupa.subgroup 映射,然后是 @bob.groupa,最后 @bob 将被检查。 如果都没有找到,那么假定映射为命名的权限群组 @alice.active。
# 默认权限组:最高级的权限是“owner”,这个权限可以做任何事情,但是一般不用做具体工作,一般用来做冷备份,比如说Active权限丢了,可以用“owner"权限来恢复。在”owner“之下就是”active"了,它是可以做除了修改“owner”以外的所有事情,一般业务都是由active权限来完成。其他的所有权限组也都是从“active"权限派生出来的。
# 权限的并行评估:权限评估是个”只读“的过程。所有事物的所有秘钥和权限评估可以并行执行。
强制延迟的消息
时间是安全的关键组成部分。怎么理解呢?
一条消息发出去,可能会受到很多因素的干扰而不能被及时接收确认,这时的你可能想取消发送消息。EOS允许发送有时间延时的消息,在特定时间范围内可以取消消息。这种延迟消息具体能延时多长时间,还得看具体的应用场景。比如说,我们买一杯咖啡可以在几秒钟之内付完钱,而买房子可能需要72小时清算周期。具体取决于应用场景以及应用开发者怎么设定,用户怎么操作的。
恢复被盗窃的秘钥
在币圈我们常常看到新闻里有报道某某某秘钥被盗,损失多少多少这样的事件。EOS为用户提供了一种在秘钥被盗时恢复其账户控制的方法。包括以下4点:
1、账户所有者可以使用30天内的任意Owner权限的密钥,注意这个密钥可能已经被黑客换过了,但是在这个场景下这个密钥还是可以使用的;
2、使用任意30天内的Owner密钥和指定的合作伙伴才能恢复密钥。
3、这里面合作伙伴不能在没有Owner协助的基础上恢复密钥。
4、合作伙伴也不会参与任何日常交易,这样可以大大降低法律上的风险。
配合学习笔记系列文章一起读会更好理解哦
本文首发于微信公众号:lin-mingtan 欢迎关注交流 ^.^