手把手教你使用EOS多重签名 保护你的资产

区块链技术巴比特2018-07-17 17:38:34  阅读 -评论 0

最近频繁曝出用户 EOS 被盗的事件,作为一个刚上线才 1 个多月的项目,在各种设施都不太齐全的情况下,这种新闻一旦流出,都会让人感到 FUD(Fear、Uncertainty、Doubt),不仅你会怕,我也怕,我会想 XX 钱包会不会偷偷把私钥上传到服务器了?如果是这样,我会不会被中间人攻击啊?它们的服务器会不会被拖库啊?我的剪切板不会也被某某软件监听了吧?万一我的私钥被「彩虹攻击」了怎么办?……简而言之,任何人都害怕自己的资产被盗,虽然这是小概率事件,但它一定会发生,要不然也不会有「墨菲定律」存在。

使用 Open Blockchain 系统,我们需要具备保护自己资产的能力,因为这个系统不具备挂失、冻结、回滚等功能。这篇文章的目的,就是在 BM 的团队做出基于 iPhone 的硬件钱包之前,教你如何在去中心化的世界里保护自己的财产。

相信你已经猜到了,提高钱包安全性的办法就是多重签名(Multiple Signatures),背后的逻辑也很简单,如果 1 个秘钥被破解的概率是 10^{-n}10−n,那么使用 2 个就变成了 10^{-2n}10−2n,以此类推。你可能会说,多签技术在 Bitcoin 诞生的时候——10年前就有了,这可不是 EOS 的专利和创新。确实如此,不过 EOS 在此基础之上做了一些优化,在我看来,这些优化足以让多重签名技术更为普及,乃至于在大范围内提升了账户的安全性。

手把手教你使用EOS多重签名  保护你的资产

EOS 对钱包的优化主要体现在两点:

引进了账户的概念,让原本抽象的事物更为具体,在过去,谁会把一个256位的数字(私钥)和一个账户对应起来啊?如果一个数字对应一个账户,那谁会意识到用多个数字(私钥)对同一个账户去签名呢?但有了账户的概念之后,一切变得非常自然和清晰。 当你创建一个账户的时候,它天然的就对应了两个秘钥,也就是说,这个体系一开始就给你灌输了:你至少要用两个秘钥来保护你的 EOS 及其他 Tokens。

在动手之前,我再来给你普及下 EOS 账户的设计逻辑,下表是我的 EOS 账户的设定:

手把手教你使用EOS多重签名  保护你的资产

上表中,除了权限(Permission)和秘钥(Keys)之外,还有两栏,一个是权重(Weight),另一个是域值(Threshold),这两个概念也至关重要,还是拿大家熟悉的转账来举个例子吧,按照上表的配置,如果你想转账给 vitalikoneos 这个账户,你需要将秘钥的权重相加,如果结果不小于域值,该笔交易才被认为是合法的,即 EOS7... 和 EOS8... 对应的私钥都得对该笔交易签名,它们的权重和才不小于域值 2 。同样的道理,如果你想修改 @Active 的秘钥,你需要用 EOS6... 和 EOS5... 所对应的秘钥同时对这个操作进行签名。可以看到我用了 4 对秘钥对来管理我的账户,这个安全性已经非常高了。当你创建一个账户时,你的账户默认包含两种权限:@owner 和 @active,其中 @owner主要用来管理其他权限的变更,例如修改 @active 对应的 Keys,新建或删除一个 @publish 权限等;而 @active 权限在创建之初主要用来执行转账等合约操作,即如果你要转出 EOS,你需要 @active 下的 Keys 对该笔交易签名。

好了,原理讲清楚了,下面我会手把手教你怎么操作。在 BM 的钱包没有发布之前,最安全的钱包当然是 github 上的「命令行钱包」了,这个钱包由两个组件组成:keosd和 cleos,其中 keosd 用来保管私钥,而 cleos 提供交互命令行,并在 keosd 和 nodeos(全节点) 之间建立通信,它们的关系如下:

手把手教你使用EOS多重签名  保护你的资产

准备工作

首先,你要安装 EOSIO 软件,推荐你使用 docker,下载 EOSIO docker 镜像,这个镜像是官方打包的,可以放心使用

