当前位置:首页 » 币种行情 » eth默克尔树

eth默克尔树

发布时间: 2023-02-23 19:31:05

『壹』 挖比特币的原理

比特币每个区块的数据结构,每个区块由区块头和区块体两部分组成。区块头中包含父区块的哈希,版本号,当前时间戳,难度值,随机数和上面提到的默克尔树根。区块体中包含了矿工搜集的若干交易信息,假设有8个交易被收录在区块中,所有的交易生成一颗默克尔树,默克尔树是一种数据结构,它将叶子节点两两哈希,生成上一层节点,上层节点再哈希,生成上一层,直到最后生成一个树根。

『贰』 密码学系统

本文分为7个部分,第1部分介绍密码学的基本概念,第2部分讲解常见的对称加密算法,第3部分讲解常见的非对称加密算法,第4部分讲解 数字签名, 第5部分讲解PKI(Public Key Infrastructure),第6部分讲解哈希函数加密,第7部分讲解密码学在区块链里的应用, 最后一部分会讲解随机数。

比较常见的对称加密算法有: Digital Encryption Standard(DES), Triple-DES, IDEA, BLOWFISH。

对称加密的挑战:

非对称加密的挑战:

比较常见的非对称加密算法有: RSA, ElGamal, ECC。

菲斯特尔结构的块加密算法是著名的一个分组密码加密的设计模型。

1990年后对DES进行彻底的密钥搜索的速度开始引起DES用户的不适。 然而,用户并不想取代DES,因为它需要花费大量的时间和金钱来改变广泛采用并嵌入到大型安全架构中的加密算法。

务实的做法不是完全放弃DES,而是改变DES的使用方式。 这导致了三重DES(3DES)的修改方案。

三重DES
在使用3TDES之前,用户首先生成并分配一个3TDES密钥K,它由三个不同的DES密钥K1,K2和K3组成。

详细可以看 Triple-DES

高级加密标准(Advanced Encryption Standard,AES)是目前比较流行和广泛采用的对称加密算法。 发现至少比三重DES快6倍。
AES的功能如下:

对称密钥对称分组密码
128位数据,128/192/256位密钥
比Triple-DES更强更快
提供完整的规格和设计细节

详细可以看 AES

这个密码系统是最初的系统之一。 即使在今天,它仍然是最多被使用的密码系统。 该系统由三位学者Ron Rivest,Adi Shamir和Len Adleman发明,因此被称为RSA密码系统。

下面给出生成RSA密钥对的一个例子(为了便于理解,这里采用的素数p&q值很小,实际上这些值非常高)。

设两个素数为p = 7且q = 13。因此,模数n = pq = 7×13 = 91。

选择 e = 5,这是一个有效的选择,因为没有数字是公因子5和(p - 1)(q - 1)= 6×12 = 72,除了1。

这对数字(n,e) = (91, 5)形成公钥,可以让任何我们希望能够向我们发送加密消息的人使用。

向扩展欧几里德算法输入p = 7,q = 13和e = 5。 输出将是d = 29。
因此,公钥是(91, 5),私钥是(91, 29)。

假设发送者希望发送一些文本消息给公钥为(n,e)的人。然后发件人将明文表示为一系列小于n的数字。
为了加密第一个明文P,它是一个模n的数字。 加密过程是简单的数学步骤:
C = Pe mod n
换句话说,密文C等于明文P乘以自己e次,然后减去模n。 这意味着C也是一个小于n的数字。
回到我们的密钥生成例子,明文P = 10,我们得到密文C:
C = 105 mod 91

属于ECC的一种变化。加密的核心理念与RSA相似,也是利用离散对数很难求解。
但与RSA不同的是 公钥的组成部分,EIGamal的公钥有三部分组成, 质模数 p, 生成元素 g, 以及 公共的 Y = gx(g的x次方) mod p。
详细可以看 ElGamal Crytosystem

椭圆曲线密码术(ECC)是用来描述一套密码工具和协议的术语,其安全性基于特殊版本的离散对数问题。它不使用数字模p。ECC基于与称为椭圆曲线的数学对象相关联的数字集合。有这些数字的加法和计算倍数的规则,就像数字模p一样。

ECC包含许多最初为模块化数字设计的密码方案的变体,如ElGamal加密和数字签名算法。

相信当应用于椭圆曲线上的点时,离散对数问题更加困难。这会提示从数字模p切换到椭圆曲线上的点。如果我们使用基于椭圆曲线的变体,也可以用较短的密钥获得等效的安全级别。

较短的密钥有两个好处:
易于管理
高效的计算
这些优点使基于椭圆曲线的加密方案变体对计算资源受到限制的应用程序非常有吸引力。

详细可以看 Elliptic Curve Cryptography

^符号表示为多少次方
签名 = 消息^D mod N (D和N 为签名者的私钥,计算消息的D次方并求mod N,所得余数即为签名)
消息 = 签名^E mod N (E和N 为签名者的公钥,计算签名的E次方并求mod N)

举个例子:
私钥: D = 29; N = 323
公钥: E = 5; N = 323
消息: 123

由于 N 的值为 323, 因此消息需要为 0 ~ 322 这个范围内的整数. 假设需要对 123 这个消息进行签名.
用私钥(D,N) = (29,323) 对消息 123 进行签名.

消息^D mod N = 123^29 mod 323 = 157
因此 (消息, 签名) = (123, 157)

用公钥(E,N) = (5,323)对消息进行验证
签名^E mod N = 157^5 mod 323 = 123

得到消息 123 与发送者发送过来的消息 123 是一致的,因此签名验证成功.

https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introction/

