主页 > imtoken钱包正确的下载地址 > 【超详细】区块链技术基础知识及比特币介绍

【超详细】区块链技术基础知识及比特币介绍

区块链基础知识(1)写在最前面

笔者从一些资料中查询学习,看了很多介绍区块链的文章,发现虽然很多文章都写了是的,但对小白初步了解区块链的相关原理和比特币。本文旨在通过对比特币相关机制的介绍,详细解释区块链的原理和基本内容。当然,我也是刚刚接触区块链,难免会有一些误会,还望读者指正。全文共7500字,通过问题和实例详细介绍了比特币和区块链的相关机制。为大家带来帮助。

介绍:(比特币)

有一个孤立的村庄,村里没有流通的纸币,每个人都以记账的方式进行交易。开始时,村民进行交易时,会将交易记录为凭证,村里的每个人都会将村里的每一笔交易信息记录在账户中。但是这样一来,每个人都会在账户上拥有自己的账户。除了交易信息之外,还有很多与它们无关的交易信息。同时,每个人都不愿意花费自己的时间、精力和存储空间来记录别人的账目。为了减轻大家的工作量,大家决定暂时让村长来做账。村里产生的每一笔交易都有记录,每天按照日期生成账本,每个账本记录当天产生的交易的相关信息。记录后,村长每天定点公布账单,供大家查阅。村民核实无误后,每个人都会保留一份当天的账本。

显然,这和集中管理很像,类似于我们银行的运作模式。

(1)不过,新的问题来了,村长一直在花时间和精力给大家记账,没有收入怎么办?

村民们想出了一个好办法,每次在产生一笔交易的过程中,都需要为这笔交易支付一定的手续费(假设为1元),这笔手续费将给予村里的簿记员。

(2)随着村子的发展,村里的日交易量逐渐增加,记账人的收入也增加了。记账人怎么选?

为了公平选择记账人,村民每天早上掷骰子,根据积分决定谁来记账。在这里,村民选择记账人的规则被称为“共识机制”,保证了每个人都有机会参与记账。同时,村里每天都会产生一个账单,而每天的账单实际上就是一个区块。当天的交易信息记录在区块中,每个村民的交易余额(即每个人还剩下多少钱)记录在每日账单的末尾。前一天的交易余额将作为新一天账本中的当天​​交易。金额(即你有多少钱),通过前一天的交易余额、当天的交易金额以及相邻日期之间的关系,可以将每个票据(区块)串联起来,即“链”。

(3)这个时候如果有人要挪用村里的公款,虽然不需要直接篡改账本上的信息(因为大家都会确认账本上的信息),但他可以烧掉账本。部分内容,让别人查不到。如果你回去告诉大家你不小心碰了蜡烛,别人也无能为力。如何防止这种情况发生?

每个人都有一个如果有人发现新更改的帐户有误,他们可以拒绝接受。最终以大多数人同意的账户表述为准。因此,即使有人不小心损坏了账簿的一部分,也只需找其他人复制即可。

(4)有些村民离账本发布地比较远或者没时间查账怎么办?

相邻村民可以互相复制账本(即邻居互相复制账本),也称为区块链的路由。这里村民的相互复制可以看作是点对点的通信,村民可以看作是一个普通的节点。

通过以上描述,我们可以知道区块链具有以下特点:

1.难以篡改2.P2P 3.每个节点都有打包权(共识机制)4.去中心化

p>

进一步解释:

区块链的进一步解释。首先以比特币为例,假设有四个节点A、B、C、D,每个节点会记录四个节点之间的交易信息。

同样会提出以下问题:

(1)为什么每个节点都要记账?

因为记账有奖励。每笔交易都需要支付一定的手续费(远低于银行),同时每次打包书的人都会获得一定的比特币奖励(打包奖励)。

2018 年中本聪首次发明这个机制时,他将区块设置为每 10 分钟产生一次,即每 10 分钟会选择一个记账员,并记录这 10 分钟内产生的交易。内部手续费和50比特币用于奖励包装人(记账员)。奖励的打包费(50比特币每四年减半,即2012年后打包费变成25比特币,2016年以后打包费变成12.5,以此类推上,一共会产生2100万比特币作为打包费,打包费无限接近0后,打包人将获得手续费奖励)

