主页 > imtoken苹果版国外 > 史上最详尽的区块链技术架构解析

史上最详尽的区块链技术架构解析

imtoken苹果版国外 2023-05-30 06:21:15

本文约7900字+,阅读(观看)需46分钟

数据层是最底层的技术,主要实现两个功能:数据存储、账户和交易的实现和安全。 数据存储主要基于Merkle树,通过区块和链式结构实现,大部分以KV数据库的形式持久化,如比特币和以太坊使用的leveldb。 账户和交易的实现和安全基于数字签名、哈希函数、非对称加密技术等多种密码学算法和技术,确保交易可以在去中心化的环境中安全进行。

数据层的系统模型有很多,比如比特币的UTXO模型,迅雷链的账户模型等。

(1)数据存储系统——数据库

数据层的一大功能是存储,存储系统的选择原则是性能和易用性。 网络系统的整体性能主要取决于网络或本地数据存储系统的I/O性能。 例如,比特币使用谷歌的 LevelDB。 据说这个数据库的读写性能很好,但是很多功能需要开发者自己实现。

数据库的历史:在IT界,其实是一个特别古老的研究领域。 从最初的文件系统到后来的ER实体关系模型。 实体关系模型的提出催生了一系列伟大的数据库公司和软件,如IBM的DB2、Sybase、Oracle、微软的SQLServer、MySQL等。 并且,这导致了传统数据库的三大成就,关系模型、事务处理和查询优化。 后来随着互联网的普及,以MangoDB为代表的NOSQL数据库兴起。 数据库技术本身也在不断发展,一直是热门方向,包括以XML为代表的半结构化数据,以及以文本、语音、图像等为基础的非结构化数据处理。

随着实际需求的不断升级,数据库也在不断发展。 通过ER实体关系模型和NOSQL,可以很好的解决数据存储和数据访问的可扩展性问题。 在我们通过NOSQL数据库、云存储等技术解决了互联网海量数据的处理问题后,下一个问题接踵而至。 也就是如何以规模化的方式解决数据的真实性和有效性问题。

区块链数据库与传统分布式数据库的比较。

从图中可以看出,区块链的数据库技术仍然是数据库,知识在管理权限、数据节点分布、去中心化等方面有所不同。 区块链数据的不可变性必然伴随着数据存储的扩展。 这会是一个问题吗?

(2)块数据(Block)

区块数据主要用于存储交易数据,不同的系统采用不同的结构。 下面以比特币的区块结构为例进行介绍。

比特币交易记录将存储在数据块中。 在比特币系统中,大约每 10 分钟就会产生一个区块。 每个数据块一般包括两部分:块头(Header)和块体(Body)。 如图2-1所示。

块结构:

区块头结构说明:

比特币区块链格式可以参考:

区块链的数据结构成员分散存储在底层数据库中,最终存储形式为[k,v]键值对,使用的[k,v]底层数据库为LevelDB; 与交易操作相关的数据,它呈现的集合形式为Block; 如果以块为单位链接,则形成更大粒度的区块链。

(3)链式结构(chain)

从上面的区块结构可以看出,每个区块都保存了前一个区块的哈希值,从而将这些区块连接起来。

(4)默克尔树

默克尔树(Merkle tree,MT)是一种哈希二叉树,由Ralph Merkle于1979年发明。在计算机科学中,二叉树是一种树状结构,每个节点最多有两个子树,每个节点代表一段结构化数据。 通常子树被称为“左子树”和“右子树”。 二叉树常用于实现快速数据查询。 二叉树如下图所示。

A. Merkle树结构

它由一个根节点(root)、一组中间节点和一组叶节点(leaf)组成。 一个叶子节点(leaf)包含存储的数据或者它的哈希值,一个中间节点是它的两个子节点的内容的哈希值,一个根节点也是由它的两个子节点的哈希值组成内容。 所以默克尔树也被称为哈希树。

B.哈希树的特点

叶子节点存储数据文件,而非叶子节点存储其子节点的哈希值(Hash,通过SHA1、SHA256等哈希算法计算)。 这些非叶节点的散列称为路径散列。 Value(根据它可以确定从一个叶子节点到根节点的路径),叶子节点的Hash值就是真实数据的Hash值。 因为使用了树结构,所以查询的时间复杂度为O(logn),其中n为节点数。

Merkle 树的另一个特点是底层数据的任何变化都会传递到它的父节点,一直传递到树的根。

C、申请方式

Merkle树的典型应用场景包括:

l 快速比较大量数据:当两个Merkle树的根相同时,说明所代表的数据一定是相同的(由hash算法决定)。

