TMT观察网_独特视角观察TMT行业

手把手教你使用EOS多重簽名保護你的資產區塊鏈

巴比特資訊 2018-07-18 14:05
分享到:
導讀

使用OpenBlockchain系統,我們需要具備保護自己資產的能力,因為這個系統不具備掛失、凍結、回滾等功能。這篇文章的目的,就是在BM的團隊做出基于iPhone的硬件錢包之前,教你如何在去中心化的世界里保護自己的財產。

最近頻繁曝出用戶 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 w1Creating wallet: w1Save password to use in the future to unlock this wallet.Without password imported keys will not be retrievable."PW5KRMedja6trXRT9Pi4z4gLN5YLE95mxQBuBKvy9UCkBaGWMNUEx"$$ cleos wallet create -n w2Creating wallet: w2Save password to use in the future to unlock this wallet.Without password imported keys will not be retrievable."PW5KT6RSfSm5cSBQ4jujBc8N8yXG6KwyphnYe8Rm1uMfFFUS5qkjF"$$ ls /your/eosio-wallet/pathw1.wallet        w2.wallet

上面的命令為你創建了 2 個錢包 w1 和 w2,在 /your/eosio-wallet/path 路徑下,你可以看到這兩個錢包文件,注意: PW 開頭的密碼你一定要記錄下來,和錢包分開保管,錢包解鎖(unlock)的時候需要這個密碼。

為每個錢包創建和導入秘鑰對

$ cleos wallet create_key -n w1Created new private key with a public key of: "EOS7bePjtecDvVwRj937B3aaaXyph1vGdAkgu5jibYJ1vfWNaCUWk"$ cleos wallet create_key -n w2Created 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@ownerexecuted transaction: 4e309dc8c3e0535a4d9fec7eb575d...  208 bytes  1201 uswarning: 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@ownerexecuted transaction: 4e309dc8c3e0535a4d9fec7eb575d...  208 bytes  1201 uswarning: 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 uswarning: 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 authorizationsEnsure 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 了,同時再也不用擔心錢包被賊惦記了,是不是既很贊又很簡單的樣子?

參考:

developers.eos.io5分鐘學會注冊EOS主網賬戶、投票和發幣

EOS 錢包 cleos 創建 賬戶
分享到:

1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。


專題報道

主站蜘蛛池模板: 生物颗粒燃烧机-生物质燃烧机-热风炉-生物颗粒蒸汽发生器-丽水市久凯能源设备有限公司 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 高中学习网-高考生信息学习必备平台| 环讯传媒,永康网络公司,永康网站建设,永康小程序开发制作,永康网站制作,武义网页设计,金华地区网站SEO优化推广 - 永康市环讯电子商务有限公司 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 上海宿田自动化设备有限公司-双面/平面/单面贴标机 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 精密模具加工制造 - 富东懿 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 磁力反应釜,高压釜,实验室反应釜,高温高压反应釜-威海自控反应釜有限公司 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 全自动实验室洗瓶机,移液管|培养皿|进样瓶清洗机,清洗剂-广州摩特伟希尔机械设备有限责任公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 贵州自考_贵州自学考试网 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 天津云仓-天津仓储物流-天津云仓一件代发-顺东云仓 | 新疆系统集成_新疆系统集成公司_系统集成项目-新疆利成科技 | 台湾阳明固态继电器-奥托尼克斯光电传感器-接近开关-温控器-光纤传感器-编码器一级代理商江苏用之宜电气 | 陶瓷砂磨机,盘式砂磨机,棒销式砂磨机-无锡市少宏粉体科技有限公司 | 上海防爆真空干燥箱-上海防爆冷库-上海防爆冷柜?-上海浦下防爆设备厂家? | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 液氮罐(生物液氮罐)百科-无锡爱思科 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 钢格板|镀锌钢格板|热镀锌钢格板|格栅板|钢格板|钢格栅板|热浸锌钢格板|平台钢格板|镀锌钢格栅板|热镀锌钢格栅板|平台钢格栅板|不锈钢钢格栅板 - 专业钢格板厂家 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 岩石钻裂机-液压凿岩机-劈裂机-挖改钻_湖南烈岩科技有限公司 | 间苯二酚,间苯二酚厂家-淄博双和化工 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 纸张环压仪-纸张平滑度仪-杭州纸邦自动化技术有限公司 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 市政路灯_厂家-淄博信达电力科技有限公司 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 混合气体腐蚀试验箱_盐雾/硫化氢/气体腐蚀试验箱厂家-北京中科博达 |