从丢币的交易所谈起
这段时间有件事情闹的沸沸扬扬,就是比特儿丢币了。丢币的原因也非常的离奇,就是他们没有用成熟的硬件钱包存储比特币,而是用老式的电脑方案,结果在联网的过程中,比特币被黑客盗走了。这个事情使得很多比特币硬件钱包厂家借此说事,然后宣传自己的硬件钱包如何如何的安全,暂且不一一评论。
笔者上网搜索了一下,《比特币钱包综述之一硬件钱包》一文对硬件钱包做了总结,由于目前虚拟币硬件钱包主要是比特币钱包,所以下面提到的都是针对比特币的:
第一代的典型代表是Pi-Wallet,其实说白了就是在树莓派上面装了一个比特币轻量钱包,然后Pi-Wallet通过PC端的Armory控制钱包和私钥。功能简单,方法单一。
目前大部分的产品都是第二代,基本功能就是硬件钱包存储秘钥,然后用过usb连接电脑进行操作。国内这方面技术很成熟,价格也越来越便宜。最便宜的才100多块钱。
(ps:图来自壹比特)
目前正在开发的第三代,则功能更加强大,重点是可以脱离电脑的存在,直接进行线下交易。
那么我们问题来了,交易所为什么那么蠢,不用成熟的,而且便宜又好用的硬件钱包,而是用老式的电脑存储,以至于丢了币?
不绕弯弯,一句话解决战斗,就是凭什么相信你的硬件钱包是安全的?
你如何去证明你们的硬件钱包里面不会有木马,或者不会被第三方装入木马?
事实也证明了,丢了币的比特儿,仍然“固执”的没有选择具体某个厂家的硬件钱包,而是将冷钱包100%托管给合作伙伴做专业安全存储。
我这里还有一个例子,就是OKCoin公布的自己公司的比特币冷钱包解决方案,里面也同样提出,其使用的是离线电脑,而非某一个厂家的公开销售版的硬件钱包。
究其原因,其实就是没有任何一个大型交易所,敢把价值几千万甚至几亿元的虚拟币,放到一个没有经过专业安全机构检测过的硬件钱包里面。
闭源硬件钱包的优与劣
我们现在市面上见到的大部分都是闭源的硬件钱包,其优点就是外形好看,质量稳定,用户体验感优化。但我们不是买漂亮衣服或者好吃的吃,我们是在买一个黄金保险箱,而且闹心的是,我们并知道要买的这个保险箱是否有后门。
有些闭源硬件钱包厂家或许意识到了这一点,于是就号称源代码开发,有兴趣的人可以自己开发第三方程序。但其有意或者无意规避了一点,就是bootloader源码不开放且无法通过仿真器烧录(因为没有jtag接口)。
不搞嵌入式系统的人知道一点就可以,Bootloader跟我们电脑的bios差不多,也是一段启动程序,而且是最开始启动的,也就说,每次启动,都是首先执行bootloader这段代码,然后再执行其他程序。如果bootloader里面嵌入恶意代码,那么整个硬件钱包在恶意者面前就如同裸奔。
很多低端硬件钱包用的就是stm32芯片,所以这里放的是stm32的flash图示。
我们这里主要注意两部分,一部分是Main Memory:
该区域地址范围:0x08000000 - 0x0801FFFF,总大小为128K字节。
该区域的主要用途:存放STM32的代码段(用户程序)。
硬件钱包自身的bootloader和应用程序代码段一般都放在这里。
一部分是Information Block:
其中System memory为系统内存,该区域存放着STM32自身的bootloader,该bootloader是芯片出厂时就设置好的,主要用于通过UARTx下载程序到Main Memory中。这个一般是不可修改的。
一般的流程是先启动stm32自身的bootloader,然后进入代码区,启动硬件钱包的bootloader,最后再启动硬件钱包本身的程序,之前的两个bootloader任何一处嵌入恶意程序,那整个硬件钱包就如同在裸奔。
这样在大部分的小硬件钱包厂家面前就出现了一个两难的问题,源码不开放,不能完全深度制定,客户不敢用;源码开放,会有大批跟风抄板子的,没有利润。所以没有安全认证的闭源硬件钱包,做一个玩具还可以,真的较真起来,是无法进行大规模商业应用的。