比特大陆蚂蚁矿机S7

敢为天下先:BTC360的100%准备审计计划

比特彗星BTC彗星比特 发布在 比特币 7 6187

敢为天下先:BTC360的100%准备审计计划

——BTC360成为全国首家推出默克尔树+独立审计计划的交易所

自从Mt.Gox被爆出来“弄丢”大量其客户的比特币之后,比特币交易所的资金安全问题,逐渐受到人们的关注。许多有责任感的交易所,也在积极地想办法,向用户证明自己的可信度。

比如说比特币交易平台BTC360,他们最近宣布把默克尔树(Merkletree-based technique),与独立第三方审计的手段结合起来,方便人们来验证,存放在该交易所的比特币资金,是否安全。

“默克尔树”这个概念,对于绝大部分比特币玩家而言,是个熟悉而又陌生的词:它时常出现在圈内人的视线之中,却又因其所涉及的技术知识看似高深,大量用户不愿意去进行更深入的了解,这也导致广大用户,对于这种验证方式的参与度不够高。 为了让玩家们对这项重要技术能有更进一步的认识,本文将用尽量直白的语言,谈谈默克尔树的实现原理、优点、以及它的局限性。同时,我还和BTC360的创始人黎广文,聊了聊他们为何会采用默克尔树,同时安排第三方对其进行审计,来保证用户资金安全。

默克尔树的实现原理

首先需要说明的是,不同的交易所在具体的实现方式上会有稍许的不同,我们这里将以BTC360的实现方案(参考链接Github链接)为例。

enter image description here

上图就是一个典型的二叉树,我们可以看到,它总共有16片叶子,也就是『A』到『P』节点,根节点是『XX』。每一片叶子代表一名用户的信息。

『A』 到『P』节点里面究竟包含了什么数据呢?

BTC360已经把实现方式开源,我们找到了这样一段代码:

function generate_leaf_hash (user, sum, nonce) {
  return sha256(user + '|' + big(sum) + '|' + nonce);
}

这段代码是说,把该用户的代码、相应余额、还有一个随机数串到一起,通过SHA256散列运算,生成一串看似随机无意义的字符串,而这个字符串,就是相应二叉树中相应叶子节点所包含的信息。 上面所提到的随机数,是通过这段代码生成的:

function nonce () {
  // @TODO: 128 bits of randomness!?
  // Javascript floating numbers are represented with 64 bit IIRC
  // The following code will probably make cryptographers want to tear their
  // eyes out.
  var randomness = Math.random() + '' + Math.random();
  var hex = sha256(randomness);
  // 128 bits can be represented with 32 hex characters
  return hex.substr(0, 32);
}

为何要这样做呢?

我们需要知道,散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应(参见百度百科)。

这也就是说,两次散列运算的输出,如果是相同的话,那么这两次运算的输入,也必定是相同的。同时,为了防止有人根据这一原理,探测他人账户的余额等信息,同时也是防止交易所把同一节点代表多个余额相同的用户,所以加入了随机数。 通过使用generate_leaf_hash这个函数,交易所生成了所有叶节点(『A』到『P』节点)的散列值,然后,再生成叶节点的上面一层节点(『Q』到『Y』节点)的散列值。这些节点的散列值,是把其各自子节点(左叶节点,和右叶节点)串到一起作为输入,进行散列运算,获得输出。

举个例子: A和B节点的哈希值串到一起作为输入,进行散列运算,得到一串新的看似随机的字符串,这个字符串就是Q节点的信息内容。 如此般继续,Q和R一起作为输入,生成Z节点;Z节点和AA节点一起,生成AD节点,AD节点和AE节点一起,最后生成了根节点XX的散列运算输出值。根节点XX以及枝干节点的散列运算值将被公布出来。

这样,一个完整的默克尔树就生成了。

我们假设用户张三,想要看看自己的账户信息,是不是包含在刚刚生成的这棵默克尔树之中,那么他就可以拿着自己的账户信息,按照刚才生成默克尔树的流程,多次进行散列运算,看最后是否能够得到,被公布出来的根节点散列运算值。如果可以,则证明他的账户信息,的确是包含在那棵默克尔树之中,反之亦然。

这个时候有读者可能就会要问了,上面这么多,只能保证用户信息都在这棵树里面,但并不等于交易所就是100%保证金啊!

