区块链笔记
  jlvrurfx1Mwz 2023年11月19日 34 0

区块链(block chain)

去中心化的分布式账本(distributed ledger)数据库

数学理论、加解密技术

bitcoin底层技术,中本聪,dig矿:争夺记账权


中心化交易:

转账、购物、记账

银行:超发货币,导致通货膨胀、货币贬值、金融泡沫、诱发金融危机


两军问题:

区块链笔记_区块链


传递消息的信道不可靠

分布式计算,试图在异步系统和不可靠的通道上达到一致性是不可能的。

区块链体现:记账信息通知出问题,共识机制


拜占庭将军问题:

区块链笔记_子节点_02


在一个去中心的系统中,有一些节点是坏的或者恶意的,它们可能向外界广播错误的或者伪造的信息,在这种情况下如何验证数据传输的准确性。

前提:假定信道可靠,做一致性和容错性相关研究。

共识机制:

·工作量共识(proof of work,简称POW)机制:

提高抢占记账权的难度或者增加记账的工作量从而控制记账发生的频率。

dig矿:抢占记账权限生成新区块的过程


在提高记账难度和工作量降低记账频率后,如果仍然出现两个人或者多个人同时抢到记账权力,那么就允许所有人在接收到这些记账人带记账编号的记账信息的广播之后,同时把这些信息记录在自己的账本上,这样记账信息在账本上就会出现分叉。

分叉的出现导致难以保持账本的一致性


·最长链共识机制:

只保留帐本中最长的链,抛弃短链。

允许账本中的链短暂分叉,然后每个人继续监听网络中的广播,继续抢夺记账权。一定时间后,就会在网络中出现有的链长,有的链短。链长代表了多数人的共识,那么少数服从多数,因此自然就只保留了链长的记录,那么账本信息重新达到了一致性。


如果有人想对交易记录造假,那么他就需要一直抢先生成假的包含交易记录的区块,并广播出去。这就要求造假者生产新的区块的速度,要快于系统中的其他所有用户生成新的区块的运算能力之和,然后连在自己之前生成的假区块后,造假才有可能成功。但由于每个用户用的算力相比系统总算力都是九牛一毛,微不足道的,这就使得工作量巨大,造假成本巨大,大到难以接受,因此造假变得不可能。

在这个去中心化的点对点分布式系统中,参与的节点越多,总的运算能力越高,那么对抗作假的能力就越强,系统就越安全。


加密与签名过程:

去中心化分布式网络是一个非安全的网络环境,需保证:

·每个节点接收到的这条交易记录在传输过程中没有被其他人所篡改

·每个节点接收到的这条交易记录确实是由发起交易的人所创造

Hash散列算法SHA256结合椭圆曲线ECC非对称加解密保证信息的真实可靠性

算法流程:

利用SHA256加密交易记录得到一个固定长度的输出字符串

利用ECC的私钥对输出字符串加密得到数字签名

将交易记录明文、数字签名、ECC公钥打包发送给网络中其他人

其他人收到打包数据,利用SHA256加密交易记录明文得到字符串str1

利用ECC公钥解密数字签名得到字符串str2

如果str1 = str2,则未被篡改

拜占庭将军问题:利用最长链共识+密码学算法解决,保证没有人能篡改或者伪造交易信息。


区块链bitcoin转账操作:

  1. 判断余额是否足够完成交易比如A想转账100个bit coin给B,首先判断A的账户余额>=100才能发起转账功能。区块链里无余额概念,所谓余额来源于每个人所拥有的各种交易记录。
    比如在A的全部有效交易记录里有:
    C给A转账:70
    D给A转账:10
    E给A转账:40
    3条交易记录涉及到的金额加在一起,就是A目前拥有的余额:70+10+40 = 120 > 100,A可以给B转账100
  2. 判断是否需要找零如果A根据交易记录计算出的余额恰好等于要转账的金额(可能包含交易手续费用),那么就可以不用找零,否则,需要将余额中减去转账部分的金额,重新转账给A自己。比如A现在的余额是120,转账100给B,那么剩余的20则由A自己转账给自己,完成找零。
  3. 广播出去,让全网节点认同和备份转账记录

最后,A把“A转账100给B”和“A转账20给A”与加密签名信息等一起广播出去,等待网络中的某个人来打包记账。在未完成记账之前,发出的交易信息会被标记为“未确认”,一旦被人完成记账加入区块链末尾之后,就会被标记为“确认”,一般某笔交易被全网广播以后,达到6个确认以上就成功记录在案了,且不可逆转不可撤销。若这条记录被当作其他交易的余额而被使用,那么这条交易信息会被标记为“无效”。而之前的转账记录:

C给A转账:70

D给A转账:10

E给A转账:40

将会被标记为无效记录,因此这些记录将永远不再会被追溯到。

注意:区块链里每个人的信息都是加密的,接收转账的地址和公钥信息也都是匿名的。


区块与区块链:

在每个区块的头部,保留着它前一个区块的Hash值,然后所有区块通过这种形式组成了一个区块链。而区块Hash值的计算却非常讲究。