加法逆: a在集合中, -a在集合中的定义为使 a + (-a) = 0, 这就是加法逆元运算
乘法逆: a在集合中,且不为0, a^-1 在集合中定位为使 a* a^-1 = 1, 这就是乘法逆元运算

在聊椭圆曲线前,我们先打一些基础然后再讨论一下对数问题.

在一个集合上定义一个二元运算,这就是数学中的群。一个集合 G 要成为一个群,必须满足下面 4 个条件:

从平常的加法概念来看, 整数集 Z 是一个群(而且是阿贝尔群). 自然数集 N 不是一个群.

我们可以在椭圆曲线上定义一个群:

https://andrea.corbellini.name/ecc/interactive/reals-add.html

如下图: 点 A 的自我相加过程就是做 乘法的过程 这个过程叫 Point Doubling

计算 nP 需要做 n次加法 如果 n 为 k 位二进制 时间复杂度为 O(2^k)

倍加算法 比如 n = 151 二进制为 10010111

用倍加算法 时间复杂度有了很大的改进 O(logN) or O(k)

Q = nP

这只是 p = 211, 像 Secp256k1 这条椭圆曲线的 p = 34671663 一个78位的数字 要怎么求出 n?

一个通俗的比喻: 假设这些点是有个人 A 在一个很大的房间里玩弹珠的游戏 玩了两年 两年后 A 的朋友 B来了 B看到了最后的点 以及 A 告诉B 起点 但是B怎么能知道 A 是弹了多少次才从起点弹到终点?

上面这两张图是 椭圆曲线 - Secp256K1: y^2 = x^3 + 7
第一张图: 定义在 实数域
第二张图: 定义在 有限域Zp
是用下面的参数(p,a,b,G,n,h)形成的:

p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256 - 2^32 - 997
a = 0
b = 7
G = [0x79BE667E_F9DCBBAC_55A06295_CE870B07_029BFCDB_2DCE28D9_59F2815B_16F81798,
0x483ADA77_26A3C465_5DA4FBFC_0E1108A8_FD17B448_A6855419_9C47D08F_FB10D4B8]
n = 0xFFFFFFFF_FFFFFFFF_FFFFFFFF_FFFFFFFE_BAAEDCE6_AF48A03B_BFD25E8C_D0364141
h = 1

如果椭圆曲线上一点P, 存在最小的正整数 n 使得数乘 nP=O∞, 则将 n 称为 P 的阶

计算可得 27P = -P = (3, 13) 所以 28P = 0∞ P的阶为28

如何签名?
Sig = F sig ( F keccak256 ( m ) , k )

如何计算 r

如何计算 s
s ≡ q^-1 (Keccak256(m) + r * k) (mod p)

如何验证签名?

P.S. 上述验证签名的过程中 没有用到发送者的 私钥

RSA 密钥大小(bits) ECC 密钥大小 (bits)
1024 160
2048 224
3072 256
7680 384
15360 521

有一个研究例子 同一台计算能力的计算机

为什么 比特币和以太坊要选择 Secp256k1 这条椭圆曲线?

假如有人提供一条椭圆曲线比如 Secp256r1 如何验证这条曲线的安全性?

因为公钥是公开的,很容易被破坏或者篡改,因此需要建立和维持一种可信的基础机制来管理公钥。

PKI由5部分组成:

作为比喻,证书可以被视为发给该人的身份证。人们使用驾照,护照等身份证来证明自己的身份。数字证书在电子世界中具有相同的基本功能。
但有一点不同,数字证书不仅发给人,还可以发给电脑,软件包或任何其他需要证明电子世界身份的东西。

数字证书基于ITU标准X.509,该标准定义了公钥证书和认证验证的标准证书格式。因此数字证书有时也被称为X.509证书。

与用户客户端相关的公钥与证书颁发机构(CA)一起存储在数字证书中,以及其他相关信息,例如客户信息,到期日期,使用情况,发行者等。

CA对此整个信息进行数字签名并在证书中包含数字签名。

任何需要对客户的公共密钥和相关信息进行保证的人,他都会使用CA的公钥进行签名验证过程。成功的验证可确保证书中给出的公钥属于在证书中给出详细信息的人员。

下图了展示了个人/实体获取数字证书的过程:

如图所示,CA接受来自客户端的申请以证明其公钥。 CA在适当验证客户身份后,向该客户发出数字证书。

如上所述,CA向客户颁发证书并协助其他用户验证证书。 CA负责正确识别要求颁发证书的客户的身份,并确保证书中包含的信息是正确的并对其进行数字签名。

CA的关键功能:

证书类别
有四种典型的证书类别:

第1类 - 通过提供电子邮件地址可轻松获取这些证书。

第2类 - 这些证书要求提供额外的个人信息。

第3类 - 这些证书只有在对请求者的身份进行检查后才能购买。

第4类 - 它们被需要高度信任的政府和金融机构使用。

CA可以使用第三方注册机构(RA)对要求证书确认其身份的人或公司进行必要的检查。 RA可能在客户端看起来像一个CA,但它们实际上并不签署发布的证书。

这是发布证书的管理系统,暂时或永久暂停,续订或撤销证书。 证书管理系统通常不会删除证书,因为可能有必要在某个时间点证明其身份,这是出于法律原因。 CA和相关RA运行证书管理系统,以便能够跟踪他们的责任。

虽然客户端的公钥存储在证书中,但关联的私钥可以存储在密钥所有者的计算机上。 这种方法一般不采用。 如果攻击者能够访问计算机,他可以轻松访问私钥。 出于这个原因,私钥存储在通过密码保护的安全可移动存储令牌上。

