Author

Topic: 比特币从“不了解”到“被误解”——详解区块链技术 (Read 229 times)

newbie
Activity: 54
Merit: 0
比特币已经被大家所正视
full member
Activity: 266
Merit: 100
不错,深入了解了
member
Activity: 112
Merit: 100
sr. member
Activity: 462
Merit: 250
在这次“比特币勒索病毒”席卷全球之前,恐怕很多人只是听过比特币、但却不了解比特币,或者是以为比特币是一种比较贵的……Q币?那么就更别提比特币的底层技术区块链了。当然,这没什么不应该的,连最靠近新技术、新商业模式的创投圈,能真正说清楚比特币和区块链的朋友估计也不会很多。
由于区块链技术本身是底层技术的创新,区块链概念从进入大众视野直到今天,始终面临很多不解和质疑:区块链技术到底是什么?它的创新性体现在哪里?有什么意义?为什么会说区块链技术是继蒸汽机、电力、信息和互联网科技之后,触发下一轮颠覆性革命浪潮的核心技术?区块链可以有哪些商业应用价值?它的商业应用为什么发展缓慢?等等。
本文试图从比特币区块链的运行机制出发,解释区块链技术怎么解决互联网点对点货币转移的问题,解读区块链技术的特性和创新性,进一步思考其技术应用的机会。
比特币的诞生和发展背景
2008年11月,一个化名中本聪的人发表《比特币:一种点对点的电子现金系统》,首次提出了比特币的概念。中本聪在论文中阐述了希望可以创建一套“基于密码学原理而不基于信用,使得任何达成一致的双方能够直接进行支付,不需要第三方中介参与”的电子支付系统。可以说,比特币的出现,与国际货币体系内的缺陷息息相关,是人类货币体系的一次突破。
2009年1月,以区块链技术为基础的比特币发行交易系统正式开始运行,随着比特币区块链中第一个区块生成,比特币诞生。从最开始的只在技术工程师之间以娱乐为目的流通,到逐渐具备了与实物、法币兑换的能力,比特币也就开始有了“价格”(比特币与法币间的公允汇率)。
2010年起,世界上多个国家陆续出现比特币交易平台,大量投资者将比特币作为一种投资品竞相买卖,比特币价格开始在剧烈波动中上涨,并逐步在全世界范围内被认知。而关于比特币技术的安全性和可控性、比特币交易的监管以及比特币的法律地位等问题,各国政府在过去几年中展开了持续的讨论,态度不尽相同,但对于比特币的底层技术——区块链的研究和应用热情却不断高涨。
比特币区块链的设计理念和运行机制
可以理解比特币是一种在计算机网络上通过算法创造出来(不受任何组织和个人操控干预)、被计算机程序规定总量恒定(具备类似黄金的稀缺保值性)、通过加密等手段实现了所有权的点对点转移(能够不依赖任何中介自由的流通),基于人们对其发行交易体系的信任而逐渐形成货币价值的一种数字货币。
而比特币的核心价值不仅在于它具备了全球范围内的流通能力,更重要的是,它实现了不需要中心机构担保的的点对点直接交易。
我们现行的货币流转系统里,在互联网上发生的货币转移(无论是与我们银行账户可支取纸币等值的电子化货币还是虚拟游戏币等)都是依赖于一个中心机构的,比如银行、支付宝、QQ游戏运营中心;而要实现数字货币在互联网上点对点的直接交易,远比我们直觉以为的要困难的多,可以试想下,如果没有银行这个中心机构为每个用户核实记录账户资金的变动,那我们如何能够实现转账这个行为?甚至如何拥有一个自己的账户?
比特币区块链则可以理解为一个账务系统,一段时间内的交易信息被打包记入一个数据存储单元(区块)中,给这个区块盖上时间戳,一个个区块按照时间顺序链接起来形成一个区块链账本。
当然,事实上,比特币区块链技术和其运行原理很复杂,理解它,我们可以先考虑——要实现电子货币的点对点传输必须解决哪些关键的问题呢?
1.怎么认证交易账户的身份?
即你只有证明你是你,你才可以对你账户内资金进行支配(现行中心化系统中,中心单位通过在其总账中为用户设置账号和密码来进行确认)。
比特币区块链系统中,身份认证通过一对密钥完成,每一个账户创建时自动生成一对公钥和私钥,公钥对外可见,私钥仅由账户拥有者自己掌握。这对密钥的特点是,其中一个密钥加密过的信息,有且仅有另一个与之配对的密钥才能解密,而且用其中一个密钥无法推算出另一个密钥。
交易过程中,支付方A使用私钥对既定信息进行加密,交易的记录者可使用公开的A的公钥对加密内容进行解密验证(如下图),来判断其是否为A账户真实拥有者。类似地,支付方A用目标收款方B的公钥加密既定信息,收款方B需使用自己的私钥解密验证才能获得收款资格。区块链中所说的数字签名,就是指这样用唯一匹配的私钥和公钥完成加密解密验证来证明身份的行为。
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图2
2. 怎么确认一笔交易是不是有效?
其核心在于支付方如何证明自己的账户内有足够的资金进行支付(现行中心化系统中,中心单位在其总账中为每个账户设置余额项,一笔收入之后余额增多,一笔支出以后余额减少,满足支出额小于账户余额便可以执行支出)。
比特币区块链中的验证机制比较独特,并不对支出账户的总余额进行查验,而仅需证明支出账户中至少还存在需支出额度即可,比如A需要支出20个比特币给B则只需要证明——自己的账户在历史交易中曾经收到过20个比特币且这20个比特币没有被支出过。可事实上历史交易中不一定有一笔还没被消耗的收入正好是20个比特币,如果是存在一笔25个比特币的收入当然也可以,那其交易信息记录为:
1.A账户曾在一笔编号为m的交易中收到25个比特币;
2. A支出20个比特币给B;支出5个比特币给回自己(如下图所示,“输入”即指明资金来源的那笔交易,“输出”表示本笔交易中资金将去往何方)。这样就实现了每一笔之前获得的资金都在下一笔交易中尽数消耗,不用记录结余。
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图3
上图中交易n具体的确认过程是,在比特币区块链上运行着某一个客户端节点的Alice向其他节点广播这笔交易信息并签名,所有在线听到这个交易信息的节点都有权对交易有效性进行验证和记录——验证Alice的签名、搜索确认交易m真实存在并且在这之前交易m没有被其他交易引用过;平均每个10分钟内通过了有效性确认的交易信息,会被记账节点打包记录进一个数据块(也就是区块),区块成功链入区块链中则代表着这个区块上记录的所有交易真正发生。
比特币区块链通过给每个区块加盖时间戳,准确记录区块生成先后时间——也就是所记录交易发生的先后时间,以此来避免重复支付。若打包交易信息的过程中先后接收到两个矛盾的交易广播(比如Alice在一笔交易广播中,称将交易m中收入的25个币中的20个转给Bob,另5个转给自己;在另一个广播中将同样来自交易m中的25个币转给了Mary),在记账的节点通常会默认选择记录先听到的那一笔。
但麻烦的是,网络通讯会有延迟性,处于不同位置的节点听到两个广播信息的顺序可能并不一样。
举例来讲,A要花20个比特币从B处买一个电子设备,便需要发出“A从之前第m笔交易中获得25个比特币,现将20个比特币支付给B,5个比特币支付给A”的广播指令,但可能A居心不良,稍后很快又发出了另一个广播,说这25个比特币要全部转移到M账户(可能是A自己的另一个账户)。有可能部分节点先听到了正确的向B支付的广播,于是记录下这一笔,后来再听到的另外一笔广播则因无法通过重复支付验证而被忽略,而部分节点则先听到并且记录了另一笔虚假信息。
那么有可能出现的一种情况是,首先记录了正确信息(A转给B 20个币)的区块并入区块链,B得知后以为交易生效便将电子设备交付给了A。
但是下一个区块记录者正好是一个先听到了虚假信息的节点,因而认为自己先听到的转给M账户25个币的交易才是正确的,前一个区块中记录的转给B 20个币的交易不成立,于是选择不延续上一个区块,而是把自己的新区块链接到上上一个区块后面,而之后的区块记录者也恰好认同新区块并选择在新区块链后延续。那么,再之后的区块记录者则会看到两条分叉的区块链,一条是记录着那笔真实交易的较短的区块链,一条是记录着虚假信息的较长区块链,在对交易信息的判断没有特别坚持的情况下,新的记录者往往会选择在更长的区块链上延续——更长的区块链往往代表了更完整的交易记录,于是,记录正确交易的那个区块则被抛弃,成为失效的孤块,那么B则不得不承担人财两空的损失。
类似情况发生的概率虽然不大,但确实无法完全避免,所以比特币区块链交易形成了一个“等待六次确认”的原则,也就是说,上文中的B在得知记录正确交易信息的区块进入区块链后先别着急履行交易义务,而是需要等待之后5个区块都陆续承认此区块(即选择在此区块后面延长区块链),方才确认自己获得20个币的交易真正发生。其原因是,如果6次确认之后还有区块记录者妄图推翻这笔交易,将记录虚假信息的区块并入区块链,则必须推翻之前6个区块的记录,从倒数第7个区块后面衔接新区块,那么这条新的区块链则比另外一条区块链短了6个量级,这样的情况下,这条新区块链被后续区块记录者承认的可能性则会非常非常小,几乎不存在。
3. 谁来记录交易?怎么保证交易能够被客观记录?
前面一直提到区块记录者,那么区块的记录者到底是谁呢?关键是怎么保证记录者能够客观记录交易信息呢?
每一个比特币区块链节点都有权记录任意节点广播的交易信息,但是,平均每个10分钟内,往往仅有一个节点能够通过其他节点的验证获得一次记账权,从而将自己记录的新区块放进区块链(之所以设置10分钟这样一个较长的信息打包时间主要是为了让各个节点在通讯可能存在障碍的网络上更充分的接收、验证信息)获得一次记账权生成一个新区块的过程俗称——矿工挖到了一块矿。
首先,各个节点为什么要争取记账权?因为有奖励!
面对已经有N个区块连接而成的区块链,获得第N+1块区块的记账权即意味着在区块链中生成了第N+1个新区块。比特币区块链上,区块生成的过程也就是比特币被创造的过程,每一个新区块生成,就会有既定数量的比特币被创造出来。(生成一个区块可以创造的比特币数量被规定每4年减半一次,2009年1月第一个区块生成时,世界上有了第一批50个比特币,而2012年12月之后,每生成一个区块只会创造出25个比特币,以此类推不断递减,到达2140年将不再有新的比特币生成,那时候全世界比特币的总量为2100万个。)
记账者的奖励就是,获得所生成区块新创造出来的比特币!并且,广播交易寻求记账的交易者们可以选择支付给记录者一定的辛苦费,广播的交易信息中交易输出金额小于交易输入金额的部分,则默认支付给成功记录了这笔交易的新区块的创建者。
接下来,怎么实现交易信息的客观记录呢?
交易信息得以客观记录的重要前提有两个:第一,避免区块的记账权被操纵,比如某个节点或者某个组织控制下的多个节点连续多次获得记账权,那么他们就可能如我们前文中担心的那样,让一些虚假交易连续得到多个区块确认以至于很难再被推翻;第二,在区块链上的某些不遵从区块链规则的坏节点随机获得记账权后,记录虚假交易的行为,能够被纠正。
比特币区块链系统解决这两个问题时有一个核心思想和一个基本假设,核心思想是,让每一次记账权的获取都需要付出一定的成本,使操纵记账权所需付出的成本远高于可能获得的利益,从而让每个节点出于对自身利益最大化的考虑,自发、诚实地遵守协议中预先设定的规则;假设则是,大多数节点们能够理性判断承担成本和风险去做坏并不如遵守规则可获得的经济效益大,所以区块链上的所有节点中,不存在高达51%的坏节点,无法颠覆现行的规则。
也就是大多数节点都是基于“获得一次记账权不容易,我需要真实客观的记账,跟在一个不存在做坏嫌疑的区块后面,也让我后面的区块们认可我的区块,从而保证我的区块在最长的链条上延续,也才能保证我创建区块获得的比特币奖励有效”这样的思想在履行记账义务。那么即使有个别坏节点获得了某次记账权后没有认真履行记账义务,后面的好节点也会基于“相信大多数节点都是好节点,好节点们都会支持我这个好节点而不是之前的坏节点”从而推翻上一个区块建立新的区块!
实际运行中为记账权获取所设置的成本是,区块记录者需要通过大量数学运算得到一个很难被算出来的“随机数”(现在平均要进行约2^ 32次不同随机数的代入运算才可能得到一个符合要求的随机数)!随机数找到后,记账者将填写了随机数的区块广播给其他节点,其他节点收到后则迅速验证随机数是否符合要求(随机数很难算出来但很容易验证)以及该区块记录的交易信息是否存在重复支付等。如果验证通过则判断其获得当前区块的记账权,那么就会停止自己这一轮的运算,转为争取下一个区块的记账权。也可能不很幸运的,两个距离较远的区块几乎同时算出随机数,并且都已经得到了部分节点的验证认可——距离自己较近的节点会先听到自己的广播,那么这两个区块哪一个最终成功进入区块链,则取决于之后获得记账权的区块选择了在哪个区块后面延续自己的区块,没有被选中的那个区块则成为一个废弃的孤块。
这是一种工作量证明的共识机制,即通过承担一定的算力成本(电费和服务器费用等),完成了大量的计算工作而通过验证获取记账权。其中隐含的条件是,某一个节点成功完成运算获得记账权的概率与其服务器的运算能力占全网络运算能力的比例正相关,这也就解释了为什么,要想操纵记账权是需要付出难以想象的高昂成本的。
4. 要是之前记录的交易找不到了或者被篡改了怎么办?
现行中心化系统中,一般来说,中心单位所记录的所有用户的账户信息和历史交易信息都保存在他们进行了强安全防护的服务器上,并且进行了备份,以保证不丢失不损坏。那么区块链上记录的信息如何来实现这些的?
之前我们提到的,其他节点验证某个区块之后则表示认可——同意跟在这个区块后面延续自己的下一个区块(可以叫做这个区块成为下一个区块的父区块),这里具体的操作涉及到一个叫做哈希(Hash)算法的概念。
哈希算法,是一种能将任意长短的字符信息轻松转化成一段固定长度的字符串(哈希值)的算法,哈希算法的主要特点是:1. 原始信息与输出的哈希值具有唯一的匹配关系,改动原始信息中哪怕一个标点其哈希值都会产生明显的变化;2. 无法凭借哈希值破解其原始信息;3. 在人类现有的计算能力范围内,不存在重复的哈希值。
区块间的连接正是通过,下一个区块将上一个区块的“区块头”的哈希值写入自己的区块中(一个区块由记录着区块基础信息的“区块头”以及记录着所有具体交易信息的“区块体”构成),即将上一个区块头的“头哈希”值填入新区块的“父哈希”字段中,区块与区块之间通过“父哈希”建立起对应的连接关系,进而组成一条完整的区块链。这就意味着,第一,我们可以通过索引当前区块的“父哈希”一直追溯到第一个创世区块;第二,如果有人妄图篡改其中一个区块上任意一个数据,则会引起一连串区块哈希值的变化,其篡改行为则会立即被识别。
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图4
另外,每一个区块上记录的所有交易信息都保存在一个运用哈希算法的二叉树数据结构中(Merkle树)——将1到n笔交易数据看作是这个数据树上最外层的n个叶子(末端节点), 然后将末端节点两两分组计算哈希值,一组组哈希值形成新的一层节点数量更少的数据层,以此类推,直到我们得到一个单一的树根节点,而只要记住“根哈希”,则任何企图篡改交易数据的行为都会被检测到。
仅把“根哈希”记录在区块的“区块头”部分,大大降低对“区块头”数据储存的要求,比特币区块链上的每个节点得以储存整个区块链上完整的区块头数据,实现了区块链账本在每个节点处的备份。并且,Merkle树数据结构下,通过验证一笔交易通往根哈希的路径即可简洁快速的证明此笔交易是否存在在这个区块上。
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图5
这就实现了交易记录的可追溯和不可篡改!
附上一张区块链结构示意图,可以直观了解下~
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图6
补充说明一下,其实在区块链技术之前,人们也曾试图在互联网上点对点传输数字货币(本质上是数字信息)来实现无中介的价值转移,但受限于数字信息的可复制性以及无法解决重复支付问题,很难真正实现。而比特币区块链系统中,最伟大的创新是,货币拥有者不再需要通过证明自己所持有数字货币的唯一有效性来争取所有权,而是取决于所有权转移的过程被区块链网络上的其他节点们所认可——即你所拥有的比特币数量实际上是在那条最多的节点认可的长期共识的区块链上,你可以有效支出的比特币的数量。
区块链技术的特性和延展性
出于对比特币区块链设计思想之精妙的叹服,以上分享了大量比特币区块链运行机制的细节。但其实,对一些细节的不理解并不影响对区块链技术以及技术应用的分析。而且比特币区块链系统中的一些设置,比如平均每10分钟生成一个新区块、每个区块有1M大小等,并不是区块链系统设计时必须遵循的原则,在探讨区块链技术时候,我们还是应该从技术的核心特性和创新性出发。
事实上,区块链并不是一个单一方向的技术创新,而是基于原有的密码学、分布式数据库、P2P通讯等技术的融合创新解决方案,其最大的创新可以说是引入了一种用随机个人构成的群体来代替传统的中心单位掌管系统运行的共识机制和奖励机制。
总结起来,区块链技术方案的基础特性、内生特性及重要延展性如下:
基于P2P通讯技术和共识机制实现的去中心化
不同于中心化网络模式,P2P网络中每个节点拥有相同的网络权力,不存在中心的服务器。所有节点间通过特定的软件协议共享部分计算资源、软件或者信息内容。在比特币出现之前, P2P网络计算技术已被广泛用于开发各种应用,如文件共享和下载软件、网络视频播放软件等。
比特币从“不了解”到“被误解”——详解区块链技术_sosobtc_图7
区块链技术去中心化的核心在于,通过技术手段使单个组织和个人可以在统一共识的规则下按分布式的方式提高协作效率。去中心的主要价值则在于:1. 减少交易信息中转流程,提高交易处理效率;2. 剔除了中心机构运营的那部分成本负担;3. 网络上所有节点平等参与交易的验证、记录,排除了被任何中心组织控制的风险。
基于密码学的去信任——实质是信息能够被客观记录且不可篡改
其实去中心化与去信任相辅相成不可分割,正是在一个没有中心权威担保的交易网络中(或者说正是因为要推翻对中心权威担保的依赖),我们才需要通过技术手段解决信任的问题,而如果无法实现去信任,去中心网络将失去运行的基础。
去信任意味着用技术规则加持信用,通过算法实现自我约束,任何恶意欺骗系统的行为都会遭到其他节点排斥。其在区块链中的本质体现是,所有交易信息可有效确认并客观记录、历史交易可追溯且不可篡改。这主要依赖于前文中提到的非对称密码算法(私钥和公钥)以及哈希算法来实现。
整个系统中的所有节点能够在自信任的环境下自动安全地交换数据,节省了信任建立的成本;信息通过确认后则被永久记录、不可篡改,极大的提升数据在安全存储和溯源方面的能力。
基于分布式数据库的分布式网络
区块链分布式网络,即由众多运行着区块链客户端的节点们构成的点和点彼此相连的拓扑状网络。
在这个网络中,每个节点共享一套开放数据库,即每个节点同步储存、更新数据。其主要价值在于:1. 分布式数据结构充分利用每个节点的储存、计算资源,避免了对中心运算设备软硬件的巨大投入;2. 每个节点都拥有一份数据库备份,单个节点受攻击造成的信息损坏或者丢失不影响整体数据的安全;3. 基于各个节点的数据共享,可实现节点间的互操作,资源利用率提高。
区块链技术的内生特性:隐私保护
这里需要强调的是,区块链网络中的隐私性和透明性并不冲突,透明性主要是指交易数据历史记录的共享开放,即数据操作行为的可见、可追踪,侧重对操作行为合规性的共同监管;而隐私性特指对账户身份信息的保护——从两方面理解,一方面是指账户身份与真实公民身份不挂勾(在我国现行监管政策中,要求比特币交易实名制),另一层则是指账户身份权限中的信息数据仅支持账户持有者操作,而传统中心化网络中中心单位有权对各个账户信息进行浏览和调整。
账户信息的隐私性同样是基于密码学来实现的,任何公钥地址下的信息内容仅由对应私钥持有者才能解读或者进行解读授权,这对私密信息网络传输形成了有力的安全保障,在信息开放共享的环境下增强了信息传输对象的可控性。
区块链技术的重要延展性:智能合约带来的自动化
早在1994年,密码学家尼克·萨博就提出了智能合约的概念, 简单理解,就是把合约内容进行数字化编码生成一个计算机程序,当预先设定的条件被触发时,智能合约能够自动执行合约条款。但是在过去中心化的体系中,智能合约意义并不明显,因为保存在中心系统中的合约可以被系统所有者随时修改甚至删除。
而基于区块链的智能合约则充分具备了自治、自足的能力,从双方达成合约协定开始,通过将合约内容编写成计算机程序储存在区块链中,合约中涉及参与方将有权在区块链上跟踪、监督合约的履行情况,一旦满足约定条件,合约能够自动执行完成权利和义务的交割。如果说传输比特币的区块链实现了数字货币在任何节点间的直接交换,那么传输智೦
Jump to: