解密区块链

区块链初次露面时,是作为一种防止比特币被破解的数据结构,它听起来貌似可信但又晦涩难懂。然后一些人在对比特币交易的攻击中损失了大量资金。但还没等到网络版本的黄色警戒线拆除,区块链又回来了。区块链被证明与比特币的惨败无关,它成为了银行业的又一大研究热点。它或许能成为革命性的新一代安全资产交易系统的基础,处理从原油到信用衍生品的一切资产交易。这只是一种可能。

我们还没来得及对这条小道消息仔细探究,区块链再次摇身一变。现在它成为了行业管理供应链的最佳伙伴,能够对软件更新进行规范化,甚至可能为物联网 (IoT) 提供一个安全的编程环境。

但稍等一下。区块链是什么?它们的用途为什么这么广泛?你需要关注它吗?这就说来话长了。

加密货币

让我们先从货币讲起。撇开采用实物现金进行的那一小部分交易不谈,银行在很大程度上决定了货币是什么。你开一个帐户,银行记录下这个帐户的所有交易,并维持一个相对合理的余额当价值。每一笔交易都与银行有关,你也必须相信他们,虽然你可以偶尔检查他们的工作。

但我们不必以银行家的方式来思考,而是可以用网络空间自由公民的方式思考:平等主义、质疑权威、对群众的智慧抱有坚定的信心。我们并非真的离不开银行。我们只要对所有交易做一个庞大的公开记录,每个人都能在任何时间查询这个记录,并查看某个拟查询交易的信息是否可用,这样就没人可以作弊了。

当然,这里面有一些问题。在这个公共台账中,没有隐私。哪怕只有一个“聪明”的家伙找到一种伪造一条记录的方式,都会造成严重的破坏。

在 2008 年秋天,一个化名中本聪的人发表了一篇论文,描述了怎样将两种在个人电脑上可以做到的数学方法——安全哈希值法和公共密钥加密算法——结合,使公众台账同时获得匿名性和安全性。这一系列相当复杂的智慧创意最终让比特币诞生了。

这篇论文提出了一个协议,在此协议下,希望把钱转给某人的用户会将该交易也广播给所有其他的用户(图 1)。这个报文将以发报者收到这些钱的前一笔交易的哈希值作为识别码。它将给出将要支付的金额。它将给出发报者的公钥和收款方公钥的哈希值。它将包括采用发报者的私钥进行加密的整个交易数据的哈密值。

图 1每笔交易都为第三方提供了足以验证资金来源和支付者身份的足够信息。

blockchains-unchained-1

 

这个过程可能看起来有点不必要的复杂,但它满足了两个关键的需求。它使任何用户都能确认交易的真实性,通过检查签名来证实发报者就是签署交易的人(或至少,是持有正确私钥的人)。任何人也都能证明,发报者是引述的上一笔交易的收款人,只要得到发报人公钥的哈希值,并与上一笔交易的公钥哈希值进行比较就可以了。没有人可以将交易追溯到发报者或收款人的真实身份上。

因此这个公共台账就成为了一个匿名的交易链表——可验证,但无法追溯到它们的所有者。但这个交易链表还不是区块链。正如论文所指出的,还存在一个问题。

理论上,要不被发现地伪造一个交易几乎是不可能的,因为网络中的每一个人都在验证发出的某笔交易。但一个居心不良的用户可以通过重复花费同一笔资金来作弊——发送两次貌似合法的交易报文来使用同一笔比特币。我们所描述的协议没法验证某一特定的交易是不是第一次使用某个给定来源的资金。

在银行这样的中心化系统,交易是按时间标记的,一般情况下遵循先到先得的原则。但比特币是分布式的,在没有一个中央机构的情况下,需要一种让所有用户就交易时序达成一致的方式。这才是引进区块链的原因。

由于交易是广播到网络中的,每个正式用户都将它们汇集起来,验证它们,并将它们打包进一个区块里。(图 2)。当区块装满后,一个用户将结束信息放进去,把它和最新的前一个有效区块相链接,并进行广播。现在,每个人都有了一个不可变的区块链表,且明确界定了交易的顺序。如果你想验证某笔交易所使用的比特币是不是它的所有人尚未花出去的,你只要查看这个比特币之前交易的链表就可以了。

图 2区块链将交易区块连接起来,形成了一个不可变的链。

blockchains-unchained-2

 

