23 Aug 2016

ChainCloud 简介

ChainCloud 是一个区块链云平台,企业或个人可以依赖 ChainCloud 平台来迅速的搭建起自己的区块链资产业务系统,而无需考虑区块链技术的具体实现及如何保障区块链资产的安全,ChainCloud 能满足多种区块链企业的资产管理需求,如:

  • 交易所;
  • 存币/理财平台;
  • 电商网站/会员系统;
  • 支付企业;
  • 博彩站;

ChainCloud 平台的官方网站是:chaincloud.com

ChainCloud 平台的 API 文档网站是:docs.chaincloud.com

网站和文档都是开源托管在 github.com 上的,用户可随时查阅版本历史。

1. 架构

首先,让我们先来看一下 ChainCloud 平台的系统架构,ChainCloud 架构图如下: ChainCloud框架图

该图中,您可以看到如下内容:

  1. Your Website 指的是企业或个人用户自己的网站;

  2. ChainCloud API 指的是 ChainCloud 平台的 API 服务;

  3. HSM-HotHSM-Cold 是我们自行设计和研发的硬件安全模块(Hardware Security Module),其中 Hot 是联网的、在线的热设备,Cold 是永远不联网的、离线的冷设备,另外 HSM-Cold 有短信模块,可支持通过短信的数据校验请求;

  4. 我们还为用户专门设计了一个 V-Device(V设备)的模型,通过V设备,让使用 ChainCloud API 的企业用户也能获得“二次验证”的安全性,类似于手机短信二次验证码或谷歌二次验证;

V设备是一台由企业自行购买的、并确保安全存放的安卓手机,V设备上会运行着一个我们提供给用户的 chaincloud-v 开源应用,通过该应用能进行一系列的数据校验操作,以确保安全,V设备有如下注意事项:

  • 安卓版本 >= 4.0

  • 请使用双卡双待的手机,当前版本请配置一个开通了短信功能的联通SIM卡(未来会增加另一个运营商作为备份链路)

  • 我们会通过开源项目的方式将 chaincloud-v 的源码提交给用户,用户可进行二次开发(增加自己的安全校验逻辑),并自行打包

介绍完架构后,我们现在再来描述一下具体的用例。

关于 ChainCloud API 的基本访问方式,可参考: http://docs.chaincloud.com/en/latest/api/general-usage.html

2. 冷收款

首先,让我们讨论一下冷收款模块,相关的 API 说明均可以在文档中找到。

当我们给用户开通了 API 账户之后,用户就能获得两个访问 API 的 token,分别对应于冷收款和热发款。ChainCloud 平台所提供的服务是收支两条线的,并且使用了完全隔离的系统架构,业务上互不影响,安全性上也是隔离的。

对于冷收款来说,私钥都是存储在冷设备(离线断网存储)上的,黑客是无法访问的。在刚才的架构图中,通过 ChainCloud API 只能获取到地址,也就是说,即便是黑客黑了我们的系统,也只能获取到地址,无法获取任何私钥。

在 Basic API 文档中,有一个接口叫 AddressBatchhttp://docs.chaincloud.com/en/latest/api/basic-api.html#address-batch

这其实能用来获取一次性获取一个批次的地址,一个批次是 1000 个地址,每个地址都有序号,批次 0 的地址从序号 0 到序号 999 。

我们要求用户请求了一个批次的地址之后,在正式使用之前,从安全性考虑,应进行验证,只有通过了验证的地址,才应该被用于收款。

验证地址需要用到V设备,V设备会一直跑着我们写好的 chaincloud-v 应用,然后放在一个安全点的地方,比如说,您的家里,连着电源,保持 chaincloud-v 应用一直在前台运行的状态。V设备每天会自动通过短信的方式与我们的 HSM-Cold 冷设备交换安全校验码(建立密码学安全的数据校验通道),这些都是自动进行的,也无需用户进行额外的开发工作,只要做好配置就能正常运行。通过短信交换安全校验码其实就相当于一个不依赖于互联网的(依赖的是手机短信运营商)的安全模型。