Merkle Tree的叶子节点存的是交易记录,而非叶子节点的值则是根据下面的叶子节点的Hash值组合后再计算Hash得到的。

由于每一个区块最大只能是1MB,一条交易记录大概是0.25KB,那么一个区块最多可以储存4000多条交易记录,如果在一个新区块产生的时段中,发生的交易请求超过4000条,那就肯定存不下了。每个区块的平均产生时间是10分钟即600秒钟,也就意味着,平均每秒钟的交易量不能超过7(4000/600)条,如果超过7条,那么就一定会出现排队等待打包的交易记录了。

区块链笔记_区块链_03


www.blockchain.com


Merkle树是一种哈希二叉树,由一个根节点(root)、一组中间节点和一组叶节点(leaf)组成。叶节点(leaf)存储数据或其数据的哈希值,中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。它可以用来进行快速查找和检验大规模数据完整性。对于bitcoin网络来说,使用Merkle树来存储交易信息的目的是为了高效的查找和校验某笔交易的信息是否存在。当N个数据元素经过加密(使用两次SHA256算法,也称double-SHA256),至多计算logN次就能检查出任意元素是否在树中。

通过Merkle树结构,底层的每一笔交易都无法篡改,因为一旦篡改,那么Root Hash就必然不一致。

同时Merkle树也简化了支付校验。如果我们要校验交易5的有效性,那只要校验从交易5到Root Hash的分支Hash值即可。

区块链笔记_区块链_04


dig矿与奖励:

区块ID(hash值) = SHA256(区块头信息) <= Target

Nonce非常难猜,只能通过穷举法,从0开始,一个个试。根据定义,Nonce是一个32位的整数值,最大可以到21.47亿(正整数个数,2^32/2)。如上面的bitcoin区块截图例子,第618898个区块的Nonce值是322459559,那么意味着结点从0开始,一共计算了3.22亿次,才得到了一个有效的Nonce值,使得算出的哈希值能够满足小于等于目标值这个条件。这个过程没有任何规律可循,完全是碰运气。运气好也许一下子就找到了Nonce。运气不好可能算完了21.47亿次,都没有发现Nonce。这个时候,必须修改区块体,然后重新开始计算。

假设SHA256计算出区块头的256位哈希值中72位都为0就小于等于target目标值,那么猜中符合要求的Nonce的概率为多少呢?这实际上是一个古典概型的概率计算问题。

首先,前72位都为0的SHA256哈希值共有:2^(256-72)个,而256位哈希值共有:2^256个。那么算出符合前72位都为0的SHA256哈希值的Nonce概率为:

P = 2^(256-72)/2^256 = 2^184/2^256

也就是:1/4722366482869645213696。它大约就是4.7万亿亿分之一。换句话说,就是平均要进行4.7万亿亿次SHA计算,才可能得到一个Nonce。

我们把节点猜测Nonce随机值,使得通过SHA256计算出区块头的hash值小于等于Target目标值从而创建出新的区块的过程,形象的比喻为dig矿。而运行dig矿程序的电脑就叫“矿机”或“矿工”,一个装满矿机的房间叫“矿场”,矿场的主人就是“矿主”。

dig矿奖励费 交易手续费

区块链笔记_子节点_05


区块链笔记_子节点_06


区块链笔记_子节点_07



bitcoin上限2100万个:

奖励的初始值是50bitcoin,然后每增加21万个区块后,奖励就减半,所以北京时间2009年1月4日中本聪自己创建的第一个创世区块,就奖励给了自己50bitcoin。按照平均10分钟一个区块的产出速度,大约是每隔四年会减半一次。第一次减半发生在北京时间2012年11月29日7点24分,第21万个区块诞生,bitcoin奖励减少为25个。北京时间2016年7月10日凌晨0点46分,第42万个区块诞生,这次相隔时间大约是三年零七个月,bitcoin奖励再次减半,成为现在的12.5个。大约到2140年,bitcoin的奖励就会趋于零。

区块链笔记_子节点_08


规定bitcoin总数不超过2100万个,避免了货币滥发和通货膨胀的风险。


双花问题与51%attack

双花(double spending)问题:双重花费

比如A手中有2枚bitcoin,同时向B和C转账2枚bitcoin,那么A就把这2枚bitcoin重复花了2次。

传统中心化系统因为结算速度极快而不太可能出现这种情况

由于没有中心化的管理者,交易确认的时间会被延长,使得这种欺骗行为可能实现。

假如A手中有1枚bitcoin,一枚支付商家,同时转账给自己。

51%attack如果A掌握了全网51%的算力,那么他就有51%的概率获得下一个区块的记账权,从而维持对自己有利的长链,使得发给超市bitcoin的区块失效。

如果超市等到5个以上的区块确认之后才发货,那么A需要抢夺6次以上的记账权,概率:0.51^6,概率很低。随着用户等待区块的增加,这个难度,幂次上升。

为了达到全网51%算力所需投入的成本,一般远远大于成功实施attack后获得的收益。参与系统中的节点越多和计算能力越强,该系统的安全性也就越高。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
jlvrurfx1Mwz
作者其他文章 更多

2023-11-19

2023-11-19