然而,还是有一些问题。要是有人知道下一个区块是由他们来做,因此伪造一个交易,并把它放进他们的区块里该怎么办?论文的答案是,以随机抽选的方式来分配每个区块的制作权力,因此你永远也无法提前知道下一个区块是不是由你来制作,负责制作两个相邻区块的机率也是微乎其微的。如果你伪造了一个区块,抽到做下一个区块的用户会试着验证你的区块,然后发现问题,他们不会把自己的区块连接到你的区块上,而是会忽略你的区块。如果现在有两个版本的区块链:你的,和下一个用户的。再下一个抽到区块链制作权的用户会将他的区块连接到你的下家的新区块上,再次忽略你的区块。论文中的一些数学推演显示,在任何给定时间内,长度最长的区块链,也就是被大多数人验证次数最多的区块链有非常高的可能性是正确的。因此,即使多位用户共同发起攻击,他们也没法将一个伪造的区块放入链中,除非他们占到了用户的大多数。

讽刺的是,比特币最受公众关注的,不是哈希化的签名交易链表,或是区块链,而是它随机抽选的机制。这篇开创性的论文的作者从以往加密货币的工作中借鉴了一个想法,设计了一种可证实的随机抽选方式。当要发布一个新区块时,每个人都被分配到一个只能用试错法解决的数学问题。具体地说,当一个新区块发布出来,每个用户都对它进行验证。如果区块有效,每个用户就开始搜索一个称作 Nonce(只使用一次的随机数)随机字符串,与上一个区块的哈希值连接并再次哈希化,并产生一个以给定数目的零开头的字符串。寻找的过程很难,但验证十分简单。第一个找到可用 Nonce 的用户获胜,并可以制作新的区块。他们会在其中封装收到的交易、上一个区块的哈希值(它将新的区块连接到区块链中)以及 Nonce,这样每个人都可以验证他们的工作了。

在比特币协议中,每个中奖者都将获得一个新的比特币,作为对繁复劳动的补偿。他们将一个新的交易插入区块中,声明这个新的比特币是他们的。这就意味着,即使你从未打算作弊,抽到区块的制作权也有着真正的货币价值。对金钱的渴望迅速导致了用户(后来被称作“矿工”)的军备竞赛,他们从自己的家庭电脑转移到配备 FPGA 加速器的服务器机房里,又转移到基于 ASIC 的超级计算机上,都是为了成为找到下一个可用 Nonce 的第一人。

其他用途

比特币抓住了很多人的想象,一些人是被看似能白捡钱的淘金梦所吸引,一些人是被不再需要银行的自由主义前景所吸引,另一些人是被匿名性所吸引,以便不受惩罚地从事非法生意。但关于消灭银行的想法引起了其他人的注意。不管如何涨落,比特币的区块链成功维持了一个去中心化的公共台账,没人能够对它做手脚。(广为人知的攻击不是针对区块链,而针对交易——一些为用户保管私钥和余额的独立服务)这种数据结构被证实有着许多潜在的应用。

讽刺的是,许多感兴趣的各方都是银行——不是因为他们想要取消支票和储蓄账户,而是因为比特币定义交易的一个看似细节的方式。如上所述,每笔交易中都包含了其他任何人对它进行验证的必要信息:公钥、哈希值和签名的哈希值。我们没有提到的是,这些项目是和命令一起封装在交易中的,采用的是面向堆栈的 Forth(一种编程语言)式的脚本。想要验证该交易的参与者只要执行这个脚本就可以了。

但这个脚本并不只是局限于简单地验证资金的交易。它可以是一个相对复杂的程序,使用执行时任何可用的数据。例如,你可以编写一个脚本,使得只有在满足一系列复杂的条件时交易才能够进行。因此你可以编写一个脚本,令交易像期货合同一样,只有股票达到某个特定价格时方能交易。或者你可以实现更复杂的衍生品合约,使参与者能够对冲利率,承担国际货运保险,或几乎任何缔约双方可能商定的交易。这里的关键词是合约:区块链可以成为交易和管理金融合约的一种安全的、分布式的手段。对银行来说,这拥有相当大的吸引力,他们将大笔资本花在办公成本上,他们的客户对于交易的速度和完整性极为关心。

但这是一个与比特币极为不同的环境,最少体现在两个方面上。首先,银行往往想要交易发生在一个相对较小、较封闭的资金池中,和人人都可参与的比特币风格大相径庭。银行可能会想要在这个资金池中拥有一些权力,比如说给予特定参与优化权,或对区块链进行改动,这对于真正的推崇者来说是不可接受的。

其次,在金融世界中,延迟会产生问题。正如富士通实验室首席执行官佐佐木正茂在最近的一个富士通区块链技术研讨会上所指出的,在比特币的世界里,每秒只能执行十宗交易也没有什么问题。事实上,比特币的监督者调整区块哈希值前面零的数量,以限制矿工们找到新比特币的速度。因此,一个交易可能会在它处于区块链中数层以下的区块中才被视为已经完全完成,这个过程可能长达数分钟。但金融交易者们考虑的却是以微秒计的延迟。他们为了缩短支持金融交易的服务器之间的线缆长度,愿意花大笔资金。这种需求就排除了比特币所采用的多项式求解等试算证明的算法。