当用户的网站通过 ChainCloud API 获取到一个批次的冷收款地址之后(用户需要在网站上自行开发一个简单的接口,能够让V设备知道刚刚获取到了一个批次的地址,并且还未进行验证),当V设备查询到有未验证的地址批次时(V设备会一直轮循网站的接口,来查看是否有新的、待验证批次的地址),会自动的对这个批次进行验证,会通过短信向 HSM-Cold 设备请求该批次的密码学签名。获取到签名之后,V设备就能够验证网站所获取的地址是否正确了,如果正确,V设备就通知网站该批地址正常,可以开始使用,您就可以分配这些地址用于具体的用途了。

上述过程虽然看起来比较复杂,其实逻辑本身是很简单的,而且都已经实现完成,用户只需做简单的封装即可。

这样设计的好处是,即便是我们的 ChainCloud API 服务被黑了,黑客可能会尝试着返回给用户错误的地址(比如说是他自己的地址),由于您可以直接使用安全设备(V设备)来向我们的 HSM-Cold 冷设备通过短信的方式请求数据校验信息,这种情况下黑客的伪造数据请求马上就会被识破,同时V设备会发送报警短信给系统管理员。这样,只用用户能一直保证只使用通过了验证的地址,即使黑客黑了我们的服务器,您也不会有任何资产损失。

这就是我们的设计逻辑,我们会假定任何一个联网的中心化服务器都有可能被黑,但会通过给用户提供另一套数据校验机制,最终会通过短信通道去直接向冷设备请求验证信息,以确保安全。

在使用通过验证的地址时,可通过相关 API 来监控这些地址上的交易,以监控系统内的充值行为: http://docs.chaincloud.com/en/latest/api/cold-receiving-api.html#address-txs 这个接口可以监控该地址上的所有交易,也可以监控交易的确认情况,一般来说,>=1个确认的交易,可以认为充值成功。

对于存入冷收款地址的比特币,我们会定期汇总给用户,定期或定量,比如说,每天一次,或者每50个比特币一次,这些操作都是人工进行的离线签名操作,因此很安全。另外,我们还会定期的进行电话回访,以确认汇总账目的正确性。

3. 热发款

说完冷收款 API 之后,我们再来说说热发款 API。

对应于冷收款的 token,用户还会有一个热发款的 token,使用该 token 访问我们的 API,可以方便的查询到热钱包中的余额及历史交易等信息: http://docs.chaincloud.com/en/latest/api/basic-api.html#user 这个接口就能查到总余额等信息,冷热其实都能查。

只要是热钱包中有余额,用户就可以通过调用 Hot Sending API 来实时发币。当然,这需要在用户那边得有一个数据库表,专门用来存储发币请求的相关信息。热发币接口是支持多目的地址发币的,比如说,您计划发送 1BTC 给 A,1.1 BTC 给 B,1.3 BTC 给 C,都可以实现,但需要先在您的系统中准备好相关信息。V设备会一直轮循发币请求接口(该接口请按照我们给出的样例来开发),当检测到有新的发币请求时,会对该请求进行解密,如果解密成功,会向 ChainCloud API 发起发币请求(同时会带上数据校验通道的签名信息),如果解密失败,意味着用户网站可能被黑(黑客构造了假的交易请求),V设备会将报警短信发送给管理员。

V设备签名后的交易会通过 ChainCloud API 到 HSM-Hot,再到 HSM-Cold 才能完成交易签名,最后会把交易信息返回给用户,发币请求完成。当 HSM-Cold 进行交易签名时,会验证该交易请求是否是由V设备签署的,如果不是(签名验证失败),意味着用户的网站被黑了,黑客正在尝试构造虚假交易,HSM-Cold 会关闭用户的账户,并发送报警短信给 ChainCloud 的系统管理员。

通过上述设计,我们就能从逻辑上确保用户热钱包资产的安全。如果是用户的网站被黑了,其实风险并不大,因为黑客同时能入侵 V 设备的难度是非常高的,V设备作为一个独立的安全设备,使用着不同的网络环境(甚至可以是 3G/4G 网络),而且有着不同的安全架构,所以很难同时被黑。只有通过 V 设备签名的交易请求,HSM-Cold才会签名交易,否则都会报警。对于 ChainCloud API 服务器被黑了的情况,风险也不大,因为黑客也无法访问 V 设备,这就确保了安全。

这就是一开始提到的“二次验证”机制,让企业在使用 ChainCloud API 的时候也相当于有了谷歌二次验证。


Tags:
Stats:
0 comments


Share: