区块链风靡全球的狂热之风引发了世界对于区块链技术的分析和探讨,但许多人至今仍对它一知半解。本文带你快速而清晰地认识区块链技术。首先我们来讲讲区块链技术的概念。


指纹标记

区块链里面的每个区块都有自己唯一的不重复的指纹标记(HASH)。下一区块会有一个指向上一个区块的HASH。篡改其中一个区块的任何部分数据,都会导致它的HASH数据发生很多变化,从而导致链的关系错误,这个交易就会被区块链中的其它节点拒绝。


如果有人想要篡改数据,他必须赶在新区块产生之前,将之后所有的数据一并篡改,并且他的算力要能够超过全世界51%的节点算力。按照目前比较成熟的区块链应用,比如比特币,这个操作几乎实现不了。


复式记账

从通俗角度来看,区块链技术类似复式记账。由于里面所有的数据都是有关联的,因此想要修改账本就需要修改该数据及其之后的所有数据。


从程序员的角度来看,这就类似于软件中能灵活改变顺序的链表,但区块链中的链是叠加了指向性、并在上下级节点中添加了独特签名的链表结构,更改其中的一个节点,链表就无法继续。


为方便大家了解区块链,下文将深入介绍什么是区块,以及区块链形成的基础。


区块是区块链中的节,而其主要核心技术是区块树、交易脚本以及各类密码算法。





区块树实质就是Merkle treeMerkle tree的树根指向下面的交易树。由于在处理比对或验证的应用场景中,特别是在分布式环境下进行比对或验证时,Merkle Tree会大大减少数据的传输量以及计算的复杂度,在这种情况下交易查询就变得非常简单快速。


而每个交易其实就是数据的输入和输出,如果交易它是以 Hash List的形式存在区块里,那就难以在短时间内进行校验。Merkle tree的好处就是可以单独拿出一个分支来(作为一个小树)对部分数据进行校验。毕竟比特币有几十亿个数币,想要查找验证其中一个的数据非常困难,但是,按照现在的形式,先分块,再分树就很容易查询验证。

区块链脚本解析

以单个比特币的交易来分析,它内部分为一个输入脚本和一个输出脚本。输出脚本就相当于一道数学题,输入脚本就是题解。

就单笔交易分析,例如A转账给B 1Bit,那B能否动用这笔资金就取决于B是否有一个输入脚本来解开A输出脚本的数学题,如果这两个脚本可以匹配,B就可以使用这笔资金了。


最标准的交易脚本就是:要证明自己拥有这个钱包地址对应的私钥,就需要在输入交易中提供自己的公钥以及使用私钥对交易进行签名。输出脚本就是一个使用公钥加密计算出来的hash值,别人要来用这笔钱,就是用私钥算过之后来验证。如果两个算法最后得出的结果相同就说明交易已被验证。


区块中涉及的各类算法

公钥加密算法

即为人熟知的非对称加密算法,也称为证书算法。中本聪使用的是非对称算法中的椭圆算法,截止到目前,还没有人可以破解这项技术。该算法特点是单向性,由私钥生成公钥,私钥加密的数据公钥可以解密,公钥加密的数据私钥可以解密。但是,无法由公钥反推私钥,也无法从私钥反推公钥。





摘要算法

主要包括SHA3, HMAC-SHA。这种算法的特点是,无论用户的原始数据是什么长度的,经过计算后输出的密文都是固定长度。


由于该算法的摘要是通过一定的运算规则对原始数据进行提取,如果原始数据有变化,输出的摘要就会变得完全不同。因此它就像是人的指纹,被篡改的可能性很低。


HMAC-SHA是种安全的基于加密hash函数和共享密钥的消息认证协议,它会在原有的内容上加一个加密的hash函数,叠加原本的数据,就能生成指纹。由于该指纹无法回溯,所以要修改原有数据必须在知道原有数据的基础上,再使用密码去验证,这个难度几乎是无法被攻克的。


分组加密算法

最典型是AES算法,这是一个迭代分组密码,其分组长度和密钥长度都是可变的。密钥经过多次迭代计算出一个密文。同时与公钥密码算法不同,对称密钥密码使用相同的密钥加密和解密数据。


由以上算法衍生出的比特币主要有两个特性:一个是匿名性,在网上,看到的是地址,需要加密就用公钥去加密,需要签名就用地址去签名 。另一个是公开性,在公网上有个链表,交易数据谁都可以查到,需要增加数据也是可以的。

P2P网络和去中心化共识是区块链得以形成的基础。


区块链由于节点有很多所以不可能被攻破。毕竟要攻击就必须知道一个目标,但是在这样的一个网络中很难找到攻击点。全节点和瘦节点相结合、海量处理和存储能力皆备的超级节点带来了非常全面的安全性。


去中心化共识

那在无中心点、开放的P2P通信网络中如何达成共识呢?可先简单理解成是比较分叉支链的高度。整个链目前多达38万个区块,数据通过全网同步需要2天;6次确认(60分钟)后基本可以防簒改。即使记录被修改,最后6个块HASH被重算,即便调动全网算力,一样要再花60分钟,何况未被调动的算力还在继续增长区块链。传说中51%攻击的原理也由此而来,这也是官网建议用户的重大交易等上1天的原因。


但是全世界那么多计算机,同一时间算出来的人,判定基本原则是:只认可最高的那个链。通过这种简单约定,再加上10分钟的时间,区块链产生两个高度相同的分支可能性约等于零。


总体来说,区块链得以形成依赖于以上几个原理,制作块有难度,使得数据难以被修改。这样就得到一个只能添加不能修改的数据结构,而且这个数据结构是在全世界分布的。所以,区块链实现了一个公开的无法篡改的账簿,在这个账本上所有人都可以提交交易。


区块链实质是一个只能添加无法修改的分布式数据库,那么这个分布式数据库为何会让这么多的金融机构和组织趋之若鹜呢?其实,区块链本身没什么威力,但它用机器自动做存在性证明解决了金融领域的信任问题;而存在性证明是金融机构存在的根基。区块链技术这一试图撬动根基的革命之势未来将如何发展,我们拭目以待。