(2)这么多节点记录了账单,以谁的账单为准?

这涉及到我们前面提到的记账人选择机制,也就是“共识机制”,但是这里的共识机制会比较复杂。在比特币中,每个节点都需要通过做“数学题”来争夺记账权,这就是Pow(工作量证明的方式)。我们把做问题的过程叫做挖矿,谁做这个“数学第一”的问题,谁有记账的权利,我们把那些挖矿的人称为矿工。

“数学”原理:

这里的“数学”需要散列函数的知识。以哈希函数中的 SHA256 为例,我们可以将任意字符串(小到几 kb 的字符串,大到 10G 的电影)输入到 SHA256 函数中,输出结果是唯一的 256 位二进制序列(如输入为LR或SHA(LR),输出为32位唯一二进制数如10001000.....。输入值稍有变化时,输入位LR1为(LR1) ,输出会有很大的变化,也就是输入值的微小变化会导致输出值的巨大变化)

哈希函数的正向计算很容易,但反向计算却很困难,即它是一个单向函数。例如,对于以下函数:

Y=Sin x+x^{^{3}}+tanx+lnx

知道X未知,很容易找到Y,但是知道Y,很难找到X。实用上面的hash函数比给出的例子要复杂的多(有兴趣的可以去到密码学的相关资料了解具体操作过程。这里只需要知道,输入任意大小的字符串到哈希函数后,输出将是一个唯一的固定长度的二进制字符串)

回到我们之前讲的数学题,首先我们要了解block的结构,如图,block包括block header和block body。暂时不需要关注块体的具体内容,我们先看块头,我们的数学题很大一部分来自于块头。

块结构

这里的数学题是每个节点都有一个字符串,字符串的内容是:

String = 上一个区块的区块头 + 账单(默认 Kergen)+ 时间戳 +...(这里只列出几个)+ 随机数

数学题要求输入为SHA256(SHA256(字符串)),输出结果为前n位为0的二进制数(序列),即

Hash=SHA256(SHA256(string))=前n位为0的二进制序列

从字符串的组成可以知道,只有随机数可以改变,其他部分的内容是确定的。由于散列函数的单向性,很难从输出结果中推导出输入结果。因此,只能通过改变随机数的值,一一进行暴力计算(盲猜),使输出满足要求的条件。虽然不同的节点可能有不同的信息,例如时间戳、Merkle 根(票据)等,但总的来说,计算能力越强,就越有能力计算出所需的二进制序列。

另外,你可以调整难度,即改变n的值,保证每10分钟产生一个区块。比特币一开始就设置n=66,当然随着矿机数量的增加(单位时间总操作次数的增加)并适当增加问题的难度以保证在规定的时间内可以出块时间。

(3)如何防伪?(如何证明某笔交易信息是某个人发起的A转账说的新的付款人是A而不是B,如何保证交易信息是不是伪造的)

传统的身份认证方式是签名(看笔迹)、指纹、瞳孔(独特的生物特征)等进行认证。但是在互联网上,这些都是可以直接复制伪造的,这时候就需要引入“数字签名”的概念了。

在计算机世界中,确保数字签名不被伪造是通过数字摘要和非对称加密来实现的。以比特币中的交易为例:如果A现在发起一笔比特币转账,它需要对交易进行数字消化,将其缩短为字符串,然后用自己的私钥对摘要进行加密,形成数字签名。完成后,需要将交易信息(包括收款人地址)和数字签名广播给记录“账本”的人,即矿工。矿工使用 A 的公钥进行验证。如果验证成功,则说明交易确实是A发送的,信息没有变化,是完整的。

数字签名需要用到数字摘要和非对称加密的知识,现在一一介绍:

数字摘要

技术用于传输被传输它不是加密机制,但它可以生成信息的数字“指纹”。其目的是确保数据未被修改或更改,并且信息的完整性不被破坏。说白了就是对数据进行hash。它在数字签名中的作用是增加伪造的难度,就像有些人刻意写龙凤之类的字,目的就是让别人难以伪造。

在介绍非对称加密之前,我们需要先介绍一下对称加密。