不同的供应商经常使用不同的专有的存储格式来存储密钥。 例如,Entrust使用专有的.epf格式,而Verisign,GlobalSign和Baltimore使用标准的.p12格式。

1.6 Hierarchy of CA:
由于拥有庞大的网络和全球通信的要求,所有用户从唯一一个可信的CA获得证书是不切实际的。其次,只有一个CA的可用性可能会导致大的阻碍,如果CA受到影响。

在这种情况下,层次认证模型很受关注,因为它允许在两个通信方与相同CA没有信任关系的环境中使用公钥证书。

根CA位于CA层次结构的顶部,根CA的证书是自签名证书。

直接隶属于根CA(例如,CA1和CA2)的CA具有由根CA签名的CA证书。

层次结构中下级CA(例如,CA5和CA6)下的CA具有由上级下级CA签名的CA证书。

证书颁发机构(CA)层次体现在证书链中。证书链跟踪从层次结构中的分支到层次结构根的证书路径。

下图显示了具有从实体证书到两个从属CA证书(CA6和CA3)到根证书颁发机构CA证书的证书链的CA层次结构:

验证证书链是确保特定证书链有效,正确签署和可信的过程。 以下过程验证证书链,从提供验证的证书开始 -

一个正在验证其真实性的客户端提供他的证书,通常连同证书链一直到根CA.

验证者获取证书并使用发行者的公钥进行验证。 发行人的公钥在发行人的证书中找到,该证书位于客户证书旁边的链中。

现在,如果已签署发行人证书的较高的CA由验证方信任,则验证成功并在此停止。

否则,发行人证书的验证方式与客户在上述步骤中完成的相似。 此过程将继续进行,直到在其中找到可信的CA,否则它将持续到根CA。

哈希函数非常有用,并且出现在几乎所有信息安全应用程序中。

哈希函数是将数字输入值转换为另一个压缩数值的 数学函数。 哈希函数的输入具有任意长度,但输出始终为固定长度。

哈希函数返回的值称为消息摘要或简单的散列值。 下面的图片说明了哈希函数:

为了成为一个有效的加密工具,哈希函数具有以下属性:

散列的核心是一个数学函数,该函数在两个固定大小的数据块上运行以创建散列码。 这个哈希函数构成哈希算法的一部分。

每个数据块的大小因算法而异。 通常块大小从128位到512位。 下图演示了哈希函数:

哈希算法涉及上述哈希函数,如分组密码。 每一轮都会输入一个固定的大小,通常是最近消息块和最后一轮输出的组合。

这个过程重复进行多次,以散列整个消息。 哈希算法的示意图如下图所示:

因为第一消息块的散列值变成第二散列操作的输入,其输出改变第三操作的结果,等等。 这种效应被称为散列的雪崩效应。雪崩效应对两个即使是单个数据位也不相同的消息产生明显不同的散列值。理解哈希函数和算法之间的区别。 哈希函数通过对两个固定长度的二进制数据块进行操作来生成哈希码。哈希算法是一个使用哈希函数的过程,指定如何分解消息以及如何将先前消息块的结果链接在一起。

后来在1995年,SHA-1被设计用于纠正SHA-0的所谓弱点。SHA-1是现有SHA哈希函数中使用最广泛的。它被用于几个广泛使用的应用程序和协议,包括安全套接字层(SSL)安全。

2005年,发现了一种在实际时间框架内发现SHA-1冲突的方法,使SHA-1的长期可用性受到怀疑。

SHA-2系列具有四个更进一步的SHA变体,SHA-224,SHA-256,SHA-384和SHA-512,取决于其散列值中的位数。还没有成功的攻击报道过SHA-2哈希函数。

虽然SHA-2是一个强大的哈希函数。虽然有很大的不同,但其基本设计仍然遵循SHA-1的设计。因此,NIST要求提供新的竞争性散列函数设计。

2012年10月,NIST选择Keccak算法作为新的SHA-3标准。 Keccak提供了许多好处,例如高效的表现和良好的攻击抵抗力。

该集包括RIPEND,RIPEMD-128和RIPEMD-160。此算法还有256位和320位版本。

原始的RIPEMD(128位)基于MD4中使用的设计原则,并且发现提供可疑的安全性。 RIPEMD 128位版本是解决原始RIPEMD漏洞的快速修复替代品。

RIPEMD-160是一个改进版本,是使用最广泛的版本。与RIPEMD-128和RIPEMD-160相比,256和320位版本分别减少了意外冲突的可能性,但没有更高的安全等级。

Merkle Tree 默克尔树

哈希算法的一个重要应用是默克尔树(Merkle tree),默克尔树是一种数据结构,通常是一个二叉树,也有可能是多叉树,它以特定的方式逐层向上计算,直到顶部,最顶层叫做默克尔根(Merkle Root),默克尔树最为常见和最简单的是二叉默克尔树。

『叁』 梅克尔树-Merkle Trees

梅克尔树是一种二叉树,能快速检查和归纳大量数据,可用于验证区块中交易记录的完整性。

梅克尔树是区块链的重要数据结构, 其作用是快速归纳和校验区块数据的存在性和完整性。一般意义上来讲,它是哈希大量聚集数据“块”的一种方式,它依赖于将这些数据“块”分裂成较小单位的数据块,每一个 bucket 块仅包含几个数据“块”,然后取每个 bucket 单位数据块再次进行哈希,重复同样的过程,直至剩余的哈希总数仅变为1。

在这颗数中,每个交易都可以单独删除,只需要保存好这笔交易的哈希值即可。这样一来,就可以极大的减小了每个区块的内存,可以存放更多的最新交易。所以在 UTXO 模型中,使用默克尔树结构,就无需担心数据的增长过大的问题了。