$ docker pull eosio/eos-dev

完成后,运行 keosd:

sudo docker run -d --restart=unless-stopped --name keosd \ -v /your/eosio-wallet/path:/opt/eosio/bin/data-dir \ -v /your/eosio-wallet/path:/root/eosio-wallet \ -t eosio/eos /opt/eosio/bin/keosd \ --wallet-dir /opt/eosio/bin/data-dir \ --http-server-address=127.0.0.1:8900

上面的命令中,/your/eosio-wallet/path 需要你自行配置,keosd 管理的钱包文件会放在该路径下。

设置 cleos 的别名,你可以将 alias 命令加到 ~/.zshrc(macOS)或 ~/.bashrc(Linux) 中,接着执行 cleos get info 命令获取主网信息

$ alias cleos='sudo docker exec -i keosd /opt/eosio/bin/cleos \ --wallet-url http://127.0.0.1:8900 -u http://mainnet.eoscanada.com ' $ cleos get info { "chain_id":"aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906", ... }

确定 chain_id 的值,正确无误后,就可以开始“试验”了——一定要先在小额账号上操作,避免误操作导致的损失。

创建钱包、秘钥、账户

要实现多签,你至少需要 2 对秘钥,秘钥存在钱包里,所以这里最好也创建两个钱包,每个钱包管理一对秘钥,这样你的钱包就可以分开保管,避免一个钱包泄露后两个秘钥都丢失的情况。

$ cleos wallet create -n w1 Creating wallet: w1 Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5KRMedja6trXRT9Pi4z4gLN5YLE95mxQBuBKvy9UCkBaGWMNUEx" $ $ cleos wallet create -n w2 Creating wallet: w2 Save password to use in the future to unlock this wallet. Without password imported keys will not be retrievable. "PW5KT6RSfSm5cSBQ4jujBc8N8yXG6KwyphnYe8Rm1uMfFFUS5qkjF" $ $ ls /your/eosio-wallet/path w1.wallet w2.wallet

上面的命令为你创建了 2 个钱包 w1 和 w2,在 /your/eosio-wallet/path 路径下,你可以看到这两个钱包文件,注意: PW 开头的密码你一定要记录下来,和钱包分开保管,钱包解锁(unlock)的时候需要这个密码。

为每个钱包创建和导入秘钥对

$ cleos wallet create_key -n w1 Created new private key with a public key of: "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk" $ cleos wallet create_key -n w2 Created new private key with a public key of: "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS"

使用过老版本 EOSIO 的同学一定注意到了这个差异:新版本的 EOS 在创建秘钥的过程中把私钥隐藏了,且直接将私钥导入到了钱包,这一步优化将你犯错的可能性降至 0——让你没有机会复制私钥(如果某软件监听了你的剪切板,再把监听结果上传到他们的服务器,你的私钥就泄露了),干得漂亮!

现在秘钥和钱包都准备好了,还差账号,这里要分两种情况考虑:

没有账号的情况下,需要创建新账号 已有账号的情况 1. 创建新账号

如果你之前没有账号,就需要先创建账号,同时用 EOS 来抵押计算(CPU)和带宽(Bandwidth)资源、购买存储资源(RAM),然后再执行第 2 步(如果你已有账号,直接到第 2 步),先创建账号:

$ cleos system newaccount --stake-net '0.1 EOS' --stake-cpu '0.1 EOS' \ > --buy-ram-kbytes 4 friends_account vitalikoneos \ > EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS

上面的参数里,friends_account 是其他人的账号,你可以找个朋友帮你创建,这一步里,抵押了 0.2 个 EOS,同时还购买了 4K 的内存,最后两个参数分别是新账号名 vitalikoneos 和该账号对应的初始公钥,完成这一步后,你就可以根据第 2 步来修改权限了。

2. 已有账号

如果你已有账号,只需将现有账号转移到新创建的秘钥下即可,假设你的账号为 vitalikoneos ,下面的命令会设置该账号下的 @owner 秘钥,