对,根据BTC360官方的说法,“基于网站安全的考虑,我们不便向用户公开我们的比特币总钱包地址和总额”,所以他们还引入了审计制度,“我们会定期地找圈内的不同的知名人士来作为可信任的第三方审计者,他/她将证明我们的比特币总钱包地址里确实存有我们所声称的数额,并验证我们公开的roothash确实包含了我们所声称的网站所有用户的比特币余额信息。”

向审计者证明他们网站的比特币总钱包地址拥有所声称的数额不难,只需要告知钱包地址,然后审计者就可以自行通过查询区块链,确认数额是否符合。

而需要证明网站现在还拥有该钱包地址的控制权,也有几种方法,最常见的就是使用相应的私钥,对某段信息(通常需要是验证当天才能知道的信息,比如某条时事新闻)进行签名,再把签名之后的输出,以及签名信息,交给审计人,审计人即可方便的进行验证,验证网站是否的确控制着该钱包地址。这里,即证明了网站比特币总钱包地址里,确实存有他们所声称的数额。 通过上述方式,用户可以知道,自己的账户信息,是否被包含在网站所公布的那棵默克尔树之中。当所有的用户,都验证了其账户信息,确实都被包含进了公开的,经第三方审计者认证过的根节点散列值之后,网站即证明所声称的数额里,包含了网站所有用户的比特币余额。

优势与局限

这种证明方法的优势在于,不需要把所有用户的账户信息,向公众公布出来。如果有足够多的用户主动去进行验证,用户便有理由相信,所有用户的账户信息都包含在了那棵默克尔树之中。

但是,这也是该方法的局限所在:必须要有大部分的用户主动参与到验证的过程之中,这个方法才有效。

这并不是一个让交易所“自证清白”的途径,而是需要客户们主动的去确认,去关注自己资金的安全问题。

同时,如我们之前已经提到的,BTC360认为不便向用户公开比特币总钱包地址和总额,但这些信息会交给第三方的审计者,让他们来验证真实性。这也算是一种折中方案吧。总的来说,这仍然是一个很好的尝试,至少展现出了积极的信号。同时,我们也希望其他各大交易所能够采取相类似的措施,让客户们能够多一份安心,多一份信心。

100%保证金的意义

BTC360的黎广文认为,实行100%保证金,是希望能使得交易平台对用户更加透明。比特币本来是一个很先进的技术,可以成为一种透明、开放、独立的支付方式。但部分不肖业者的行为,加上一些人对它的误解,使得国内的比特币圈子,给人以乌烟瘴气的感觉。特别是交易平台,更是被质疑的重点。

他说:“100%准备金,其实是我们公开、透明的一个姿态,算是迈出交易所自律重要的一步。但以后在这方面能做的事情肯定会更多。我们希望能给大家看到,比特币相比传统支付、金融在开放、独立方面的优势。使得一些已有的用户,能恢复对比特币的信心;也使原来对比特币持有偏见的人,能更清楚认识到它在技术上能达到的公开程度!“

本文来源:巴比特论坛@wetrustbtc

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:7

您需要登录后才可以回复 登录|注册
    zxsz66
    zxsz66 928 天前

    回复@BigChubbyCat:恩。

    +1
    +1
    我要点评
    zxsz66
    zxsz66 929 天前

    刚看了,确实还行。

    +1
    +1
    我要点评
    季余洋气Peter
    季余洋气Peter 929 天前

    希望抽中我 地址:

    +1
    +1
    我要点评
    安持女史
    安持女史 929 天前

    //@BigChubbyCat: 转发微博

    +1
    +1
    我要点评
    onlylove0507
    onlylove0507 929 天前

    //@BigChubbyCat:转发微博

    +1
    +1
    我要点评
    巴比特资讯
    巴比特资讯 929 天前

    《敢为天下先:BTC360的100%准备审计计划》http://t.cn/Rvb3zsL “默克尔树”这个概念,对于绝大部分比特币玩家而言,是个熟悉而又陌生的词.平台向审计者证明他们网站的比特币总钱包地址拥有所声称的数额不难,只需要告知钱包地址,然后审计者就可以自行通过查询区块链,确认数额是否符合。

    +1
    +1
    我要点评