1. 数字货币中经常出现的问题
- 双花攻击
1)数字货币本身为带有签名的数据文件,可以进行复制。对于用户来说就可以花两次。
2)解决:对货币添加唯一编号,每次支付向货币发行单位查询真伪。
3)问题:货币发行单位是一个第三方机构,并且这是一个典型的第三方中心化方案。基于这个背景,以去中心化思想为核心的比特币系统便吸引了人们的注意力。
2. 去中心化需要解决的问题
- 比特币系统中由挖矿来决定货币发行权和发行量。
- 保证交易有效和双花攻击依赖于区块链这个数据结构,记录货币的使用情况,区块链由全体用户共同维护,保证交易的有效性。
3. 一个例子
进行交易时,需要付款人的签名和收款人的地址,在比特币系统中,该地址即为收款人的公钥的哈希。(虽然公钥可以公开,但实际中更多公开的是公钥的哈希)
在交易中,收款方需要知道付款方的公钥,从而验证A签名是否有效。(实际上其他节点都需要知道付款方公钥,验证交易合法性)实际中A转账时候提供的公钥需要和铸币交易中公钥对的上,这样就防止了恶意节点伪造A的公钥来“偷”走A的比特币。
在该图中,一个区块仅含有一个交易,实际中一个区块中包含多个交易,交易通过Markle Tree组织起来,在区块中存储。
4. 比特币区块信息
Version(版本协议)、Hash of previous block header(指向前一个区块指针)、Merkle root hash(默克尔树根哈希值)、target(挖矿难度目标阈值)、nonce(随机数)
1) 挖矿求解问题:Hash(block header)<=target
2)只计算区块块头部分的哈希
3)区块链系统中,轻节点(只存储区块block header信息)只利用区块链,但并不参与区块链系统维护和构造
5. 分布式共识
各个节点不能独立完成区块链构建,各个节点必须独立打包交易,形成区块链,必然无法避免区块链内容不一致。从分布式系统角度来说,账本内容需要获得分布式共识,从而保证区块链内容在不同节点上的一致性。
6. 比特币共识协议
某个节点打包交易到区块,将其发给其他节点,其他节点检查该候选区块,检查若正确投赞成票,若票数过半,加入区块链。
Q1:恶意节点不断打包不合法区块,导致一直无法达成共识。
Q2:无强迫投票手段,某些节点不投票。
Q3:网络延迟事先未知,投票时间未知。
Q4:比特币系统,任何人都可以加入,且创建账户及其简单,只需要本地产生公私钥对即可。只有转账(交易)时候,比特币系统才能知道该账户的存在。这样,黑客可以使用计算机专门生成大量公私钥对,当其产生大量公私钥对超过系统中一半数目,就可以获得支配地位(女巫攻击)。
比特币系统中依据算力进行投票。
在比特币系统中,每个节点都可以自行组装一个候选区块,而后,尝试各种nonce值,这就是挖矿。
当某个节点找到符合要求的nonce,便获得了记账权,从而可以将区块发布到系统中。其他节点受到区块后,验证区块合法性,如果系统中绝大多数节点验证通过,则接收该区块为最新的区块并加入到区块链中。
7. 合法区块被拒绝
发生分叉的情况下,暂时保存分叉情况,但区块链只承认最长合法链,随着时间推移,必然存在某一条链变成最长合法链。这样合法区块被拒绝。
8. 分叉攻击
A给B转账后,用分叉攻击将钱又转回来,覆盖掉原来的记录。
在比特币系统中,这种情况实际上很难发生。因为大多数矿工认可的是最长的合法链,会沿着上面的链继续挖下去。而A这个攻击者要想回退记录,就必须使得下面的链变得比上面的链还长。理论上来说,攻击者需要达到整个系统中51%的计算力,才能使得这种攻击成功。
此外,区块链正常运行场景下,也可能会发生分叉。当两个节点同时获得记账权时,会有两个等长的合法链。在缺省情况下,节点接收最先听到的区块,该节点会沿着该区块继续延续。但随着时间延续,必然有一个链胜出,由此保证了区块链的一致性。
9. 比特币激励机制
比特币通过设置出块奖励来解决该问题,一个获得合法区块的节点,可以在区块中加入一个特殊交易(铸币交易)。事实上,这种方式也是唯一一个产生新比特币的途径。比特币系统设计规定,起初每个区块可以获得50个比特币,但之后每隔21万个区块,奖励减半。