对称加密

例如:现在A(未成年人)想和他的朋友B聊一个比较敏感的话题,但他害怕他妈妈会在他的手机上看到它,如果她知道她会因为谈论而被骂这个话题,A跟朋友B约定,A先把中文翻译成英文再发过去,然后他可以用微信翻译把英文翻译出来。翻译成中文,所以即使妈妈看到也没关系,因为她根本看不懂英文,所以A和他的朋友B聊天,当A通过翻译软件把中文翻译成英文,然后发送出去给B,他的朋友B可以用翻译软件把英文翻译成中文,正常阅读你发送的信息,如图:

A、B信息传输过程(对称加密)

如图所示,加密(A将中文信息翻译成英文)和解谜(B将英文信息翻译成中文)都使用翻译工具(即一方通过加密密钥加密信息后,得到密文传输给对方,对方通过相同的密钥解密密文)

对称加密比较容易理解,通过加密算法传递一个密钥对明文进行运算得到密文,并使用与解密算法的输入相同的密钥对密文进行解密得到原文,如图如下图:

在这里插入图片描述

对称加密示意图

从这里我们可以看出,对称加密有几个要素,分别是明文、加密算法、密钥、密文和解密算法。明文作为加密算法的输入,是对明文进行加扰的规则。当然,它也和密文一起作为解密算法的输入。密文自然是加密算法得到的结果。

但这是有缺陷的。如果A妈妈用微信翻译把发来的英文翻译成中文,她听不懂吗?是的,这就是对称加密的缺陷。人拿到了密钥(在对称加密中,密钥就是加解密规则),那么A发过来的密文就很容易被破解,那么就算一个人的密钥被偷了怎么办,最起码保证A发给别人的密文不会被破解?也就是说,即使A的妈妈得到了你的密钥,她仍然无法解密你发送的信息,只有他的朋友B才能查看A发送给他的信息。这就是我们要讲的非对称加密。

非对称加密

在非对称加密中,信息的发送者和信息的接收者都有一对自己的公钥和密钥。可以公开,但是私钥只能自己看到,别人拿不到。然后发送方将对信息进行数字消化,并用接收方的公钥对其进行加密,再用自己的私钥对数字摘要进行加密。接收方接收到加密信息和加密字符串,使用发送方的公钥(因为公钥是公开的)对加密字符串进行解密,得到原始数字摘要,然后将解密后的消息摘要结果与自己的私钥进行比较钥匙。如果一致,则说明文件确实是发送方发送的,文件内容没有被修改过。

非对称加密如何应用于身份认证?

以 A 向 B 发送消息为例:A 用他朋友 B 的公钥加密你的消息,对消息进行数字消化,然后使用 A 自己的私钥对摘要进行消化。加密,即数字签名,然后将数字签名和加密信息发送给B。B收到信息后,首先用A的公钥解密数字签名,证明信息确实是A发送的比特币使用的区块链属于,而不是别人发送的发送出去(因为用A的公钥可以成功解密,所以可以解释为是A发送的信息),然后用自己的私钥(B的私钥)对加密信息进行解密(注意这里只有B,只有A的私钥可以解密信息,没有其他人可以,甚至A自己也无法解密信息,所以即使A的妈妈拿到了A的私钥,他也无法解密信息),然后对信息使用相同的算法进行数字摘要。如果得到的摘要与A发送的摘要一致,则说明信息在传输过程中没有被修改。 (详情如图)

身份认证流程

回到区块链防伪:

仍以A向B发送消息为例。在这里,A 想向 B 转账 100 个 BTC(比特币)。首先,A 先对这笔交易进行哈希运算,得到一个 256 位的二进制序列,这里调用。数字摘要1,然后用A的私钥对数字摘要1进行加密,称为密文1。然后将加密后的密文1和A的公钥,以及A向B传输100 BTC的信息广播给其他节点。其他节点收到信息后,使用A的公钥解密密文1,得到数字摘要。 1.同时对“A向B转100BTC”信息进行哈希运算,得到数字摘要 2.比较数字摘要1和数字摘要2,如果两个数字摘要完全相同,则说明这一条信息是A发送的,“A向B转账100BTC”信息真实完整,未被篡改。 (详情如图)

区块链中的身份认证

至此,我们已经实现了防伪,那么如何防止双花呢?

(双重支付:即坏人用一份钱作为两分钱,即A只有10个BTC,但A同时向全网广播,将10个BTC转给C和B分别,由于网络延迟,其他节点可能会在不同时间收到这两条信息,如何防止不同节点确认不同交易信息导致的双重支付问题?)

这里先解释一下比特币的交易流程:

1.付款人在交易单上签字

付款人需要输入自己的比特币地址和收款人的比特币地址,还要输入要转账的比特币数量,比如5个比特币,然后付款人会向收款人发送请求(以P2P的形式发送) ),而付款人会在发送此请求和交易信息之前添加收款人的公钥,然后用自己的私钥对整个请求进行加密,并用自己的公钥对请求进行标记。这里需要注意的是,付款人不仅需要将请求发送给收款人,还需要以 P2P 的方式将其广播给其他网络节点,以便所有节点都能接收到请求。比如 Alice 想给 Bob 转账 5 个比特币,那么 Alice 先向 Bob 询问标识字符串(比特币地址),比如“ABCDEFG”,而 Alice 也有标识字符串比如“HIJKLMN”,然后 Alice 写一个清单上写着“HILKLMN 向 ABCDEFG 支付 5 BTC”,然后盖上你自己的秘密印章(私钥),然后将清单交给 Bob。

2.收款人确认单据签字人

收款人收到请求后,用付款人的公钥解密。如果能解密,说明付款人确实有私钥,也就是说账户是从付款人那里转过来的,也可以得到收款人的公钥(因为上面已经提到,付款人会使用收款人的公钥和交易信息。已加密)表明该帐户确实已转移给收款人。

3.确认付款人的余额

通过以上步骤,可以确认账户确实是付款人发起的,但是没有办法有效确认付款人是否真的有足够的余额进行转账(毕竟没有中央认证机构),所以这个时候需要矿工确认,这是因为比特币世界没有余额的概念,我们在比特币钱包里。看到的“余额”并不是我们理解的余额,实际上是UTXO(意思是未花费的交易输出,计划在第五部分讨论),验证付款人是否有余额的工作通常由矿工完成,而收款人不需要做这项工作,只需要验证请求是否是由付款人发起的。

PS:如何查询余额?

实际上,在创建区块链的过程中,交易信息只有在大部分节点收到交易信息并成功打包到公链后才能确认交易信息(即确认收款账户)。在交易过程中,比如A想给B转账10个BTC,其他节点会在公链上的区块中查找A的交易信息,计算出A的“余额”,如果余额大于或等于转账值,即接受交易信息,否则拒绝交易信息。我们将余额检查过程称为“追溯”。如果交易信息被其他节点拒绝,则无法记录在每个节点的账本中,因此无法打包加入区块。

当A同时向其他节点广播并分别向B和C转账10BTC(假设A只有10BTC)时,由于网络延迟,这两个交易信息可能会记录在两个不同的节点中,但这些节点中只有一个节点可以打包和记账,所以一旦一个节点获得记账权并被打包记账,剩下的节点的区块会被丢弃,即接受另一个交易信息的区块会被丢弃,所以只会确认一个交易信息,A的余额将被修改(即A的剩余BTC为0),则交​​易池中的另一笔交易信息因余额不足而不会被节点接受。

(4)如何防止篡改?

按照我们之前说的,我们已经学会了如何防止篡改,也就是不能伪造别人的交易信息,但是还有一个问题,如何防止坏人修改(删除)自己之前的交易信息某个区块?

首先介绍最长链原理。记账权比特币使用的区块链属于,两个矿工同时挖出一个满足条件的区块(叫分叉)怎么办?

在某个时刻,两个矿工同时计算一个随机块数(即获得记账权),那么此时就会出现一种情况,即一个主链分叉变成两个叉链,每条链都按照自己的方向延伸,如下图所示:

分叉图1

这是因为每个矿工都会复制上一个区块,然后连接这个区块来挖掘下一个区块。现在全网同时有两个符合条件的区块,同时计算这个“数学题”。两个矿工会向全网广播他们已经解决了问题,所以由于距离(P2P网络,可以理解为延迟),矿工找到的区块是不同的(虽然这两个区块都是Eligible块,但可能会因为距离解节点的大小而收到不同的块),所以有的矿工会得到红块进行接下来的挖矿工作,而有的矿工会得到绿块进行挖矿,这必然导致如上图所示的情况,称为分叉。

比特币建立了一个机制,即短链服从长链。首先,区块是由矿工挖出来的,矿工需要矿机(显卡)进行挖矿,而不同的矿机算力不同(每秒多少次),也就是说每个矿工的算力并不是同样的,那么就会出现两条链中的一条链比另一条链具有更大的计算能力的情况,因此这条链的增长速度会比另一条链快。 ,即这条链会比另一条链长。这个时候你可能会说,如果两条链的算力不变呢?这种情况是不可能的,短时间内是有可能的。是的,但这种平衡在一段时间后必然会被打破。例如,如果有新的矿机出来(新矿机的计算能力一般较高),那么就会有矿工购买和更换旧矿机。这会导致计算能力的不平衡。

但是当其中一条链超过另一条链时,那么整个网络中就会出现一条最长的链,那么矿工在新打包区块的时候会复制所有最长的链,然后继续在这条链上挖矿。这条链的基础。当所有矿工都这样做时,这条链将成为一条主链,而另一条链将被废弃。如下图,红链会成为主链(公链),绿链会被废弃,重新放入交易池,等待打包。

前叉示意图 2

其实可以认为是“额外的游戏”。如果两个矿工同时挖矿,由于网络延迟,他们周围的节点会将挖出的区块排成一行。排好队后,他们会继续挖矿。谁可以挖下一个矿来在链上制造更多的块(使链更长),谁就会使用谁的链占上风。当其他矿工发现有一条链比自己的链长时,就会放弃当前的链,站在一条更长的链上。一般来说,在6个区块内就可以确定胜者(可以比较哪个链长,以哪个链为准)。

如果矿工坚持在那条短链上挖矿怎么办?如果矿工再聪明一点,他就会知道这是一项吃力不讨好的工作,因为一旦他所在的链最终没有成为主链,他在这条链上挖出的比特币将是零,而他之前所做的工作是浪费,所以一般不要做这种事情。

那么,如何篡改交易信息呢?

如果一个矿工想要篡改信息,他需要比其他矿工拥有更多的CPU能力(51%攻击),那么,这个51%攻击的实现是什么?

假设 A 用 100 个比特币从 B 购买相同的物品,步骤如下:

(1)A支付B 100BTC;

(2)B收到100BTC并确认支付后发送出去(一般认为6次确认后交易不可逆);

(3)然后A创建另一个交易,并支付相同的10BTC给自己。

51% 攻击(篡改交易信息)

如图所示,A想把第一笔交易倒过来,不花钱就拿到B的商品。为了实现这一点,A 将相同的 100BTC 双花给 B 和他自己。在正常的比特币网络中,第一笔交易一旦经过 6 次确认,几乎是不可改变的,后续的交易数据会不断被打包成新的区块并依次链接。但是,如果用户 A 拥有 51% 的算力,情况就会发生有趣的变化,A 可以达到双倍支付的目的。也就是矿工需要比别人有更多的算力,并且在现有链上打包比现有主链更长的分叉,这样全网才能识别出自己的链就是主链。

51%攻击能带来的好处非常有限,你只能这样做:

1、修改您的交易记录,例如双花2、阻止确认部分或全部交易

即使使用 51% 攻击也无法实现以下目标:

1、凭空产生的比特币; 2、 修改每个区块产生的比特币数量。

但是,当矿工控制 51% 的网络计算能力时,他将被迫选择通过欺诈、窃取他的付款(即双花攻击)或通过(获取)新货币。他应该会发现,遵循帮助他获得比其他人更多的新货币的规则更有利可图,也比破坏系统和损害自己财富的有效性要好。

写在最后

关于区块链的知识还有很多,包括共识机制、智能合约、简单支付验证(SPV)等内容,后续会一一补充。如有任何问题,欢迎随时交流。

参考资料:

(1)

(2)

(3)

(4)