查看原文
其他

保护你的区块链财产安全--区块链技术重大挑战(四)

2017-07-31 老董 老董区块链干货铺

先说废话

Frank和老董已经在全速准备精品智能合约编程教程啦!相信通过这么多期的内容,大家对干货铺的技术水平也有所了解了,希望大家觉得老董不坑。为严格保证课程质量,我们只限50-100名学员参与第一期,一共七节,每节至少一小时的视频课程时间,希望通过大家的反馈快速迭代课程内容,逐步扩大规模。课程大概上线的时间在八月中旬到下旬。


很多朋友在问我课程价格的问题,如果真心想参与课程的朋友,可以给我发个信息,说说对课程的建议和期望,顺便说明下自己能接受的价格,我会优先给表明意愿的朋友留名额。



另外老董现在面向广大粉丝招收文字和格式编辑一名,主要负责文字校对修改和文章排版,待遇面议。


干货分割线

财产安全,我们在保护什么?

比特币等等电子货币通过区块链技术,实现了货币的区块化。所谓区块化或者“去中心化”就是:每个人都可以持有有一个或者多个自己的“账户”。比特币用户可以不依赖一个链下信任体,实现互相之间的金钱转账。每个账户都是一个“公私钥对”(如果不明白公私钥系统的可以看一下错过一个亿?一年30倍回报的区块链,到底是什么?的内容)。


为了形象起见,我给大家列出一个公私钥对(基于椭圆曲线加密的公私钥):


公钥:

0xDA63A67735d5e26B89c4a848C449bFa247DE6bA4


私钥:

0x15865102422c2bdea53f8a57b11a6f93afcd3df98322ee0583129aaf8c091af3


大家觉得“公钥”“私钥” “椭圆加密”说的很高大上,很多时候都是一些做产品的用来糊弄人的哈。看看上面这堆东西,其实就是两串数字。虽然背后的数学是非常优美的,但对于普通人来说,私钥其实真的就可以认为是“一串超级长的密码”,公钥也就是你的公开的区块链账户账号。简单的来讲,在区块链货币当中,谁控制了私钥,谁就掌握了这个私钥所对应的账户中的所有资产(不光是代币)。


不必多言,私钥的安全是极为重要的。在区块链货币的场景下,谁获得了你的私钥就相当于获得了你的所有货币。不仅如此,在智能合约快速发展的当下,获得了你的私钥更是相当于获得了你的“身份”。让我来给大家画个饼先:在不久的将来,你的医疗记录,房产记录,甚至公司决策投票权都会和你的私钥绑定,饼画再大一点的话,你的私钥就在区块链上定义了“你”这个人。如果获得了你的私钥你的关键信息和权利都会受到严重侵犯。这就是为什么老董说私钥控制着你的资产而不是单纯的钱。




如何保护私钥安全


方法一:私钥加密

靠谱度:🌟🌟



这个方法是公私钥存储的一种通行方法,简单的来说就是给你的私钥再加一层密码(密码上面再加密码),防止私钥在你的计算机上裸奔。为什么要这么做呢?是因为为了保证私钥的安全性,私钥确实需要那么长的一串数字,让咱们自己记住那串数字,真的是太难了。但是就这么裸体放在电脑上,随便任意一个入侵电脑的人,不费吹灰之力就可以拿到你的私钥,这显然不安全。所以呢?就用你自己平时能记得住的密码(比如“woaixiaohua1997”),来对私钥进行一次加密。每次要用你的私钥签名的时候呢,输入密码暂时对你的私钥解密,来进行数字签名。这样的保护方式,几乎被所有的“钱包”软件所采用。比如Metamask,Mist,myetherwallet等等等等(见下图)。



然而遗憾的是,这个方法是极其不靠谱的。给大家举一个今天刚刚发生的例子:


虽然私钥被加密了,但是存放着私钥的电脑或者手机仍然是联网的。在老董这个网络安全从业人士的眼中,任何联网设备都会被黑。讲的形象一点,黑客可以开发一个病毒,这个病毒如下图所示:

当你做转账签名的时候,就在你输入保护你私钥的密码的一瞬间,私钥的明文是短暂的出现在你的内存中的,这个暗中观察的病毒,就可以迅速“截获”这一瞬间的私钥明文(对于metamask这类的钱包来说,一次解锁可以用很久的更容易截获)。或者更简单的就是录制你的键盘操作,从中分析出你的解锁密码。就这样你的私钥就被这个暗中观察的小猫偷走,然后就没有然后了。


综上所述,老董强烈不推荐用简单的钱包软件的方式,去储存大量的区块链资产。