这些问题使得人们对建立其他种类的区块链系统产生了兴趣。于是有了访问权限受控的区块链、中心化管理的区块链以及开发你自己的区块链协议的平台。例如,英特尔就创建了一个称作 Sawtooth Lake 的开源开发平台,现在已已经在 github 上发布了 Beta 版。它支持一种差异化明显、可能大幅提升速度的抽选机制。正如英特尔的作者指出的,Sawtooth 不像试算证明的加密方法那样,需要可观的精力与时间,它是采用流逝时间量证明。这是以安全模式运行在英特尔® CPU 上的一段代码。它在预定的范围内生成随机的时间延迟及一个凭证,所有用户可凭借它验证时间延迟的程序确实是在受保护的模式下运行。

这和比特币大量计算的效果是一样的——每个用户都收到一个随机的延迟——但不用计算。这减少了能量的消耗,并避免了有些人使用硬件加速来令计算更快而取得优势。这反过来也使创造区块链的整个过程进行得更快,不再像比特币那样,为了管理挖矿速度而需要使试算证明问题更困难。虽然延迟是不确定的,但至少是有限度的——对于许多金融交易来说这是可以接受的。

抽选过程变得更快之后,加密计算就成为了交易延迟的关键问题。要计算的有哈希值、私钥签名以及用公钥进行检查的字符串等。协议设计者可以去掉其中的一些步骤,但条件是在区块链的安全性上妥协,或者在用户的匿名性上妥协,或者是将一些责任转移给中央机构。另外,为了进一步降低交易延迟,硬件编码加速也变得很重要。对于数据中心的配置而言,这不是太大的问题。但正如我们所见的,有意采用区块链的用户并不总是在数据中心的环境中应用它。

金融之外

我们现在不谈比特币,从抽象形态来看看,区块链是什么。首先,它是一个不可改变的公共台账,可以记录交易的性质、顺序和有效性。其次,它是分布式的,因此当许多节点受到攻击或失效时,也不会扰乱整个网络。即使拜占庭式的攻击也无法扰乱它。第三,它可以确保参与者身份的安全。那么,这样一个数据结构会有些什么样的其他用途呢?

答案取决于你怎样看待“交易”这个词所涵盖的范畴。如果你考虑的是资金的转移,你得到的将是比特币。如果你考虑的是两个投资者之间的合约,你得到的将是一个金融交易平台。但如果你把交易看作任何有形或无形资产从一个域转移到另一个域的过程呢?这种情况下,例如,区域链就可用于跟踪国际贸易或供应链的管理。Skuchain 等公司正在探索这些可能性。

在我们目前为止讨论的应用中,用户是人或者机构。但如果用户是物,是互联网上的元素呢?物联网肯定会涉及到交易:提供传感器数据、执行物理操作、更新代码;甚至,在网格状网络中,互相转运。Filament 等公司将无线网络和加密技术结合到了一起,正在研究此类系统。

最后,是一点推测。区块链所构建的网络不仅能够安全地记录交易,也能安全地储存脚本,使代理方能够按照条件对数据进行处理。换句话说,区块链可以定义一个安全的、分布式的计算系统。

在区块链中嵌入代码对于物联网网络编程来说,看起来可能比较笨拙。但它可能有一个重要的优势。最近发生的事件已经说明了这一点,即使物联网上最小的可编程设备,也可能被利用,参与分布式拒绝服务攻击或破坏自身的系统。区块链协议,特别是采用轻量抽取机制的协议,定义了用户能够使用的很少的几个指定的加密程序。物联网安保正在快速演变为一场无休止的反制措施之战,区块链协议可以将它改为对每个节点提出一系列清晰而有限的要求,可以保存在微型控制单元(MCU)之内或是在必要时传送到本地的硬件加速器中。基于区块链的编程协议可能是保证一些物联网网络安全的最有效方式。

我们已经看到一个想法从替代货币的设计方案中产生。我们见证了它被概括为一种实现安全、不可变、分布式数据结构的方法。我们也已经看到,如果你对交易的定义灵活一些,把可操作性的脚本也包含在交易本身之中的话,这个概念可能会有多大的灵活性。从金融服务到供应链管理,再到物流网安保,我们尚未看到区块链应用的终结。


CATEGORIES : IoT, 嵌入式系统/ AUTHOR : Ron Wilson

Write a Reply or Comment

Your email address will not be published.