上期系列教程第一章,我们已经详细介绍关于如何选择并使用 EOS 区块浏览器去查看账户信息、转账信息、权限阈值等操作,今天我们来介绍一下 EOS 复杂的账户体系。
EOS 账户
对于我们普通用户而言, EOS 和 BTC、ETH 最大的不同点就在于它的账户体系。
我们先来温习一下 BTC 和 ETH 的账户体系是怎样的? 首先它们都是通过真随机数生成私钥, 私钥再通过椭圆曲线加密, 生成公钥, 进而推导出地址。
比特币的地址示例: 1NmiU6rTBhTojDjoMhUKshG2Dp4LF94e31
以太坊的地址示例: 0x4FAE9Aa424B13E010b7851101DACd6DaeD29e97f
我们在进行转账的时候, 只需要向这个地址发起交易就好了。但是这个地址看上去很难辨认和记忆, 很多用户在转账的时候都容易出现转错地址的情况。
其实 EOS 在生成公钥的策略上, 和 BTC 、ETH 没什么不同, 但是 EOS 的收款地址并不是 “晦涩难懂” 的哈希值字符串, 而是可读性非常高的由 “a-z”/“1-5” 组成的 12 位的字符串, 当然也可以是少于 12 位的靓号 (只要你肯花钱)。
EOS 的账户号示例: imtokensimon
值得注意的是, EOS 账号和 EOS 公钥是 N * N 的关系, 及 一个 EOS 账户可以对应多把公钥, 多个 EOS 账户也可以绑定一把公钥。
权限分配
1. 天生多签
EOS 钱包天生就是多签钱包, 那么何为多签?
多签即多重签名, 我们在使用区块链进行授权操作时, 都是通过私钥进行签名的, 而在比特币网络或者以太坊网络中, 通常来说, 我们都是通过一把私钥进行签名授权 (多签钱包除外), 比如我使用 imToken 生成一个 BTC 钱包, 或者 Ethereum 钱包, 分别可以通过一把私钥进行管理, 并且在授权转账操作时, 是通过一把私钥进行签名授权。这样的钱包, 我们成为单签钱包。
而在 EOS 系统中, 每一个账户都有两个以上的私钥与之对应, 但是多把私钥, 可以是相同的。比如, 一个 EOS 账号为 imtokensimon, 这个账户的 owner 私钥是 123, active 的私钥可以设定为 123, 也可以是 456。
如果你之前有做过 EOS 主网映射的话, 就会发现 EOS 系统给到你映射的私钥, 是两把一样的私钥, 也就是说 Owner 私钥和 Active 私钥是一样的。但是当你使用 imToken 2.0 创建一个 EOS 钱包的时候, Owner 私钥和 Active 的私钥是不一样的, 这样相对来说安全一些。同时这些私钥是掌握在你自己手中的, imToken 无法对你私钥的权限进行干涉。
那么 Owner 权限的私钥, 和 Active 权限的私钥, 有什么不同呢?
2. 私钥权限等级
首先 EOS 的账户构成借鉴了 Steamit 和 Bitshare 的结构: 账户名 + owner 权限 + active 权限 (+ Family + Friend… 权限), 使得 EOS 账户系统变的更加灵活。账户名相当于比特币、以太坊的地址, 用来接收转账或者是在区块链浏览器上查询相关交易记录, 这点在上边的内容也提到了。
Owner 私钥代表着一个 EOS 账户的最高权限, 它可以用来分配并重置 Active 私钥的权限, 所以一般来说, Owner 私钥适合冷存储, 关于 EOS 的钱包安全策略, 我会着重在下一节着重讲解。
Active 私钥可以做除了修改 Owner 以外所有的事, 基本来说, 用户的转账授权等操作, 都是通过 Active 私钥来完成的。
所以综上所述, 如果你的账号私钥权限仅仅是 Active 级别的, 你也能做转账交易等基本操作, 并且难以感知。那么这里给我们带来的问题就是, 如果该账号的 Owner 级别的私钥受控于一个恶意的第三方, 而你手里的私钥是 Active 级别的, 那么他随时可以重置你的 Active 私钥, 导致你的资产成为了他人的 “嫁衣”。
3. 阈值和权重
在创建 EOS 钱包的时候, 不光可以设置哪个公钥是 Owner 权限, 哪个公钥是 Active 权限, 还可以分配每个权限级别的阈值, 以及每个公钥所拥有的权重。
在开启枯燥的学术性讲解之前, 我们先来假设一个场景: 小明和小红结婚后, 买了一个保险柜, 用来存储夫妻二人的共同财产。这个保险柜有两个钥匙孔, 并配有两把钥匙, 只有这两把钥匙同时插入的时候, 这个保险柜才能打开。
在这个场景中, 一个保险柜设置了两个钥匙孔, 可以理解为这个保险柜的阈值为 2, 而配备了两把钥匙, 则可以理解为, 每一把钥匙的权重是 1。
简单来说, 阈值是你可以动用账户所需的最小权限, 而权重则代表你该私钥所拥有的权限级别。如果当前 active 权限对应的阈值为 2, 你有一把 Active 级别的 A 私钥权重为 1, 另一把 Active 级别的 B 私钥权重为 2, 那么如果你想对该账户进行转账的话, 只动用 A 私钥是不够的, 必须使用 A + B = 3 > 2 的权重, 才可以进行转账。或者直接使用 B 私钥 2 = 2 权重的私钥, 也可以直接进行交易转账。
用户使用 imToken 生成的 owner 权限私钥和 active 权限私钥的阈值权重都为 1, 也就是说, 只需要一把私钥, 就可以对相应的权限进行操作。
4. Account 控制 Account
其实在 EOS 系统中, 一个账户的 Action 不光可以通过自己的私钥进行授权, 也可以通过其他账户进行授权, 当然是在其他账号有权限的前提下。
EOS 钱包安全策略
1. 注意两点
围绕着上述 EOS 权限, 那么 EOS 的钱包安全策略上, 也会在以太坊和比特币的安全策略上增加一些内容, 在防止私钥泄露的前提下, 还需要注意以下两点:
(1) 选择一个可信赖的钱包服务商, 以防止给到你的私钥仅仅是 Active 权限的私钥
(2) 选择一个可信赖的朋友帮助你生成钱包, 以免在他帮你生成钱包的时候, 将你给到的私钥设为 Active 权限, 或插入他自己的私钥。
2. 为什么? 怎么做?
1)选择一个可信赖的钱包服务商
之前有一些钱包在免费帮助用户创建 EOS 账户的时候,给到用户的是 Active 的私钥, 其实用户在本身没有验证查询所拥有的私钥权限的情况下, 是不知道自己是 Active 权限还是 Owner 权限的, 所获得的私钥, 也能够进行正常的转账操作, 但如果这样做的话, 和中心化钱包没什么区别。而且当 EOS 钱包出现安全问题的时候, 还 “美其名曰” 可以帮助用户重置私钥, 这点还是希望普通用户能够警觉。
针对这一点, 首先用户自己本身要选择知名度高, 可信赖的钱包服务。imToken 在帮助用户创建 EOS 钱包的时候, 会通过一套助记词, 帮助用户生成两把不同权限的私钥, 一把是 Owner, 一把是 Active , 这两把私钥都是用户自己管理的, 用户可以通过第一章提到的区块链浏览器来查询自己的公钥权限。
另外, 用户可以使用冷存储的方式, 存储 Owner 私钥, 这样如果你的 Active 私钥泄露了, 可以使用 Owner 私钥重置你的 Active 私钥, 但需要注意的是, 如果你的 Active 私钥泄露了, 黑客也能够转移你的资产。
2)选择可信任的人帮助你创建钱包
因为创建 EOS 账户需要消耗资源, 这点不像比特币和以太坊, 可以非常廉价的生成一个地址。而消耗资源, 就要支付 EOS, 所以当你创建一个新账户的时候, 需要有人帮助你去支付这笔费用。关于 EOS 资源的相关内容, 我会在下一章进行详细的讲解
简单来说, 使用 imToken 创建 EOS 账户的过程是, 通过用户设备本地生成两个公钥 (该过程完全是本机行为, 并不通过网络或者服务器), 一个作为 Owner 公钥, 一个作为 Active 公钥。将这两个公钥给到你值得信任的朋友, 他会帮助你将这两个公钥绑定一个账号, 支付费用, 给到你这个账号一定的资源, 并写入 EOS 网络中。
那么这里有一个问题就是, 如果你将生成的公钥给到一个不可信任的第三方, 让他帮你创建一个账号, 那么他也可以帮你成功创建该账号, 只是他有可能把你给他的公钥设为 Active 权限, 或插入自己的私钥, 并设置为 Owner 或 Active 权限。因为之前的内容也提到了, 一个账户可以对应多把公钥。进而他有重置你私钥, 并操作你账户的权限。
针对于这样的问题, imToken 在生成 EOS 钱包的时候做了特殊处理, 在创建完 EOS 账户之后, 会对该账户下所有公钥进行对比校验。但是市面上有些钱包没有添加校验功能, 我们建议用户在创建完 EOS 钱包之后, 前往区块链浏览器上, 查看当前账户下所有公钥的权限级别, 一旦发现可疑的公钥挂在该账户下, 或者该账户的 Owner 权限并不掌握在自己手中, 请立即停止使用该账号。
3)安全监测网站
另外除了我们使用 eospark.com 查看账户下的公钥是否都受自己控制, 也可以登录 https://peckshield.com/eosrescuer 查看自己的 EOS 公钥是否是通过弱助记词生成的高危账户, 仅供参考。
(未完待续…)