摘要:在过去的几年中,比特币的价格飞涨,超过了任何一种投资,因此它的底层技术——区块链也进入了人们的视线,越来越多的机构和个人对区块链进行了研究,进而发现这是一种革命性的技术。
谈到区块链,不可避免的要谈到比特币,但区块链仅仅意味着数字加密货币吗,或者区块链必须使用虚拟币吗?在讨论这些问题前,我们需要对区块链和比特币从本质上有一定程度的认识。
拜占庭问题
早在1982年就有后来的图灵奖得主莱斯利·兰伯特(Leslie Lamport)就提出了著名的拜占庭问题(Byzantine Generals Problem)。
拜占庭,是东罗马帝国的别称,位于现在的土耳其伊斯坦布尔,由于拜占庭国土辽阔,出于防御目的,拜占庭的将军们分别镇守在相隔很远的地方,在战争期间,由于敌军数量很多,需要拜占庭军队的将军们同时进攻才能获得胜利。将军与将军间就要统一进攻的具体时间,但如果进攻敌军的将军中间出现背叛,将错误的进攻时间传递给其他忠诚的将军,则战争就会失败。
这就是拜占庭问题。
错误的信息传递有多种情况,我们先考虑最基础的情况,假设有三个将军,a是背叛的将军,a告诉b自己要去进攻,告诉c自己不去进攻,但是实际上a却没有进攻,就导致战争失败。为解决这一问题,PBFT(Practical Byzantine Fault Tolerance)协议首先出现了,意为拜占庭容错算法,是一种经典的共识算法(consensus plugin),核心是进行状态副本复制,采用这种算法后每个将军都将自己得到其他将军进攻与否的信息和其他所有将军得到的信息进行验证。
这样当a告诉b和告诉c的信息不一致的时候,b会从c那里得知a告诉自己的和告诉c的信息不一致,得出a是叛徒的结论。PBFT算法本质上就是利用通信次数换取信用,这种算法的复杂度是将军数目的平方级。
那么,当b是叛徒的时候呢,a向b,c,d分别发送进攻的信息,虽然b却向c和d发送不进攻的消息,但c和d接收到的消息依然是两条进攻一条不进攻的消息,最后结果依然大多数将
军发起进攻。由此也可得出结论,如果叛徒的数量大于或等于1/3,拜占庭问题不可解。
于是,在一个分布式系统中,默认大多数节点是好人,基于这个前提,就完全有可能去中心化的实现共识(consensus)。
拜占庭问题本质上是一个协议问题,将这个问题演变到计算机领域,就是在互联网中决定谁来发起信息,如何将不同计算机的通讯信息达成一致,在过去,互联网依赖中心化的机构,中心化的网络对网络信息通信起到了促进作用,中心化的机构,列如银行,支付宝等都具备强大的技术实力,由他们汇总信息,在接到b端请求后,对信息进行处理。
但在实际过程中,这种依赖中心机构的信息传输也是会出现一些错误,机构可能遭到黑客攻击,机构内部员工可能对公众信息进行非法操作,机构本身可能遭受不可抗力的因素导致信息损坏或泄露。
于是中本聪带来了区块链技术。
中本聪和比特币
中本聪(Satoshi Nakamoto)是谁?他被誉为比特币之父,既是编程高手,也是密码学专家,“我希望人们能够有一种区别,即人们认为‘我是第一次知道我们在尝试一个无信任第三方为基础的系统’”他说。中本聪并不是虚拟货币的先驱者,但他从Beenz、Flooz、E-cash、B-money的失败中汲取了经验,认识到中心化是这些虚拟币的失败根源,将密码学和编程结合带来了一套全新的去中心化的信息传递体系。
他最先发布了比特币的白皮书《Bitcoin: A Peer-to-Peer Electronic Cash System》,这篇文章,次年,中本聪在位于芬兰赫尔辛基的一个小型服务上挖出了比特币的第一个区块——创世区块里,并在留下一句永不可修改的话:“The Times 03/Jan/2009 Chancellor on brink of second bailout for banks”,这句话正是泰晤士报当天的头版文章标题当时正是英国的财政大臣达林被迫考虑第二次出手纾解银行危机的新闻。
中本聪带来的区块链解决了上面的拜占庭问题,拜占庭问题有几个难点,首先PBFT算法是很耗资源的,需要对每笔交易(相当于将军间的每次信息传递)进行记录,那么其他的计算机,凭什么浪费自身算力给其他人的交易记账呢,于是比特币被发明出来了,比特币本身代表着一种奖励机制,参与记账的计算机都有可能获得比特币,也就是通常称的“挖矿”。
除此之外,如果每个将军同时发起信息,也会导致系统的混乱,所以区块链引入了竞争的机制,每个节点通过自身的算力去计算一个区块(block)里的数学问题,根据哈希(hash)运算来确定需要找到的答案(hash值),最先找到符合要求的的字符串才能获得奖励(每个区块所包含的奖励每隔一段时间减少一倍,本文写作时,根据btc.com数据显示,每个区块所包含比特币数量为12.8左右),这就是PRW(proof of work)工作量证明,越强大的算力越可能抢先找到对应的正确字符串。获得奖励后,要让所有人知道这个奖励是属于你的,就会广播给其他所有的节点,广播的时候就附带的时间戳就可以证明自己是最先解决问题的人,其他计算机接受验证了这个计算结果是正确的,网络就将这个信息记录下来保存为一个区块记录在最后,每个区块包含近期交易,前一个区块的引用以及其他数据。最终很多个区块形成一个链状的结构。这就是区块链,也就是分布式记账。
分布式记账有什么好处呢?
我们知道,传统意义上的数据库有四种操作,增删改查CRUD(CREAT READ UPDATE DELETE),在中心数据库进行这四种操作是很方便的,但是它成本过高,不透明且容易发生欺诈和滥用,于是分布式数据库放弃了其中的UD操作,去掉数据库中的更新和删除操作换来“无法篡改”“不可抵赖”的特点。利用其透明,无法篡改,去中心化等特性避免了这些源于集中化的第三方系统的产生信任问题。而且因为没有了中心化的服务器的存在,相关的维护,备份,容灾,管理成本将会大大降低。
密匙和哈希算法
密码学作为保护信息的手段,已经有了悠久的历史,密码学发展到现在,相关技术已经深入现代社会的各个领域。
加密简单而言就是通过一种算法手段将对原始信息进行转换,信息的接收者能够通过秘钥对密文进行解密从而得到原文的过程。他们的理论共识都是遵循奥古斯特•柯克霍夫在19世纪提出“柯克霍夫原则”—— 密码系统应该即使被所有人知道其运作步骤,仍然是安全的。即算法是公开的,唯一需要保护的是密钥。
密钥在区块链中也是一个很重要的概念,密钥是什么呢,简单的说,密钥就是加密算法的参数,比如凯撒密码,加密算法就是将字母循环后移n位,n就是这个加密算法的密钥。掌握了这个密钥用户才能正确的解密密文,密钥分为私钥(privatekey)和公钥(publickey),用公钥对数据进行加密后,只有对应的私钥才能解密;反之如果私钥用于加密,则只有对应的公钥才能解密。通信双方无须交换密钥就可以建立保密通信。
互联网信息传输广泛采用了加密算法对信息进行加密,常见的加密算法有SHA算法和MD5算法。SHA(secure hash algorithm)安全散列算法,是美国国家安全(NSA)设计,美国国家标准与技术研究院(NIST)发布的一系列密码散列函数。MD5算法,是由Rivest开发出来的,基于md4增加了“安全-带子(safety-belts)”的更成熟安全的算法。但无论那种算法都是通过特定的运算将一个数字计算出另一个特定的数字。
用数学公式表示:Y=H(X),Y=H(X)必须包含以下性质:
1,有X可以很容易算出Y;
2,由Y不可能算出X;
3,由Y不可能找到另一个X'使得H(X')=Y;4,如果X和X'相差很小,H(X)和H(X')则完全不相关。
算式Y=H(X)即哈希函数,hash,英文中的意思是混乱,弄杂,把...弄乱,在计算机中译作散列,“把任意长度的输入数据计算成固定长度的输出数据,该输出数据就是散列值”,不同的输入可能会散列出相同的输出,所以不可能根据散列值来计算唯一的确定输入数值。
比特币采用的SHA256算法,该算法属于SHA-2系列,Hash值是由大小写字母或者数字构成的字符串,每一位有六十二种可能性,包括二十六个大写字母,二十六个小写字母,十个数字。为了提高难度,hash值必须至少以18个0开头才能被其他节点承认,每位出现0的概率是六十二十分之一。
可以想象,计算出开头连续出现18个0的hash值是一个非常庞大的计算量,庞大到全球参与计算的整个网络加在一起也需要十分钟才能解决一个区块。
计算的不可逆性,在保证了安全性的同时也产生了额外的风险,这也是比特币技术的一个缺点,一旦用户丢失自己的私钥(32bytes随机数字,大小介于0x1 到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140),如果没有其他的备份手段恢复,丢失的比特币将永远找不回来了。
那么回到文章开头的问题,区块链仅仅意味着数字货币吗?显然不是,数字货币,比特币只是一种让区块链得以延展的奖励机制,分布式账本可以做的事情有很多,同样,在尚未找到一种替代加密货币作为记账奖励的方法之前,数字加密货币对于区块链是不可缺少的。