$ cleos set account permission vitalikoneos owner '{ "keys": [{ "key": "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk", "weight": 1 }, { "key": "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS", "weight": 1 }], "threshold": 2 }' -p vitalikoneos@owner executed transaction: 4e309dc8c3e0535a4d9fec7eb575d... 208 bytes 1201 us warning: transaction executed locally, but may not be confirmed by the network yet # eosio <= eosio::updateauth {"account":"vitalikoneos","permission":"owner","parent":"","auth":{"threshold":2,"keys":[{"key":"EOS...

@owner 权限设置完后,同样的方法再设置下 @active 的权限,差异是修改 @active 权限时,需要指定 @owner 这个“拥有者”(倒数第 2 个参数),因为只有它才可以修改 @active :

$ cleos set account permission vitalikoneos active '{ "keys": [{ "key": "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk", "weight": 1 }, { "key": "EOS4z4VM5QH4NWAGf2BpYKhHxhqM7Dti2Ssmk6XXk1v7U1kjaVPgS", "weight": 1 }], "threshold": 2 }' owner -p vitalikoneos@owner executed transaction: 4e309dc8c3e0535a4d9fec7eb575d... 208 bytes 1201 us warning: transaction executed locally, but may not be confirmed by the network yet # eosio <= eosio::updateauth {"account":"vitalikoneos","permission":"active","parent":"owner","auth":{"threshold":2,"keys":[{"key":"EOS...

执行成功后,你可以通过 cleos get account vitalikoneos -j 命令查看修改是否生效,你还可以通过 https://scaneos.io/ 区块浏览器来查看指定账号的权限信息。

亲自试一试

修改好权限后,你应该会迫不及待的想试一下了,我们先把 2 个钱包都解锁,然后执行 transfer 操作,可以看到转账成功了:

$ cleos transfer vitalikoneos other_account "0.0001 EOS" 'memo' executed transaction: ba4e886fe9e49c9d3093585273341753e 144 bytes 1064 us warning: transaction executed locally, but may not be confirmed by the network yet # eosio.token <= eosio.token::transfer {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"} # vitalikoneos <= eosio.token::transfer {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"} # other_account <= eosio.token::transfer {"from":"vitalikoneos","to":"other_account","quantity":"0.0001 EOS","memo":"memo"}

接下来我们锁住任意一个钱包,例如 w1,然后再重复上面的转账操作

$ cleos wallet lock -n w1 $ cleos transfer vitalikoneos other_account '0.0001 EOS' 'memo' Error 3090003: provided keys, permissions, and delays do not satisfy declared authorizations Ensure that you have the related private keys inside your wallet and your wallet is unlocked. Error Details: transaction declares authority '{"actor":"vitalikoneos","permission":"active"}', but does not have signatures for it.

可以看到出错了,错误原因是没有满足转账权限,实验成功。至此,EOSIO 上的多重签名实操就结束了,理解了上述操作后,你就可以独立保管好自己的 EOS 了,同时再也不用担心钱包被贼惦记了,是不是既很赞又很简单的样子?

如果你觉得有帮助,别忘了将这篇文章转发给其他人,帮助更多人保护他们的数字资产。如有任何困惑,欢迎给我反馈,微信:weibo_fengyajie。

相关文章:

5行代码帮你梳理EOS.IO的脉络 EOS.IO中的插件布局 | 源码解读

参考:

developers.eos.io 5分钟学会注册EOS主网账户、投票和发币

