30 Sep 2016

事后诸葛亮

hindsight

在我们这个圈子里,事后诸葛亮很多,国内国外都多。

比如说,一年多以前,当 Bitstamp 和 Bitfinex 的热钱包先后被盗时,“诸葛亮”们就都忍不住要跳出来说:

  • “早就说过了他们会丢币,你们就是不信!”。

随口说说也就罢了,他们还要忍不住的出主意:

  • “为什么不用多重签名?”。

  • “用了多重签名不就不丢币了吗?这些交易所到底是有多蠢?”。

  • “多重签名都不懂,还开什么交易所啊?”。

听从了诸葛亮们的建议,Bitfinex 在丢了热钱包中的 1,500 BTC 后果断的采用了 BitGo 那“实时准备金证明”的多重签名钱包解决方案,并且迅速的将全部资产切换到了新方案之上。在完成切换后,Bitfinex 的管理层不止一次的对外宣称其多重签名钱包方案 “Impossible to Lose”。

一年多以后,Bitfinex 被盗了 120,000 BTC,“Impossible to Lose” 的钱包方案形同虚设。

这时候,又有不少人跳出来了:

  • “早就觉得 Bitfinex 有问题了”。

  • “既然是多重签名怎么会被盗?肯定是内鬼”。

  • “BitGo 的多重签名方案是很靠谱的,一定是 Bitfinex 自己把冷热两把私钥都泄露了”。

等到 Bitfinex 被盗过程已经比较清楚了之后,出主意的人就又站出来了:

  • “为什么不用硬件钱包?”。
  • “用了硬件钱包不就不丢币了吗?这些交易所到底是有多蠢?”。
  • “硬件钱包都不肯买,还开什么交易所啊?”。

然后,大家就发现 Bitstamp 的老板开始去实验各种硬件钱包了,呵呵!

在这里,小太想对出主意的那些“诸葛亮”们说一句:“不懂就别乱出主意了,好不?”。

在服务器上连一个硬件钱包,是不是就可以安枕无忧了呢?

Bitfinex 事件中 BitGo 的角色和一个硬件钱包又有什么区别?(黑客并没有拿到 BitGo 的私钥,却偷走了大部分比特币)。

是不是真的像诸葛亮们所说的那样,交易所用了硬件钱包后就能不丢币了呢?

真正的安全需要的是逻辑上能说得清楚、架构上讲的明白的安全,而不是像很多人张嘴就来的“用了多重签名就安全了”,或者是“用了硬件钱包就安全了”。

比如说,你得从系统架构上说清楚如下内容:

  1. 私钥是存在哪里的?如何保护私钥不被黑客访问(冷)?
  2. 交易签名是如何进行的,是否是离线签名的模式?
  3. 对于发送过来的请求,都会做哪些校验来避免黑客伪造交易请求?
  4. 系统架构中都有哪些环节(比如说网站服务器等),具体每个环节被黑客入侵后都会造成哪些破坏?会面临哪个程度的资产损失?
  5. 监控和报警机制都有哪些?
  6. 等等。

以上述内容的第4点为例,Bitfinex 如果能做到认真评估其中的风险,就会发现如果有黑客入侵了他们的系统,就能采用跟他们网站程序调用 BitGo API 一样的方式获取到 BitGo 那把钥匙的签名,即可完成盗币行为,这个方案从逻辑上讲就是不安全的。

同样用第4点去评估,如果你的服务器上连了一个硬件钱包(这里所指的硬件钱包包括那些专门设计的 HSM 硬件安全模块),你的程序当然可以调用硬件钱包来完成发币操作,当黑客入侵了你的系统,同样可以用跟你的程序相同的方式来向硬件钱包发起发币请求,完成盗币行为,逻辑上讲这跟 Bitfinex+BitGo 的安全级别是一样的,跟纯热钱包的安全级别也相差不大,黑客只要会写一点点程序,这一关也就过了。

所以,在安全这件事上,真别“张嘴就来”哈。

总之,系统安全并不像大部分人(尤其是诸葛亮们)所想的那么简单,不是说用几个诸如“多重签名”或“硬件钱包”这类的神奇术语就能一劳永逸的保证安全了,您需要的是逻辑上合理、架构上清晰的安全模型,至少您应该问问自己,如果网站服务器被黑了会怎样?


Tags:
Stats:
0 comments


Share: