分享提纲:
区块链钱包的定义
区块链钱包的分类
影响钱包安全的几个因素
钱包的安全设计参考
>>>>区块链钱包的定义
狭义:私钥容器。用来存储私钥并对交易报文签名。
广义:区块链应用APP。余额和交易明细查看、交易报文构造、多地址管理、找零等。
多用途:包含用户体系,承载行情、资讯、社交、交易平台、DAPP分发等。
区块链里所有的资产用来证明你的资产所有权和支配资产的唯一依据就是私钥。说到私钥就要提到非对称加密的算法,就是说有一对密钥,一公一私,由私钥可以推导出公钥,当你用私钥加密的内容可以用公钥来验证,有了私钥其实就有了资产的所有权。
大家看这张图,小K就是私钥,大K就是由私钥推导出的公钥,然后大K也就是公钥通过一定的换算可以得到比特币的地址A,最狭义的钱包其实就是能在钱包里对你的私钥进行全生命周期的保护,从私钥的产生要足够的随机,产生以后推导出的比特币地址可以被导出来,让别人拿到地址给你转账,有了比特币地址可以去查它的交易明细,余额,当你需要动用你的资产的时候,要动用自己的私钥来签名,但是签名只需要用私钥就行,千万不要把私钥流露出来。
我们认为只要具备最基础的私钥的保存和签名其实就构成了一款最狭义的钱包,不管是软钱包也好,还是硬钱包也好。然后,根据这种最基本的功能又延伸出各种各样的APP,其实像余额和交易明细的查看,还有多地址的管理,这已经属于广义上的钱包。
现在很多的钱包把行情甚至交易所也集成了进去,还有资讯,客户体系的关系,其实这些都是广义上的钱包。
>>>>钱包的分类
按照私钥存储方式(私钥是否与网络有物理连接):冷钱包和热钱包。
按照所使用的设备: PC桌面钱包、在线web钱包、移动端手机钱包、硬件钱包、纸钱包。
按照数据维护方式:全节点钱包、SPV钱包(只保存区块头部Hash)、完全依赖单点数据。
>>>>影响钱包的几个因素
1.私钥k的随机性
2.私钥&助记词的全生命周期保护
3.交易报文的保护
4.传统APP安全和WEB安全的关注点
刚刚讲到私钥是一个很关键的因素,那么其实影响钱包安全的几个因素全部都要围绕着私钥展开。
关于私钥的随机性先给大家分享一张图片。这张图片大家看到理想的平均分布就是纯随机生成一个私钥,就像你的助记词理论上都是纯随机生成的,但是有没有可能它的随机生成没有那么随机呢,大家看到这张图就是随机函数的随机分布,理想情况下是平均分布,那么我们看到其实是有这样一种高斯随机分布和泊松随机分布。
对于真正安全的钱包在私钥生成环节它就要足够的随机,它要满足平均分布,那么我们尽可能用硬件的随机函数发生器生成私钥数值,基本上现在主流的通过国际认证的芯片它里面的私钥发生器基本上是可以满足平均分布的。
私钥k取值范围是:1~ 2^256,换算成十进制就是10^77,看下面这句话可见的宇宙里面估计含有的原子个数是10^80。这样一对比大家就会有个直观的概念。
接下来这张图就是取自RANDOM.ORG的网站,理想的随机函数它的分部像左边这张图,那么PHP在Windows下面rand的函数它生成的随机数的分布就像右边这张图,大家可以看到明显的中间有很多细线,这些线就是分布集中的一个体现。
有个例子,2014年12月, Blockchain.info他们的工程师写错一个函数,使得随机数的生成只有256种可能,这样的话一名黑客通过遍历他们的私钥,从Blockchain.info上面转走了864个BTC。
这张图上面的交易就是当初这名黑客通过伪随机函数遍历私钥转走的那笔当年的交易记录。说了这么多其实就是想表明一个问题,私钥的随机性是所有区块链资产里面保存你区块链资产最终的第一步,那么一款钱包不管是软钱包还是硬钱包,它在初始化的时候生成了私钥,然后通过私钥推导出公钥,通过公钥推导出来你的比特币地址。
那么接下来关注的一个问题,私钥生成以后它的全生命周期保护。也就是说从它的存储到它的调用到它用来签名一直到消亡,整个生命周期里你的私钥是永远不能被别人知道的。那么怎么进行私钥的全生命周期的保护呢?
我们知道你在PC端或者在手机上安装一个钱包软件,那么在你进行初始化操作,你把助记词记下来以后,你的私钥其实是通过加密的方式存到你的硬盘,或者是手机的存储器里面。但是对于大多数的操作系统,都有可能潜伏着病毒和木马。于是为了保护私钥,为了在私钥的全生命周期里面得到一个安全的港湾,最早的一些人使用全冷的方法,就是拿一台完全报废的PC机,也不联网,在那上面运行BTC Core客户端生成地址以后,把地址拷出来让别人转账,当他需要支付这笔钱的时候,把交易报文在自己的热端生成,生成以后把交易报文通过U盘拷贝到这台机器上,这台不联网的机器对它进行签名,签名以后再拷出来,然后再把报文广播出去,完成了一次交易。
那其实我们常见的钱包就是这种方案,其实就是用一个安卓的手机用二维码扫描的方式完成信息的传递。
大家可以看这两张图,第一张是我们DEMO的App里面往外转出的一笔BTC的测试币所产生的报文,我们在界面上看到从一个地址发送到另一个地址,发送的金额是1.22个BTC,手续费是0.002BTC。接下来这张图是交易产生以后在区块链浏览器上看到的实际的交易报文,可以看到花出去这笔1.22个BTC其实它来自于上一次 别人转给你的1.5个BTC,从这里面把它一次性的全花出去,其中有1.22个转给了你要转的目标地址,剩下0.278个转回给了自己,还有0.002的手续费,所有的加在一起刚好等于前一笔的收入,1.5个1BTC。
上面这幅图来自于今年360出的一份数字货币钱包安全白皮书,因为360是传统的安全的企业,大部分传统的做安全的公司他们关注的更多的其实是传统的App安全。大家看这张图的五大要点,基本上说的是传统App的安全。
这张图上面的三幅照片是我今年7月份在北京看雪安全论坛开发峰会上拍的,当时现场知道创宇的胡老师在给大家展示他现场秒破了几款主流的硬件钱包,胡铭德老师他这种方法其实是安全圈里比较常见的逆向的方法,通过芯片的引脚来把芯片里面一些东西给Dump,安卓的可以直接通过USB接口,或者是通过一些已知的API把里面的一些App给读出来。
好多硬件钱包他们喜欢用单片机的方案,比如国外某款最著名的钱包它用的这种单片机的方案就很像我们早年国内网上银行的网银的U盾,这种U盾它的安全芯片其实已经很安全了,但那是因为芯片个头比较大,在专业的破解领域有一种很牛的方法,他们可以在纳米的尺度上对芯片进行打磨,每打磨一层可以拍张照片,然后一层层的打磨,打磨到最后把所有的里面的东西从物理上对它进行还原,这样以来里面的算法、数据其实是都可以拿到的。
大家也不用担心,这个秒破说是这么说,其实可以想一下这种破解的前提是在物理上他已经拿到了你的钱包,也就是说你的钱包被人偷走了,这个时候在他不知道你的Pin码的情况下,他把你的资产转走,他能调用里面的私钥进行签名。所谓的秒破是能够接触到你的钱包的前提下。当然如果你的手机或者PC里被人植入了木马,那么其实在你任何一次交易的时候都可以被别人动手脚。
上面我发了两张脑图可以理一下思路。其实说这么多所有的虚拟币资产最关键的因素还是私钥,私钥取决于一开始生成私钥的随机数,然后私钥生成以后在它任何一次使用中都只能有你自己知道,不能被任何人知道。
接下来大家看一下BtcZen选用的这种方案,其实我们是站在巨人的肩膀上,我们选取了最成熟的一种方案就是智能卡,智能卡国际行业标准大概已经有20多年的历史了,世界各国的银行卡,信用卡包括国内常见的社保卡还有公交卡基本上用的都是智能卡的方案。为了方便使用我们不想用那种二维码扫来扫去,我们通过用这种非接触智能卡,用NFC进行通信。
关于BtcZen智能卡有几个指标,就是从芯片层面怎样防止物理上的攻击。还有从卡内操作系统的层面,和卡内App的层面我们都是有很强的防护机制的。
今日互动:
“11·8″记者节,在这里感谢过去的时间里始终关注着亦来云、记录着亦来云的朋友们,因为大家的记录与关注让更多的朋友能够认识、了解亦来云。未来,我们共同创造,一同努力,让更多的人了解与认识区块链,共同记录与见证着伟大的变革~
来源:亦来云