声明:链世界登载此文仅出于分享区块链知识,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。此文如侵犯到您的合法权益,请联系我们100@7234.cn

    参与讨论 (0 人参与讨论)

    相关推荐

    区块链投资趋势报告:巨头入场布局行业趋于成熟

    区块链投资趋势报告:巨头入场布局行业趋于成熟

    来自:https://mp.weixin.qq.com/s?__biz=MzI4NzIxOTY1NA==&amp;mid=2650632639&amp;idx=1&amp;sn=e6d1c29731d992a80410aaee82ec3ea6&amp;chksm=f3d8db16c4af520097e4a64a71b1d4743ac326b9f027

    重新发明货币

    重新发明货币

    一、货币的演化过程 先简单回顾一下人类货币的演化过程,大概有以下阶段: a. 1.0版本:自然货币(贝壳、牲口、金银……) 这个阶段,货币基于一般等价物的稀有性或者实用性,货币不可能出现人为操纵的超发。 b. 2.0版本:早期纸币、银票到本位纸币 当贸易量越来越大,实物货币太不方便了,而且大家发现其实并不在意货币本身有什么价值,在意的只是这么多的货币能不能交换到足够的物品,于是纸币这种信用货

    从比特币交易看欧洲央行虚拟货币分类

    从比特币交易看欧洲央行虚拟货币分类

      互联网对传统社会的颠覆从未停止,在其完成对信息流、商流、物流、资金流的初步改造之后,或将以虚拟货币的形式打破现有货币体系   4月18日,在中国极客张沈鹏创办的比特币交易平台(42BTC.com)上,比特币对人民币的平均交易价为576元。当天,该平台完成了100个比特币的交易量。仅仅过去一周,4月25日上午,比特币对人民币的平均交易价已达到906元。据42BTC网站统计:在过去的32个月

    欧洲央行-比特币报告

    3.1 比特币 3.1.1 基本特征          比特币可能是最成功的,也可能是最有争议的虚拟货币方案,由日本程序员中本聪(译者注:事实上,中本聪是不是日本人,甚至是不是单个人无从考证)在2009年设计并实现。该计划基于一个类似于BitTorrent的P2P网络。BitTorrent是互联网上著名的共享文件协议,应用在电影,游戏和音乐领域。比特币在全球层面上运作,可用于各类货币交易(虚

    彻底玩转比特币地址和私匙

    彻底玩转比特币地址和私匙

    比特币地址和私匙是所有比特币初学者面对的一大难题,再加上那一串超长的字符串,让人更是摸不到头脑。 现在编者以问答的形式,带你一步步的揭开比特币地址和私匙的面纱。 还不知道什么是比特币地址和私匙的同学请点这里 问题一、比特币钱包由什么组成? 答 我们知道,比特币地址和私匙组成了比特币钱包,而私匙则决定了比特币地址上比特币的归属。 地址和私匙 问题二、如果只记得私匙我们还能还原比特币地址么? 答

    用GO语言实现比特币算法

    用GO语言实现比特币算法

    本节的这个例子展示一点点高精度数学包math/big、一点点散列包hash、一点点加密包crypto,还有一点点测试包testing的知识。这里不介绍bitcoin协议和算法——尽管它们很有趣,而是试图指出,Go对多种操作系统的支持,是实现这种跨平台应用的理想语言。 位钱(bitcoin)是一种使用加密手段制作的分布式电子货币。它最初于1998年由Wei Dai提出,并由中本聪(Satoshi

    详解比特币的找零机制

    详解比特币的找零机制

    比特币的找零机制一直让人有些迷惑,明明只向一个地址发送了比特币为什么 blockchain 上面的显示的有时是1个地址对多个地址,有时是多个地址对1个地址,有时又显示多个地址对多个地址? 为什么比特币资深用户要提醒大家当比特币钱包交易100次以上时再次交易后要重新备份钱包,恢复以前的钱包备份有可能会遭遇损失? 是的,这一切都是因为比特币的找零(Change)机制。本文参考 Bitcoin的维

    玩转比特币客户端之一:C盘转移和加速下载

    玩转比特币客户端之一:C盘转移和加速下载

    C盘空间不足?交易数据下载速度太慢?别着急,乐享比特币教你轻松玩转比特币官方客户端。 所有新人开始接触比特币时做的第一件事情大多数是安装比特币的官方客户端。 安全起见大家最好直接访问官方发布渠道sourceforge的地址进行下载:http://sourceforge.net/projects/bitcoin/files/Bitcoin/ 该网页列出了各版本的官方比特币客户端,目前

    麦妖榜
    更新日期 2019-03-19
    排名用户贡献值
    1BitettFan23752
    2等待的宿命23696
    3六叶树20309
    4天下无双16192
    5区块大康15902
    6lizhen00214889
    7让时间淡忘14246
    8linjm122712255
    9冷风大q11188
    10momo11174
    返回顶部 ↑