方法二:多签名钱包

靠谱度:🌟🌟🌟


所谓多签名钱包,其实就是一类智能合约程序的总称。简单来讲,相当于你的保险柜有了多把钥匙,需要多把私钥同时,或者多数(比如三把中的两把)插入锁子中,才能完全解锁这个钱包中的资产。每一把私钥当然也是加密存储的。正确使用多签名钱包的方法如下:每个私钥产生在不同的电脑上,这几个电脑完全独立,属于不同人(比如你和你夫人)。这几个完全独立(假设)的电脑同时被黑的可能性虽然并不是没有,但随着签名数的增多,安全性也成指数增涨。


然而这个钱包最蛋疼的地方就在于:非常不方便啊(当然各位妹子可以有监管自己老公的花销了ORZ)。虽然有各种灵活的方式去实现比如单个钥匙每日取现上限等等功能,但仍然有非常多的不方便的,比如对ERC20支持不好(不能参加ICO“赚大钱”)。另外一点是,在智能合约平台上实现的多签名钱包,免费开源的多签名钱包,搞不好还有漏洞(3200万美元被盗,多个ICO被洗劫一空,Parity多签名钱包出现安全漏洞),一个不小心,又是变得一贫如洗。


虽然理论上美好,但是综合可用性,老董只推荐在多签名钱包中储存中等数目的资产,并且各个私钥的管理之间,尽量做到独立。





方法三:硬件冷钱包

靠谱度:🌟🌟🌟🌟

所谓硬件冷钱包,意思就是将私钥彻底和网络隔离。给大家一个形象的例子:


钱包的私钥呢,就完全存储在那个黑色像U盘一样的东西里,完全不存在在电脑上面。这个黑色U盘类似物,就是硬件钱包,硬件钱包是一个逻辑非常简单的“电脑”,但由于其逻辑极其简单,所以黑客也就无法从网络中入侵。


硬件钱包的使用方法极其简单方便:当需要签名转账消息的时候,电脑会要求用户在电脑上输入硬件钱包里面加密储存的私钥的解锁密码,并且将尚未签名的转账信息连同这个密码发给硬件钱包。收到密码和转账消息的硬件钱包尝试用密码解锁私钥,如果解锁成功,则向用户确认转账是否准确(防止签名虚假的转账消息),用户再三确认之后,签署转账消息并将消息传回电脑,电脑将消息广播到区块链网络中。


整个过程中,私钥的明文从来没有暴露在电脑中,所以即使电脑被黑客黑打成了筛子,也无法有效盗取用户的私钥。即使冷钱包不慎丢失,其内私钥仍然有密码保护,暂时来看危险性并不是特别高。


在冷钱包的使用过程中,唯一需要重点保护的是“恢复词组”。所谓恢复词组是一组12到15个单词,在初次使用的时候,冷钱包会向用户显示一次这些词组,利用这组词组来生成内部的私钥。如果这组词组被盗,相当于私钥被盗。保护这组词组的正确方法应该是用手将这组词组抄写在一张纸上,然后存入银行的私人保险柜中去。


冷钱包是目前介绍的三种方法中,最为安全同时也很方便的资金储存方法。老董推荐对大量资金采用这种方式保存,但请一定注意妥当保存恢复词组。





重大挑战在哪里?


哎?为什么没有五星的方法?感觉硬件冷钱包就很好的解决了私钥安全性的问题了嘛!说好的“重大挑战”呢?老董在忽悠?


不不不,重大挑战这就来。


不知道大家注意到没有,之前的讨论的安全性话题都是在关注“如何防黑客远程盗取私钥”这个问题。那么老董现在来隆重介绍一个什么密码学都无法解决的问题:


“板砖难题”


要了解什么是板砖难题,让老董来讲两个身价10亿的富豪被打劫的寓言故事。


首先老董要提醒大家的是,抢劫是触犯刑法的,是重罪,老董这里只是为了讨论技术举两个假设的例子。


先说富婆小花,她的10亿身家是传统货币,全部存在银行里面,平时花钱只要刷一张上限100万的信用卡就好了。如果有人想要绑票敲诈小花,你仔细想想看,这其实是一个非常高难度的事情。这事儿的难点不在于把小花绑起来关在小黑屋里面,绑起来容易,关键在于怎么拿到钱。香港电影看多了大家都知道,如果这事儿要办成,就一定要发封勒索信,警察大概率会知道,然后劫匪就需要各种技术活都上场了:各种变换现金交易地点,躲避警察追踪,躲避监控摄像头,如何运输大量现钞,如何销赃,甚至准备武器装备,随时准备枪战搏命。简单一句话,这事儿,成本超高,风险超大。