l 快速定位修改:如上例中,修改D1中的数据,会影响到Hash0-0、Hash0和Root。 因此,沿着Root --> 0 --> 0-0,可以快速定位到变化的D1;

l 零知识证明:比如如何证明某个数据(D0...D3)包含给定的内容D0,很简单,构造一棵Merkle树,发布N0,N1,N4,Root,以及D0 的所有者可以很容易地检测到 D0 存在,但其他一切一无所知。

与Hash List相比,MT的一个明显优势就是可以拿出一个分支(像一棵小树)来验证部分数据。 这带来了Hash List在很多场合无法比拟的方便和高效。 .正是因为有这些优点,MT才经常被用在分布式系统或者分布式存储中

D.分布式存储系统中的应用原理

为了保持数据的一致性,分布式系统之间的数据需要同步。 如果机器上的所有数据都进行比较,那么数据传输量就会很大,造成“网络拥塞”。 为了解决这个问题,可以在每台机器上构建一个Merkle Tree,这样两台机器之间比较数据时,从Merkle Tree的根节点开始比较。 如果根节点相同,说明两个副本当前一致比特币的加密算法破解,不需要处理; 如果不相同,则沿着哈希值不同的节点路径查询,快速定位到数据不一致的叶子节点,只需要同步不一致的数据即可。 大大节省了比较时间和数据传输量。

E. 比特币中的默克尔树

Merkle 二叉树用于比特币区块链系统。 它的主要功能是快速总结和验证区块数据的完整性。 它将对区块链中的数据进行哈希运算,向上进行递归运算。 生成一个新的哈希节点,最后区块头中只存储一个Merkle根,每个哈希节点总是包含两个相邻的数据块或它们的哈希值。

在比特币系统中使用 Merkle 树有很多优点:首先,极大地提高了区块链的运行效率和可扩展性,使得区块头只需要包含根哈希值,而不需要封装所有的底层数据,这使得哈希可以在智能手机甚至物联网设备上高效运行操作; 其次,默克尔树可以支持“简化支付验证协议”(SPV),即无需运行完整的区块链网络节点即可处理交易数据。 测试。 因此,在区块链中使用默克尔树这种数据结构是非常有意义的。

Merkle树的计算可以参考:

(5) 哈希函数

Hash,一般译为“哈希”,也有直接音译为“散列”的,即通过哈希算法将任意长度的输入(也称为预映射原像)转换为固定长度的输出,输出是哈希列值。 这种转换是一个压缩映射,即哈希值的空间通常远小于输入的空间,不同的输入可能会哈希到同一个输出,因此无法从哈希中确定唯一的输入值价值。 简单的说就是将任意长度的消息压缩成固定长度的消息摘要的函数。

散列可以将数据从一维映射到另一维,通常使用散列函数。 通常业界使用y = hash(x)的方式来表达,哈希函数对x进行运算,计算出一个哈希值y。

一、哈希算法的特点

l 哈希算法接受一段明文后,以不可逆的方式转换成一段长度较短、位数固定的哈希数据,计算效率高。

l 无碰撞是指发生碰撞的概率很小,如果两个哈希值不一样(根据同一个函数),那么两个哈希值的原始输入也不同; 如果两个哈希值相同,则这两个输入值很可能相同,但不是绝对一定(哈希冲突是可能的)。

l 原始信息隐藏能力:例如区块链中节点间交易的验证只需要验证交易的信息熵,而不需要比对原始信息,也不需要在节点间传递交易的原始数据节点,只有交易哈希就足够了。 常见的算法有SHA系列和MD5算法。

l 加密过程不可逆,即无法从输出的哈希数据中推导出原始明文。

l 输入的明文和输出的哈希数据是一一对应的。 输入信息的任何变化都必然导致最终输出的哈希数据发生变化,发生冲突的概率很小。

B. 哈希的使用

哈希在区块链中被广泛使用。 其中之一称为哈希指针。 哈希指针是指变量的值是从实际数据中计算出来的,指向实际数据位置,即它既可以代表实际数据内容,也可以代表实际数据的存储位置。 如下所示:

HashPointer 在区块链中主要有两个用途。 首先是构建区块链数据结构。 从上面的区块数据结构我们可以知道,每个区块都包含前一个区块的哈希值(即哈希指针),这样做的好处是可以在后一个区块中查找到之前所有区块中的信息,并且该区块的HashPointer的计算包含了前一个区块的信息,从而在一定程度上保证了区块链的不可篡改特性。 第二个用于构建Merkle Tree。 Merkle Tree 的每个节点都是使用 HashPointer 构建的。

区块链技术基本架构(史上最详细的区块链技术架构分析)

哈希还用于其他技术,例如交易验证和数字签名。

(6) 加密算法

加密是将原始信息通过算法进行转换的过程,接收方可以通过密钥对密文进行解密,恢复为原始文本。 加密算法的典型组成部分包括加密和解密算法、加密密钥和解密密钥。 加解密算法固定且公开可见; 密钥不固定,需要保护。 一般来说,同一种算法,密钥长度越长,加密强度越大。

加密过程是通过加密算法和加密密钥对明文进行加密得到密文。

解密过程是通过解密算法和解密密钥对密文进行解密得到明文。

根据加解密密钥是否相同,算法可分为对称加密(symmetric cryptography,又称公钥加密,common-key cryptography)和非对称加密(asymmetric cryptography,又称公钥加密,公钥密码学)。 两种模式适合不同的需求,恰好相辅相成。 在很多情况下,它们还可以组合使用,形成混合加密机制。

并非所有加密算法的强度都可以通过数学证明。 公认的高强度加密算法是大家经过长时间的各方面实践论证得到认可的,并不代表它没有漏洞。 但在任何时候,自己发明一种加密算法都是不明智的行为。

A. 对称加密

使用相同的密钥进行加密和解密。 对称加密的优点是加解密效率高(速度快,占用空间小),加密强度高。 缺点是所有参与方都需要持有钥匙。 一旦有人泄露,安全性将被破坏。 如何在不安全的通道下分发密钥是一个关键问题。

加密过程:原文+密钥=”密文;解密过程:密文-密钥=”原文。

对称密码从实现原理上可以分为两种:分组密码和序列密码。 前者将明文分成固定长度的数据块作为加密单元,应用最为广泛。 后者只加密一个字节,密码不断变化,只用于一些特定领域,如数字媒体的加密。

代表性算法包括:

l DES(Data Encryption Standard):经典的块加密算法,1977年被美国联邦信息处理标准(FIPS)采用为FIPS-46-3比特币的加密算法破解,将64位明文加密为64位密文,密钥长度是 56 位 + 8 位校验和。 现在很容易暴力破解。

l 3DES:三重DES操作:加密、解密、加密、处理和加密强度都优于DES,但现在认为不够安全。

l AES(Advanced Encryption Standard):美国国家标准与技术研究院(NIST)采用该标准取代DES作为对称加密实现。 1997年至2000年,NIST从15个候选算法(由比利时密码学家Joan Daemon和Vicent Rijmen发明)中选出Rijndael算法作为AES,标准为FIPS-197。 AES也是一种分组算法,分组长度有128、192、256位。 AES的优点是处理速度快,整个过程可以用数学来描述。 目前还没有有效的破解手段。

适用于大数据量的加解密; 不能用于签名场景; 钥匙需要提前分发。 其中,分块加密每次只能处理固定长度的明文,所以对于过长的内容需要采用一定的方式进行加密。 在《Using Cryptography》中,推荐使用密文区块链(Cipher Block Chain,CBC)、计数器(Counter,CTR)模型。

B、非对称加密

非对称加密是现代密码学史上最伟大的发明,它可以解决对称加密所需要的预先分发密钥的问题。 加密密钥和解密密钥是不同的,分别称为公钥和私钥。 公钥一般是公开的,任何人都可以访问,而私钥一般由个人持有,其他人无法获得。 公钥用于加密,私钥用于解密。 公钥由私钥生成,私钥可以推导出公钥,私钥不能从公钥推导出来。

它的优点是公钥和私钥分离,也可以使用不安全的通道。 缺点是加解密速度慢,一般比对称加解密算法慢2~3个数量级; 同时,加密强度比对称加密差。

加密过程:原文+接收者公钥=》密文;解密过程:密文+接收者私钥=》原文

非对称加密算法的安全性往往需要基于数学问题来保证。 目前主要有几种基于大数因式分解、离散对数、椭圆曲线的思想。

代表性算法包括:

l RSA:经典公钥算法,1978年提出,该算法利用了大数分解成质因数的难度,但没有数学证明两者难度等价,可能有未知算法可以解密大数而不分解大数。

l Diffie-Hellman密钥交换:基于不能快速求解的离散对数,双方可以在不安全的通道上协商公钥。

l ElGamal:利用模运算下求离散对数的困难。 它用于 PGP 等安全工具。

