区块链概要浅析
区块链概要浅析
区块链是以比特币为代表的数字加密货币体系的核心支撑技术. 区块链技术的核心优势是去中心化, 能够通过运用数据加密、 时间戳、 分布式共识和经济激励等手段, 在节点无需互相信任的分布式系统中实现基于去中心化信用的点对点交易、 协调与协作, 从而为解决中心化机构普遍存在的高成本、 低效率和数据存储不安全等问题提供了解决方案. 随着比特币近年来的快速发展与普及, 区块链技术的研究与应用也呈现出爆发式增长态势, 被认为是继大型机、 个人电脑、 互联网、 移动/社交网络之后计算范式的第五次颠覆式创新, 是人类信用进化史上继血亲信用、 贵金属信用、 央行纸币信用之后的第四个里程碑. 区块链技术是下一代云计算的雏形,以及边缘计算结果溯源的重要解决方案,有望像互联网一样彻底重塑人类社会活动形态, 并实现从目前的信息互联网向价值互联网的转变.
在深入了解区块链之前,需要理解数字签名和公钥私钥的概念
1 数字签名
这里首先解释一下签名,签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值进行对比,签名中的hash值有公钥解密得到,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。
2 公钥与私钥
比特币私钥(private key),公钥(public key),公钥哈希值(pubkeyhash),比特币地址(address)。
公钥和私钥由椭圆曲线加密算法生成,私钥可推出公钥而反之不能,这也是
有了私钥,你就可以对文本签名。别人拿了你的公钥就可以根据签名认证你是否拥有私钥。这就是证明你拥有存款的办法。为了安全起见,公钥应该隐藏起来。所以对公钥进行哈希加密,生成公钥哈希值然后计算哈希值的比特币地址:
公钥哈希值=RIMPED160(SHA256(公钥))
比特币地址=*1*+Base58(0+公钥哈希值+校验码)
校验码=前四字节(SHA256(SHA256(0+公钥哈希值)))
可以看出,比特币·地址和公钥哈希值是等价的,二者可以互推,但公钥哈希值只能由公钥算出(不能逆推)。
验证的时候需要提供签名和公钥,算出公钥哈希值并和比特币支出脚本的公钥哈希值对比,最后再验证签名。这样就保证了公钥不会出现在支出脚本里。
3 交易
由中本聪的原文知道:We define an electronic coin as a chain of digital signatures(比特币被定义为数字签名链,就是一串数字信息,要防止这串数字信息在传播中被修改). 我们直接看下图最后一个交易,也就是图上最右边的一个交易,我们假设这是一个真实的比特币,在互联网上,目前这枚比特币最后一笔交易就是这一笔交易,可以看出这枚比特币目前是属于拥有者3的。那么拥有者2,是如何将这枚比特币支付给拥有者3的呢,其实定义也已经说得很清楚了,图也很明白,就是将拥有者2手上这枚比特币的交易链,连同拥有者3的公钥一起,进行随机散列,然后再将随机散列的值,使用用户2的私钥进行数字签名。最后将这个数字签名,连同比特币一起,也就是连同更新过的交易链一起,发送给拥有者3。
彼时拥有者3收到这枚比特币和附送的数字签名,通过拥有者2的公钥,对数字签名进行解密,得到之前提到过的散列值。拥有者3再将手上的比特币交易链信息,连同自己的公钥, 进行随机散列,看是否也能得到一样的散列值,如果是一样的, 就能知道两件事情:
1.这枚比特币确实来自拥有者2
2.这枚比特币的交易链信息未被恶意篡改
所以交易链就是比特币,比特币就是交易链。
一笔交易就是一个地址的比特币,转移到另一个地址。由于比特币的交易记录全部都是公开的,哪个地址拥有多少比特币,都是可以查到的。因此,支付方是否拥有足够的比特币,完成这笔交易,这是可以轻易验证的。比特币协议规定,申报交易的时候,除了交易金额,转出比特币的一方还必须提供以下数据:
- 上一笔交易的 Hash(即你从哪里得到这些比特币,通过hash值查找区块链账本数据库追溯之前交易所在的区块,可以看到转账记录)
- 本次交易双方的地址
- 支付方的公钥
- 支付方的私钥生成的数字签名
验证这笔交易:由网络中的其他节点验证是否属实,需要三步。
- 第一步,找到上一笔交易,确认支付方的比特币来源。
- 第二步,算出支付方公钥的指纹,确认与支付方的地址一致,从而保证公钥属实。 (公钥的长度是512位。这个长度不太方便传播,因此协议又规定,要为公钥生成一个160位的指纹。所谓指纹,就是一个比较短的、 易于传播的哈希值。指纹就是地址。)
- 第三步,使用公钥去解开数字签名,保证私钥属实。
经过上面三步,就可以认定这笔交易是真实的。
上笔交易和下笔交易之间会形成一个“无形的交易链”:
The transactions form a chain, where the inputs from the latest transaction correspond to outputs from previous transctions. (这些交易会形成一个“链”,这个“链”上的input来自上一笔交易里相应的output,而这output又来自更早的一笔交易)。
用一张图形象的说明什么是“交易链”:
- 在第一个笔交易中,Joe转给Alice 0.1005BTC, 在output这一边,有Alice地址里的0.1BTC以及0.005BTC的转账费用,加起来等于左边input的0.1005BTC。
- 在第二笔交易中,Alice转给Bob 0.0150BTC,output这一边里Bob钱包里的0.015BTC,加上Alice钱包里的0.0845BTC,再加上转账费用0.0005BTC等于左边input Alice钱包里的总额0.1BTC。
从图中可以看到每一笔当前交易的input都指向上一笔交易的output, 如Bob转账给Gopesh时,input单号为0627052…, 上一笔交易恰好为0627052…,这样就可实现上文中所说第一步验证:即找到上一笔交易,确认支付方的比特币来源。
真正的比特币交易链如下图:
区块链整体架构如下所示:
区块链技术的基础架构模型如上图所示. 一般说来, 区块链系统由数据层、 网络层、 共识层、 激励层、 合约层和应用层组成. 其中, 数据层封装了底层数据区块以及相关的数据加密和时间戳等技术; 网络层则包括分布式组网机制、 数据传播机制和数据验证机制等; 共识层主要封装网络节点的各类共识算法; 激励层将经济因素集成到区块链技术体系中来, 主要包括经济激励的发行机制和分配机制等; 合约层主要封装各类脚本、 算法和智能合约, 是区块链可编程特性的基础; 应用层则封装了区块链的各种应用场景和案例. 该模型中, 基于时间戳的链式区块结构、 分布式节点的共识机制、 基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
区块结构由两部分组成,包括区块头和区块体:
每个区块都有一个自己的Hash值,那么每个区块的Hash值是如何得到的呢?
CryptoJS.SHA256(index + previousHash + timestamp + data(Merkle) + nonce)
- 目标哈希:bits,需要计算出的前导0的位数,所需的前导0的数量称为难度,计算出的区块Hash值的前导0个数需要大于或者等于目标Hash.
function isValidHashDifficulty(hash, difficulty) {
for (var i = 0, b = hash.length; i < b; i ++) {
if (hash[i] !== '0') {
break;
}
}
return i >= difficulty;
}
- 前一区块:即前一个区块的Hash值
- 时间戳:块何时添加?
- Nonce随机数:在找到有效块之前,我们经历了多少次迭代?
let nonce = 0;
let hash;
let input;
while(!isValidHashDifficulty(hash)) {
nonce = nonce + 1;
input = index + previousHash + timestamp + data + nonce;
hash = CryptoJS.SHA256(input)
}
- Merkle根:区块体中的数据两两Hash最终形成Merkle根。Merkle 树有诸多优点: 首先是极大地提高了区块链的运行效率和可扩展性, 使得区块头只需包含根哈希值而不必封装所有底层数据, 这使得哈希运算可以高效地运行在智能手机甚至物联网设备上;
- 区块体数据:块上存储了哪些信息?基于区块链的比特币应用一般是交易信息
5 去中心化共识机制(POW, POS, DPOS, Algorand)
(1) POW共识算法:
- step1: 矿工节点门收集当前被广播到全网的交易并验证真实性和有效性,将真实交易放入内存池,然后选择部分交易进行打包放入区块体;
- step2: 节点将区块体里面的交易数据进行hash运算,最终得到Merkle根,Merkle根被放入区块头中,然后填写区块头元数据(包括随机数Nonce)。
- step3: 开始对区块头进行SHA256运算 {CryptoJS.SHA256(index + previousHash + timestamp + data(Merkle) + nonce)},不断迭代变化随机数Nonce直到前导零的位数大于或等于difficulty,
- step4: 节点将挖到的区块向全网广播,网络中其他节点验证区块中的交易和Nonce值,如果真实,则其他节点接受新的区块。
- step5: 其他节点接受新区块,在构建新的区块时将接受的区块hash值填入新的区块头里面,开始新一轮的挖矿。
6 激励机制
在区块链中,区块的第一个交易事务是一个特殊的事务(Coinbase),该事务给与区块创造者一定数量的奖励即比特币, 这增加了节点支持网络的动机,并提供了一种最初将比特币分发到流通中的方法,因为没有中央机构发行硬币,稳定地增加一定数量的新硬币,类似于金矿商花费资源增加流通中的黄金。在POW中,花费的资源是CPU时间和电力的消耗。
激励也可以用交易费用来进行。如果一个交易的输出值小于它的输入值,那么差额就是交易费用,交易费用被添加到包含该交易的区块的激励值中。一旦预定数量的币值进入流通,奖励机制就可以完全转向交易费用,完全不受通胀影响。
7 双重支付与篡改
在上图中,攻击者想要替换的合法事务位于黄色块中。在步骤2中,攻击者生成一个带有恶魔角图标的灰色块,表示恶意的双重支付事务。如果攻击者能够让网络中其他节点放弃黄色块而选择灰色块,那么攻击就成功了。要做到这一点,攻击者需要比网络其他节点扩展合法分支的速度更快地扩展其区块链分支。一开始攻击者很幸运,在步骤3中添加了橙色块。这使得恶意链与诚实链一样长,但是请记住,诚实节点将继续在绿色块上构建新块,因为绿色节点从步骤1就开始存在,即网络中其他节点先接收到绿色块。问题是谁将构建下一个块。在场景4a中,攻击者先发现另一个块,攻击成功。遵循最长链式规则的诚实节点们切换到识别灰色和橙色块为有效的,而放弃以前的官方黄色和绿色块。在场景4b中,诚实节点扩展了它们的领先优势。我已经展示了攻击者的链条在这里变灰了,但攻击者不一定在这里输掉了。只要它愿意,它可以继续添加块——只有当诚实的节点建立了6块的领先优势,以至于攻击者没有希望赶上时,它才会被决定性地击败。而实际上攻击者几乎没有可能去修改攻击节点,因为绝大部分节点是诚实节点,挖矿的速度与能力远大于攻击节点,只有攻击者控制51%算力才有可能修改区块。
Conclusion
区块链具有分布式存储、 时序数据、不可篡改和伪造、去中心化、 自动执行的智能合约、 安全和隐私保护等显著的特点, 使得区块链不仅可用于数字货币,也可用于金融,量化交易等领域,5G,边缘计算的应用与成熟更是有望解决区块链的算力耗费,高延迟等问题。
参考文献;
1.Nakamoto S. Bitcoin: A peer-to-peer electronic cash system[J]. 2008.
2.How does blockchain really work
3.how bitcoin works
4.袁勇,王飞跃。区块链技术发展现状与展望[J]。2016年