再说富豪老张,他的10亿身家是ETH货币,听从了老董的建议,他将这些ETH都储存在了冷钱包,有一部分锁在了银行的金库当中,但由于老张平时做生意,需要极大的流动性,所以身上随身带着100万价值的冷钱包。我们突然发现,打劫老张比起打劫小花,要容易的太多了。你只需要一块工地上捡来的板砖,不停的敲老张的头,直到老张为了保命交出自己随身携带冷钱包的解锁密码。不需要联系银行,不需要准备运钞车,不需要发勒索信,更不需要准备像香港警匪片一样准备大量枪支弹药,不要998,不要698,只需要一块板砖啊朋友们!!


相信大家看完这两个例子,就明白了什么是“板砖难题”:区块链资产,由于其天生的去中心化属性,维护财产安全的重担也从中心化的实体(比如有厚重金库大门的银行),转移到了财产的所有者手上(你)。


那么如果大家把私钥都放在了银行的保险箱呢?那么你每次取钱转账难道都要去银行保险箱拿出私钥,签名,然后再放回保险箱?这显然是极其低效的。


那么让一个中心化实体代管你的私钥呢?那岂不是和去中心化的财产管理和控制背道而驰?


所以如何跨越板砖难题,找到五星的财产安全解法?老董虽然没什么钱,但对这个有意思的问题思考良久,如果有兴趣知道老董的想法,请大家留言,老董会专门用一篇文章来介绍!



最后多说两句:要不要把币放在交易所?


如果你是纯小白的话,自己非常确信完全没法管好自己的私钥,那么交易所并不一定是一个坏的选择,其实就是说你是在危险和超级危险之间做选择,那么还是选择危险吧。


但你如果已经看过了老董这篇文章,老董的建议是:


不要!

不要!!

不要!!!

不要!!!!

不要!!!!!

不要!!!!!!

不要啊!!!!!!


为什么老董发出如此深情地呼唤?因为交易所被黑,资金被盗这简直是太常见了。给大家列个小年表



2016

Aug

Bitfinex (exchange)

user wallets/inside job

119,756

$66,000,000

2016 May

Gatecoin (exchange)

hot wallet

multicurrency

$2,000,000

2016 Mar

ShapeShift (exchange)

inside job

multicurrency

$230,000

2016 Jan

Bitstamp (exchange)

hot wallet

18,866

$5,263,614

2015 Feb

Bter (exchange)

cold wallet/inside job

7,000

$1,750,000

2015 Feb

Exco.in (exchange)

cold wallet/inside job

n/a

n/a

2015 Feb

Kipcoin (exchange)

cold wallet/inside job

3,000

$690,000

2015 Feb

796 (exchange)

cold wallet/inside job

1,000

$230,000

2015 Jan

Bitstamp (exchange)

hot wallet

19,000

$5,100,000

2015 Jan

Cavirtex (exchange)

user database stolen

n/a

n/a

2014 Dec

Mintpal (exchange)

inside job

3,700

$3,208,412

2014 Aug

Cryptsy (exchange)

inside job

multicurrency

$6,000,000

2014 Mar

CryptoRush (exchange)

cold wallet/inside job

950

$782,641

2014 Jan

Mt.gox (exchange)

hot & cold wallets/inside job

850,000

$700,258,171

2013 Nov

PicoStocks (exchange)

cold wallet/inside job

6,000

$6,009,397


简直是茫茫多有没有?而且非常大,非常成熟的交易所都会被黑,新入坑的朋友请一定听老董的忠告:除了即将准备交易的区块链资产,最好避免在交易所中留存任何自己的加密货币资产,这绝对不是一个自己管理私钥的好的替代品,一旦自己用的交易所被黑,自己的财产将荡然无存,而且尤其现在是区块链资产的蛮荒时期,如果你的资产在交易所中被盗,交易所是完全免责的。



由于不知不觉关于财产安全说了真么多,所以下期会谈谈区块链的隐私技术挑战,于是压轴戏就延后了一期,希望大家继续点赞,继续转发,继续“追剧”哦~


长按关注公众号



作者简介:

老董(BS'12, PhD' 17),UIUC计算机科学系博士,主要研究领域:高速低延迟广域网数据传输系统,网络安全与形式验证,博弈论,企业软件定义数据中心架构,分布式系统。


博士期间作为创始成员加入网络安全初创公司Veriflow,现担任核心算法与系统架构技术团队负责人,同时兼任大客户管理和一部分市场运营的工作。


在业余时间,老董是区块链技术爱好者,区块链技术全栈工程师。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存