使用场景:
1、区块头维护交易的梅克尔树;
2、SPV 钱包通信的交易验证,存放该树。

欢迎留言讨论,有错误请指出,谢谢!

【联系我(QQ:3500229193)或者加入社群,请戳这里!】

『肆』 Filenet技术背简析

Filenet技术背简析:费激励层如何实现构建高效率检索分发网络?

Filenet的目标是连接一切闲置存储空间,并且在激励机制上完美解决了去中心化文件分发贡献度问题。

为何Filenet是IPFS最具创新性的产品?我们将从技术角度,参照白皮书对此予以简析。

Filenet共识机制

区块链的核心技术是共识机制,Filenet也不例外。

目前比较常用的共识机制有PoW(Proof-of-Work,工作量证明)、PoS(Proof-of-Stake,权益证明)、DPoS(Delegated- Proof-of-Stake,委托权益证明)、PoC(Proof-of-Contribution,贡献证明

PoW 机制, 需要矿工解决复杂的密码数学难题,依赖计算能力,优点是系统安全可靠,缺点是消耗能源和计算能力、有 51%算力攻击可能、吞吐量小。

PoS 机制, 根据权益选举矿工打包数据,优点是不消耗资源,缺点是安全性较低,且股权越多的人话语权越高。

DPoS 机制, 多数有投票权的人将投票权委托给少数节点来代理,优点是系统效率高、吞吐量和并发数高,缺点是话语权掌握在少数节点手上并不安全。

PoC 机制, 根据节点所做的贡献来分配打包权,优点是不浪费资源、按劳分配,缺点是贡献的计算方法要根据具体的场景来定。

区块链 3.0 时代,Filenet共识机制朝着 不浪费资源,且最大程度考虑安全性,并优化吞吐量和并发数的方向发展。

Filenet有向无环图

比特币的区块链结构是一个单向链表,这种结构是区块链早期采用的,存在很多问题, 如区块存储容量小、交易速度慢、数据总量大、单节点存储压力大以及每秒交易数少。

(有向无环图)

而DAG(Directed

Acirclic Graph,有向无环图)是一种新型的区块链数据结构。

DAG和链表结构都能由上一个节点来确定下一个节点。 所不同的是,链表结构只能是一对一,而DAG支持一对多、多对一,但不会产生回环。

也就是通过前面节点来验证后面节点保持一致,但链表结构同一时间只能有一个分支,而DAG结构可以有多个分支,故DAG结构并发数更高,同时存储的数据更多。

同时,DAG记账是一个异步的过程,数据是弱同步,可以接受一定程度的数据差异,在后续异步确认过程中再进行修正。 这样可以极大地节省确认时间,提高交易速度。

Filenet默克尔树

默克尔树是快速验证数据的一种方式,在比特币中也有采用,在点对点数据传输等领域也广泛采用。

(默克尔树示意图)

默克尔树将数据分成很多小块,每一块计算出一个hash值,多个数据块合并生成一个hash值(一般是两个数据块), 最终生成并汇集到一个根节点, 生成一棵树(一般是二叉树)。

由于数据分块,并且提供了hash值索引,在数据很大或是点对点系统中,不用得到所有数据,再验证数据是否正确。

哪怕只得到了一小块数据, 只需要在这棵树上找到数据所在的位置,确定树上关键位置的数据和hash值,就能验证数据是否正确。

建立一个去中心化的文件存储和分享网络,是一个非常有吸引力和激动人心的愿景,而Filenet作为一个创新的免费激励层,完美实现了最高效率的分发。

可以预见,Filenet的综合技术优势,将带给它巨大的实用价值和广阔的想象空间。

PS.还未注册 Filenet早期矿工 的粉丝们请抓住最后的申请时间

『伍』 区块链-默克尔树

Merkle 树是一种组织和构造大量数据以使其更易于处理的方法。在加密货币和区块链的情况下,Merkle 树用于以对资源要求较低的方式构建交易数据。

当在 Merkle 树结构中进行加密货币交易时,它会被散列,然后被赋予一个等效的散列值。每笔交易在 Merkle 树中散列后,产生的散列值与另一个散列值配对,然后再次散列。例如,将散列值“AB”和“AC”组合起来创建“ABC”。

重复这个配对散列值的过程,直到产生最终的散列值。最终的哈希值,即默克尔根,提供了它包含的所有交易的摘要。然后将 Merkle 根摘要插入到块头中。

Merkle 树结构提供了一个区块中交易的易于访问的记录。因此,检查块中的数据是否已更改或篡改非常简单。这是真的,因为对 Merkle 树中的交易(或任何其他相关数据)的任何更改都会导致完全不同的对应 Merkle 根。

如果加密货币不使用 Merkle 树,则每个验证请求都将涉及通过网络发送的大量信息。在 Merkle 树中构建交易数据是一种更有效的资源利用。验证交易不需要账本的完整副本,因为可以在 Merkle 根中验证散列的交易数据,需要在节点间发送的信息少得多,因此分析整体数据完整性的计算能力也更少。

换句话说,Merkle 树结构使用户能够验证单个交易是否已包含在一个区块中,而无需经过下载整个区块链的过程。该技术是加密货币组织交易数据并像它们一样高效运行的重要工具。如果没有默克尔树,对资源的更大需求很可能会导致参与网络的节点更少。

『陆』 006:MPT与RLP|《ETH原理与智能合约开发》笔记

待字闺中开发了一门区块链方面的课程:《深入浅出ETH原理与智能合约开发》,马良老师讲授。此文集记录我的学习笔记。

课程共8节课。其中,前四课讲ETH原理,后四课讲智能合约。
第二课分为三部分:

这篇文章是第二课第二部分的学习笔记:MPT与RLP。

MPT,Merkle Patricia Tree,结合了Merkle Tree(默克尔树)和 Patricia Tree(帕特里夏树)的一种数据结构。
RLP,Recursive Length Prefix,一种编码方法。

这是两个非常重要的数据结构,在以太坊的区块和交易中都有用到。

先分别介绍一下Merkle Tree 和 Patricia Tree。
Merkle Tree 和 Patricia Tree Merkle Tree 和 Patricia Tree
默克尔树的解释:对每一个交易计算其散列值(Hash),再对两个散列值求他们的散列值。如果是奇数个,就把最后一个重复一次。最后得到的一个散列值就是默克尔树根的值。如图,交易1、1、2、3的散列值分别是HASH0、HASH1、HASH2、HASH3。HASH0和HASH1结合在一起计算散列值得HASH01,HASH2和HASH3结合在一起计算散列值得HASH23,接下来HASH01、HASH23结合在一起,计算散列值得HASH0123。

采用默克尔树的好处是可以方便的判断一个交易是否在区块中。

Patricia Tree,可称为压缩前缀树。如上图右半部分。相同的前缀在同一分支中,后面一同的部分分叉出来,如test和toast,都有相同的t,est和oast在两个分支中。

这个结构的好处是节省空间,因为每一级的键值可以是多个字符。

了解了Merkle Tree 和 Patricia Tree后,再来看这两者混合后的产物——MPT。
这里的原理知识单独来看不易理解,和具体的例子结合起来才更容易理解,此处先放上课件截图。在后面的例子中再做说明。
Merkle Patricia Tree 规格 Merkle Patricia Tree 规格
在MPT中,还涉及到三个小的编码标准。主要规则如图。下面结合两个例子说明一下。
三个编码标准 三个编码标准
HEX编码的例子:从ASCII码表中可以查出,b的十六进制编码为62,o的十六进制编码为6F,F在十六进制中就是15的意思。因为这是个叶子节点,最后加上0x10表示结束,也就是16。所以最后的编码为[6 2 6 15 6 2 16]

HEX-Prefix编码的例子:[6 2 6 15 6 2 16],将其最后的0x10去掉,[6 2 6 15 6 2]。前面补一个四元组,其中(倒数)第0位是区分奇偶信息的,[6 2 6 15 6 2]是偶数位,第0位是0;第1位是区分节点类型的,这是叶子节点,第1位是1。所以这个四元组就是0010是2。“如果输入key的长度是偶数则再添加一个四元组0x0在flag四元组之后。”,所以,最终的前缀是0x20。本例最终的结果,[32 98 111 98],即[0x20, 0x62, 0x6F, 0x62]

下面是综合性的例子,通过它可以很方便地理解前面的理论知识。值得多看几篇,仔细休会。

初始的key-value对为:

其中,<>中的数据为key的16进制编码。
MPT.jpg MPT.jpg
因为4组数据都有公共的6,所以这个节点的值为6,长度为1,奇数;节点类型:扩展节点;所以前缀就是0001,即1。

这是个扩展节点,它的值是一个Hashvalue,它指向一个分支节点。Hashvalue,具体指的是分支节点RLP编码的结果的散列值。(RLP见下小节)

分支节点。上面4组数据的第2位是4和8两种情况。在4的位置上存的是下面的扩展节点的散列值,在8的位置上存的是下面的叶子节点的散列值。

叶子节点。以68开头的只有一个了。所以这个节点上的四元组就是6f727365了。它是偶数位。前缀是0x20(同前文HEX-Prefix编码的例子)。这个叶子节点的value值为'stallion'。

扩展节点。在64之后,公共的部分是6f,这个扩展节点的key即为6f,前缀为0000,即00。这个扩展节点的value存放的是一个hashvalue,指向下一个节点,一个分支节点。

分支节点。646f已经表达完,这个节点的value值就是646f对应的值,'verb'。

除此之外,646f之后就是6,所以在这个分支节点的6位置上有一个散列值,指向下一个节点。

扩展节点。在646f6之后,公共的部分是7,其长度为1,奇数。所以前缀为0001。这个节点的value是一个散列值,指向下一个节点。

分支节点。646f67已经表达完,这个节点的value值就是646f67对应的值,'puppy'。

除此之外,646f67之后就是6,所以在这个分支节点的6位置上有一个散列值,指向下一个节点。

叶子节点。key为5,value为'coin'。长度为1,奇数,前缀0011,即3。

整个分析过程结束。可结合上图和前文的理论多加复习。

这小节也是理论性较强,通过例子可以方便理解。先放上课件,再根据我的理解举更多的例子。同样,学习方法也是理论和例子配合学习。其中,list的例子在下篇文章的上机实验部分再列举。 RLP的编码标准 RLP的编码标准 再举几个例子 再举几个例子

『柒』 交易数据是写入区块链的哪个部分

现实的区块链直接将内容数据(如交易数据)存储在数据库中,称为默克尔树,然后将默克尔树的跟存储在区块头。
_默克尔树具有非常独特的属性,使我们能够在对等网络中进行有效的数据验证。默克尔树是二叉树,其中节点存储哈希,而不是排序存储数据块。 https://right.bdstatic.com/vcg/edit/.jpg
区块链,就是一个又一个区块组成的链条。每一个区块中保存了一定的信息,它们按照各自产生的时间顺序连接成链条。这个链条被保存在所有的服务器中,只要整个系统中有一台服务器可以工作,整条区块链就是安全的。
这些服务器在区块链系统中被称为节点,它们为整个区块链系统提供存储空间和算力支持。

『捌』 关于比特币的谜题(完结)

你可曾想过: 为什么矿机算力越大越好?(既然是解数学题那为什么不是拼谁的算法厉害啊喂!) 比特币的数量总和为什么是2100万? 比特币盗窃是怎么回事? 我不玩比特币,就真的与比特币无关了吗…… 🤔️

关于大众不再感到陌生的比特币,背后还有许多巧妙之处。本文介绍了比特币的基本原理和主要原则,并结合对部分技术细节的剖析,来对上述的一些疑问作出解答。全文较长,约7000字,阅读时间约为22分钟,建议收藏后阅读😁

文章可以分成以下几个部分:

* 比特币先验知识

        -- 密码学相关

        -- 比特币重要概念

* 交易的生命周期

* 区块链的构成

* 区块链的生长

         -- “挖矿”的数学本质

         -- “矿工”的收益

* 比特币的共识机制

          -- 比特币的去中心化共识

          -- “最长链优先”原则

* 比特币安全性

比特币作为第一个去中心化的数字货币,其设计中运用了不少的密码学相关知识,主要包括非对称加密技术、哈希函数等等。理解这些密码学知识,能帮助我们更好地理解比特币中的一些概念及规则。

以下是比特币的一些定义及概念解说,了解过的小伙伴们可以直接跳过~

在比特币这个创新的支付网络中,一个交易的生命周期大概可以分为几个阶段:创建、传播和被验证交织、被打包进区块记录到区块链中、获得更多的确认。图1对这几个阶段做出了示意。

注:

1⃣️一个支付方A在发起一个比特币交易时,会使用自己的私钥对交易信息的哈希值进行签名。因此A向全网广播的内容除了交易信息之外,还有自己的公钥信息、对消息的签名。其他矿工只要利用A的公钥即可对这个交易进行验证,判断是否真的由A创建。

2⃣️”交易传播和交易验证“交替意味着 各个节点基于一定的规则独立验证每个交易(共识基础1) , 一个节点只有认为这个交易有效才会把它继续传播出去。

比特币的底层技术是区块链。区块链系统是一种分布式共识系统,区块链网络中所有的参与节点将就交易的状态达成一致。

区块链到底是什么呢?你可以把它理解成一种分布式的交易的共享账本,以区块为基本单位链接在一起。交易信息将被整理并打包记录在区块中。每一个区块,包含区块头,以及紧跟其后的交易列表。区块头包含3个区块元数据集合:前序区块哈希(严格来说是前序区块头哈希,因为只有区块头被用于哈希运算)、元数据集(包括难度、时间戳、随机数等)、一个基于加密哈希来高效概括区块中所有交易的默克尔树(merkle tree)。了解这个结构,将帮助我们更好地理解挖矿的数学本质。

你可能听说过“挖矿”这个词,或者听说众人争相购买挖矿机器来发家致富。但让人疑惑的是:都说打包区块的本质是解数学难题,但单凭那些看似简陋的机器嗡嗡嗡疯狂耗费电力,就能确保自己解出比特币难题的胜率高了吗?比特币技术原理中,矿工们解决的数学题,难道是一个暴力破解题?

看了一圈,发现矿工们解决的题,还真有点暴力破解的意思,每次尝试解题的过程几乎都是茫茫然、去碰运气的。拼的是谁足够幸运,也拼谁算的足够快;算的快了么,试错次数多,自然胜算也就大了。

解题的背景是这样的—— 挖矿节点通过基于工作量证明算法(Proof-of-Work,POW)的证明运算,独立将交易汇聚到新区块中(共识基础2)。 当矿工从网络中接收到一个新的区块的时候,他发现自己已经在上一轮竞争中失败了,所以立即开始新区块的挖矿过程。为了创建一个新的区块,他从内存池中选择交易来填充区块(加入区块的第一笔交易是一个“铸币交易”,3.2节会给出详相关细节)。接下来是填充字段来创建区块头(包括前序区块的区块头哈希、交易的默克尔树(Merkel树)、时间戳、难度目标值、随机数),然后开始计算这个新区块的工作量证明。

这个计算的过程简单来说是对区块头部进行两次sha256运算,得到一个RESULT,如果这个RESULT满足特定要求,这个人才能算是算对了、才有权利去记账。满足要求的RESULT被称为“工作量证明”(中本聪论文中称为“proof of work”)。

关于这个计算过程,强调以下几点:

第一,区块头部,包含了前序区块头部的哈希、本区块交易信息的默克尔树、时间戳、难度目标值、随机数等信息(见图2)。

第二,哈希运算具有“知道y,无法推出使得h(x)=y成立的x”、“即使输入只改变一点点,输出也会差很多”、“利用任意长度的数据作为输入,生成一个固定长度的确定结果”的特性。所以大家也不知道什么样子的输入才能产生自己想要的结果,矿工只能不断尝试。

第三,前面说到,区块头哈希值需要满足一个特定要求才能成为工作量证明——小于某一阈值,或者说哈希值含有给定前缀。阈值的大小求和挖矿难度有关:挖矿难度是一个动态参数,其值越大,则阈值越小,说明哈希值符合要求的概率更小,矿工每次计算能成为工作量证明的概率越小。比特币有一个自我调节过程——通过对现有的挖矿算力情况进行估算,来对应调整挖矿难度,可以保证区块链每十分钟出一个块,达到控制发行速度的目的。(这个过程的基本思想类似产品笔试的数据估算题,根据“一个提供、一个需要“的思路去构造一个等式,然后求解等式一边的一个因子;想了解挖矿难度系统和调整方式的同学可以进一步查阅~)

综合以上三点来看,为了产生工作量证明,用户基本上会通过调整随机数来碰运气(因为其他字段基本不变)、进行多次运算直至符合要求,别无他法。如此一看,随机数就具有“幸运数字”的意味了。因此,平均来讲,谁计算的能力越强(尝试的次数越多),就更有希望打包块。

你可能会想,矿工这么心甘情愿地消耗算力去维护区块链,是受到怎样的利益驱使呢?简单来说,矿工的收益来源有二:1、计算出工作量证明,创造一个新区块所获得的新币奖励;2、记账矿工费。

当矿工找到工作量证明、打包一个新区块,并把区块传送给他的所有对等节点。 每一个挖矿节点都独立验证新区块、把合格的新区块整合进区块链(共识基础3) ,并把这个区块继续传给自己的对等节点。结果是,只有经过验证的区块才会在网络当中广泛传播,保证了诚实矿工挖出的新区块能被区块链所接纳。挖矿成功的个体节点或集体节点,可以同时获得新币奖励和记账矿工费。

新币奖励类似于货币的发行,其遵循规则是,第一个四年每一个新区块产生50btc,第二个四年每一个新区块产生25btc,第三个四年每个新区块产生12.5btc,如此周期指数递减。按照等比数列求和可知,到2140年,比特币产生的总和约为21000000(所以说比特币数量有限,天生紧缩)。届时,不再随区块的产生增加新的比特币,矿工不再拥有第一项收益。但现实中,由于挖矿成本高昂,挖矿成功的往往是是一个矿池的所有参与者。收益被分给矿池地址,矿池按照组内算力贡献比例来分摊收益的。

记账矿工费又称交易费用,以交易输入和交易输出之间的差值的形式存在;一个区块的总交易费用是对加入区块的所有交易的(交易输入-交易输出)求和。一般来说,矿工费越高的交易,会越快被处理。而矿工费在这里起到两个作用,一个是奖励矿工,另一个是防止主链滥用(防止大家发送交易垃圾信息,因为提出交易是有一定代价的)。

矿工的收益以什么样的形式被验证呢?这里不得不提到 “铸币交易” 。每个计算机节点在进行工作量证明计算之前加入区块的第一笔交易,正是“铸币交易”。这个交易从无到有生成比特币,其金额是新币奖励与记账矿工费的总和,被支付到挖矿矿工自己的比特币地址。如果矿工找到了一个工作量证明使区块有效,他就赢得了这个奖励,因为他构造的“铸币交易”生效了。

关于铸币交易和“新币奖励”,之前有一个读者问我:一个矿工把自己挖到新区块的消息公布出去,他的工作量证明 不会被别人剽窃 吗?

个人认为,至少“铸币交易”能防止这件事情发生。让我们来重申一下计算工作量证明的过程——一个矿工E在新区块里加入了奖赏自己的“铸币交易”,并利用时间戳、前序区块头哈希、随机数、本区块交易的merkle树等信息计算出一个符合要求的工作量证明。

在这个过程中,merkle树啥样子,取决于包括“铸币交易”在内的本区块所有交易信息。因此可以把铸币交易视为工作量证明的间接变量之一。那么,即使其他人拿到了E的工作量证明,这个工作量证明也是带有E的印记的、与奖赏E的铸币交易相关的,别人根本无法纳为己用。

你还可以通过设想以下的场景来加深对共识基础2“挖矿节点通过基于工作量证明算法的证明运算,独立将交易汇聚到新区块中”的理解。

为什么一个挖出新区块的矿工不悄悄使个心眼,在创建区块之初就把铸币交易的金额设成1000BTC呢?原因在于每个节点都是基于相同的规则来独立验证区块的。矿工必须创建完美的、符合公共规则的、正确依据工作量证明方法的区块;而一个无效的铸币交易会导致整个区块无效,并被其他节点拒绝,永远无法成为账本的一部分。可以预想,为了生成这个工作量证明,矿工们已经投入了巨大的算力和电量去挖矿,如果涉嫌欺诈而被否决,其为挖矿付出成本都付诸东流。

综上所述,矿工不能冒领他人的奖励,而拿到奖励的矿工也必须只能拿取符合规定的数额。

   比特币的卓越之处,在于建立了一种去中心化的自发共识。这种共识是自发产生的,是成千上万在网络中遵循着共同规则的节点,在异步交互中形成的,不依赖于任何中央机构的调解和干涉。

   关于比特币的4项主要共识基础,本文在讲解对应细节时有提及,下面做一个整合:

     这四个过程相辅相成、互相作用,形成了自发的全网共识,促使全网节点组合出可信、公开、权威的总账。  

你可能会想,比特币是一个去中心化的、基于大众信任的、依靠众人力量运转的一个东西。万一有一部分矿工被坏人收买了咋办呢?“51%攻击”指的又是什么?比特币交易所要求的“6个确认”又是怎么回事?

这里首先要提到比特币的一个规则“ 最长链优先 ”。意思是, 比特币的账单链在出现分叉的时候,每个矿工会独立选择长(累积了最多工作量证明)的链条,在上面继续挖矿工作(共识基础4) 。

这个原则主要涉及到两个问题:

当有两个矿工A和B同时挖矿成功(算出符合要求的数学答案)时,他们分别把自己计算出来的工作量证明作为下一个块的前序区块哈希,生成一个块衔接到原有的链后面,由此出现了两个分支。

这个时候,这两个成功的矿工广播了自己打包成功的消息。由于区块链是一个去中心化的数据结构,区块消息到达不同节点的时间点不一致,故不同的节点可能拥有不完全一样的区块链视图——有的矿工会先收到A的消息,有的则先收到B的消息。为了解决这个问题,收到消息的矿工们遵循一个原则:选择并尝试延长最长的链。

因此,这两条分支会各自成长一小段时间,直到他们的长度出现差异(不可能长度一直相同),比如说其中一条链的矿工们,更快地打包在支链后面又加上一块。按照“最长链优先“的规则,较短的链会被抛弃,原本工作在短链上的矿工们都回到长链上工作。

换言之,分叉只是不同节点暂时的不一致现象,当新区块被加入到其中某一分支时,最终收敛将解决这一个问题。[读者可以思考一下,为什么区块链被设置成每十分钟挖出来一个块:如果时间短了,是不是就增加了分支产生的次数?如果时间长了,是不是交易结算的效率就太低了?]

双重支付的本质其实也是区块链的分叉,但这种分叉却是“非自然恶意蓄谋”的产物。

我们假设小敏是密谋双重支付的一方,她把自己仅有的10BTC先给小强、交换一块黄金,待这条交易信息P被打包进区块Q后,她从小强手中拿到了黄金。这时,小敏使了个心眼,她想偷偷抹去、篡改区块Q上的交易信息P,“白嫖”这块黄金。为了实现这样的目的,根据“最长链优先”法则,小敏必须剔除该笔交易P后、重新进行结算工作,集中算力来形成分叉,并让分叉以更快的增速超过并取代Q所在的主链。如果小敏确实能让分叉更长,分叉就成为了主链,其他节点也会转向新主链上继续工作。这样,小强付出了黄金,却没有收到这10个比特币,“赔了夫人又折兵”。

在这个过程中,小敏需要和原链进行“抗争”,使新分叉成为最长的主链,这被称为“共识攻击”。“共识攻击”本质上是对下一区块的争夺,攻击方越“强壮”、哈希算力越大,就越容易成功。

“共识攻击“成功的可能性有多大呢?

大多数比特币交易所规定,一个交易传送到区块链上后需要6个「确认」来完成验证该笔交易。这一规定的根据是,假设意图造假的矿工拥有10%的算力(挖矿成功概率0.1),那么造假矿工要构造另一条伪链实施长度超越,必须至少成功挖矿6次。那么原链被取代、被抛弃的概率约为0.1的6次方,趋近于0。你可以把比特币理解为地质构造层,表层可能因为季节变换而有所改变,甚至可能被风刮走,但一旦深入到地下,地质层就能更加稳定、不受干扰。

而假设有一群拥有了51%算力的矿工,他们控制了一半以上的全网哈希算力,可以故意在区块链中制造分叉、进行双重支付交易 。但事实是,全网哈希算力的大量增加,个体矿工几乎不可能控制哪怕1%的哈希算力了(但矿池带来的算力集中化控制,存在一定的风险)。更何况,如果真有拥有如此强大算力的组织,他完全可以凭借自己强大的算力投入到挖矿中去获取开发新区块所获的的比特币奖励,诚实挖矿比双花更有利可图。

尽管实际上并未出现51%攻击的问题,但不可否认的是,算力的集中违背了比特币去中心化这一初衷,并成为其继续发展的一大隐患。

一个系统的安全性,往往取决于系统安全的最薄弱环节,这也就是所谓的“木桶原理“。与区块链系统相关的安全性问题包括但不限于以下几项:

(1)在区块链上被广泛使用的公钥系统基本上是安全的,但量子算法在理论上能够破解公钥系统;因此,区块链的算法安全性是相对的。

(2)区块链协议本身存在逻辑缺陷,例如受到黑客攻击的区块链系统共识机制。

(3)所有数字货币系统高度依赖私钥,私钥在存储、使用方面的安全性成为区块链系统安全性中至关紧要的一环。

尽管区块链是去中心化系统,但目前绝大多数数字交易所却是中心化的,存在着人为安全漏洞及技术安全漏洞。这些数字交易所拥有存放大量加密货币的私钥,这对于黑客来说无疑是最瞩目的目标;只要黑客偷走了这些私钥,就可以获取到这些加密货币。

作者会继续阅读相关资料、不断完善本文,目标是完成一篇通俗易懂的比特币科普文章。:)