l Elliptic curve cryptography (ECC):基于椭圆曲线上特定点难以计算特殊乘法逆运算的特点,近代备受关注的一系列算法。 1985年首次提出。ECC系列算法普遍被认为安全性高,但加解密计算过程往往比较耗时。

一般适用于签名场景或者密钥协商,不适合大数据量的加解密。 其中RSA算法一直被认为不够安全,一般推荐椭圆曲线级数算法。

C. 混合加密机制

该方法将加密过程分为两个阶段。 第一阶段采用非对称加密方式分发秘钥,让对方可以安全获取秘钥进行对称加密。 第二阶段使用对称加密对原文进行加解密,如下图所示。

一个典型的场景就是现在大家普遍使用的HTTPS机制。

建立安全连接的具体步骤如下:

l 客户端浏览器向服务器发送信息,包括随机数R1、支持的加密算法类型、协议版本、压缩算法等,注意这个过程是明文的。

l 服务器返回信息,包括随机数R2、选择的加密算法类型、协议版本、服务器证书。 请注意,此过程是明文形式的。

l 浏览器用网站的公钥校验证书。 证书需要第三方CA颁发,浏览器和操作系统会预设权威CA的根证书。 如果证书被篡改(中间人攻击),很容易通过CA证书进行验证。

l 如果证书没有问题,使用证书中的公钥加密随机数R3发送给服务器。 此时只有client和server有R1、R2、R3信息,根据R1、R2、R3,生成对称会话密钥(如AES算法)。 后续通信受对称加密保护。

D. 常用加密算法比较

E. 比特币加密算法的使用

比特币系统采用了一种非常典型的非对称加密算法——椭圆曲线密码术(ECC)。 比特币系统通常从操作系统底部的加密安全随机源中获取一个 256 位随机数作为私钥。 对应的私钥。 用户使用的私钥也会通过SHA256和Base58转换为易写易识别的50位私钥,而公钥会先由私钥和Secp256k1生成一个65字节的随机数椭圆曲线算法。

(7) 数字签名

数字签名,又称公钥数字签名,是一种类似于写在纸上的物理签名。 数字签名主要用于签名者身份识别和数据更改的不可否认性。 数字签名包含三个重要属性:

l 只有您可以签署自己的数字签名,但其他人可以验证签名是否由您签发;

l 数字签名需要绑定到特定的数字文档,就像现实中你的签名要绑定到纸质媒体一样;

l 数字签名不可伪造;

通过非对称加密机制可以轻松实现以上三个特性。 首先需要生成个人的公私钥对:(sk, pk) := generateKeys(keysize),sk私钥用户自己保管,pk公钥可以分发给其他人。 其次,可以通过sk对具体的消息进行签名: sig := sign(sk, message) 这样就得到了具体的签名sig。 最后,拥有签名公钥的一方可以验证签名:区块链系统中的isValid := verify(pk, message, sig) 一笔数据交易需要签名,直接用用户的公钥来代表用户的比特币地址在比特币的设计过程中。 这样,当用户发起转账等比特币交易时,可以方便地验证用户交易的合法性。

数字签名是在消息之后添加另一段内容作为发送者的证明,证明消息未被篡改。 一般情况下,发送方对信息进行哈希算法处理,得到一个哈希值,然后用私钥对哈希值进行加密,得到签名。 然后发送方将消息连同签名一起发送给接收方。 接收方使用发送方的公钥对签名进行解密,还原出哈希值,然后使用哈希算法验证信息的哈希值与解密后的签名还原出的哈希值是否一致,从而进行识别信息是否来自发送方或验证信息是否被篡改,如下图所示。

相关知识:数字证书和证书颁发机构

数字证书(Digital Certificate),又称“数字身份证”、“网络身份证”,是由认证中心签发并经认证中心数字签名的电子文件,包括公钥的所有者和相关信息的公钥。 识别数字证书所有者的身份。 数字证书包括:公钥、证书名称信息、颁发机构颁发的证书的数字签名,以及匹配的私钥证书可以存储在网络中的数据库中。 用户可以使用网络相互交换证书。 当证书被吊销时,颁发证书的 CA 仍然保留一份证书的副本,以备日后解决可能出现的纠纷。

证书颁发机构(Certificate Authority)一般简称为CA,CA一般是公认和信任的第三方组织。 它的主要作用是为每个用户颁发一个包含名称和公钥的唯一数字证书。 CA解决电子商务中的公钥可信问题:负责证明“我是真货”,CA是可信第三方,检查公钥的有效性。 CA证书的内容包括:证书持有者的公钥、证书颁发机构的名称、证书的有效期、证书颁发机构的数字签名。