**本文系网上信息与个人理解的结合,如有偏差及误读,欢迎读者指出。也欢迎给出关于文章结构上的指导~

『玖』 什么是默克尔树

默克尔树(Merkle tree)是一种哈希二叉树,1979年由Ralph Merkle发明,将数据存储在树状结构的叶子节点中,并通过对数据的逐级哈希(Hash)操作确保数据的不可篡改性。叶子节点数据的任何变动,都会传递到上一级节点并最终反应到树根的变化。比特币区块里面的每一笔交易就是通过默克尔树结构进行存储的。

『拾』 用途是什么意思

用途的意思是指应用的层面和范围,也指一种多种用途的工具。

热点内容
数字货币应用模型如何建立 发布:2025-07-16 05:23:30 浏览:886
什么ETH矿机静音效果好 发布:2025-07-16 04:54:52 浏览:886
币圈共振现象 发布:2025-07-16 04:54:44 浏览:3
有人叫我帮买比特币 发布:2025-07-16 04:15:30 浏览:526
阿里云区块链证书 发布:2025-07-16 04:11:00 浏览:961
新民艾滋病可以去沈阳疾控中心吗 发布:2025-07-16 04:05:53 浏览:84
eth怎么卖成人民币 发布:2025-07-16 03:57:02 浏览:603
从东站去郑州金水区会展中心 发布:2025-07-16 03:33:51 浏览:543
区块链技术和比特币哪个先有 发布:2025-07-16 03:30:21 浏览:94
比特币的历史价格和现行价格 发布:2025-07-16 03:17:19 浏览:912