主页 > imtoken钱包下载安卓版 > 什么是比特币?比特币原理详解

什么是比特币?比特币原理详解

imtoken钱包下载安卓版 2023-08-23 05:12:28

是什么让虚拟货币的汇率3年翻了25000倍,是什么力量让央行副行长“感兴趣”却“不承认”,除了投机和商业欺诈 比特币是一种值得的工具吗?是什么让马云的父亲痛斥200亿比特币?让我们走近比特币,了解这个疯狂的恶魔。

一、什么是比特币

比特币是一种电子货币,一种基于密码学的货币,由中本聪于 2008 年 11 月 1 日创立,中本聪发表了比特币白皮书,其中提出了去中心化的电子计费系统。我们通常的电子现金是由银行开票的,因为银行的背后是国家信用。去中心化的电子记账系统是参与者的联合记账。比特币可以预防主权危机、信用风险。它的好处在此不再赘述。这个级别介绍的文章很多。本文主要从更深层次的技术原理角度进行介绍。

二、问题介绍

假设有 4 个人叫他们 ABCD,他们发起了 3 笔交易,A 向 B 转账 10 个比特币,B 向 C 转账 5 个比特币,C 向 D2 个比特币转账。如果是传统的记账方式,这些交易都会被记录在银行的系统中,信息也会被银行记录下来。我们相信银行不会随意增加、删除或修改交易记录,我们也不会关注其中有哪些交易。我们只关心我们的账户余额。比特币的记账方式在ABCD中为大家保存了这样一个账本,上面的交易内容都记录在账本上。如果每个人的账本都是实时一致的,那么 ABCD 就不再需要银行了。

比特币就是这样做的。每当有人发起一笔交易,他就会向全网广播一笔交易,全网的某个人会在一段时间内将这笔交易打包。可以记录在一个区块上,然后将这些区块一一链接起来,形成一条链,这就是所谓的区块链。

那么问题来了

1、我为什么要参与这个系统,为什么要使用自己的计算机资源来存储这些信息?

2、谁的记录受制于谁?例如,在上面的账单顺序中,用户A可能是这个顺序,但B可能是不同的顺序,甚至B可能根本没有收到从C到D的转账消息。

比特币是个啥

3、如果比特币具有支付功能,就保证了谁的钱属于谁的钱,只有它的主人才能消费。

4、如何防止伪造、篡改和重复支付,防伪就是验证每笔交易是否真的是某人发送的,比如B可能会编一个消息说某某发送给我 A 一笔钱,这是个假新闻,或者 B 说我给别人转了多少钱,但实际上他没有那么多钱,怎么办。防篡改意味着 B 可能想从区块链中删除他向某人转账的记录,这样他的余额就会增加。双花是指B只有10个比特币,他同时将10个比特币转给C和D,造成双花。

三、为什么要记账?

因为记账有奖励,记账有费用,打包出块的人有系统奖励。奖励方案是每十分钟出一个块,每出一个块就奖励一个块。一定数量的比特币,最初是 50 BTC,4 年后奖励 25 BTC,再过 4 年减半,以此类推。这样一来,比特币的产生就会越来越少,越来越接近一个最大值。计算公式为:50×6×24×365×4×(1+1/2+1/4+1/8+ ...) ≈ 2100万,其中50比特币初始奖励6个区块/小时,每天 24 小时,一年 365 天,前四年,之后每四年减半。

此外,记账奖励每笔交易也有少量手续费。每笔交易都是以一定的手续费发起的,这些手续费是给记账的矿工的。

四、谁会占上风?

各节点通过工作量证明机制竞争记账权。他们计算一个非常复杂的数学问题,第一个计算的节点是下一个块的生产者。这个数学问题很难,很难用同一个大脑来解决。它是一种基于概率的方法。矿工必须遍历、猜测并尝试解决这个未知数。那么这个数学难题到底是什么?详情如下。

4.1哈希函数

散列函数,也称为数字摘要或散列函数,其特点是输入一个字符串,生成另一个字符,但是如果输入不同,输出字符串必然不同,不能从输出字符串推导出输入举个简单的例子,1-100内取模10的数可以认为是哈希方法,比如98=8, 66=6, 98和66是输入,模10是哈希函数,8和6是输出。在这个模型中,通过6和8不可能推断出输入是66和98,因为可能是56和88等。当然,因为这个例子比较简单,所以会出现hash冲突,即66 和 56 的结果都是 6,输出是一样的。一个优秀的散列函数可以实现一定的输出差异,散列冲突的概率几乎为0。常见的散列函数有很多,比如MD系列和SHA系列等。比特币使用的SHA256算法,也就是输入一个字符串并输出一个 256 位二进制数。下面是运行程序的结果。

从程序结果可以看出,输入的源信息不同,得到的结果也不同(为方便起见,结果用64位十六进制表示),即使多了一个橙色的句号,它也会产生非常不同的结果。同时,不能通过输出的十六进制字符串对输入进行反转。对于比特币来说,只要了解了SHA256的作用,感兴趣的可以详细了解一下SHA256的具体算法。需要SHA256的C++++源码,留言邮箱或私信。

比特币是个啥

4.2 挖矿原理

首先,我们来介绍一下比特币每个区块的数据结构。每个块由块头和块体组成。 .

块体包含矿工收集的若干交易信息。图中,假设区块中包含 8 笔交易,所有交易都生成一棵 Merkle 树。 Merkle树是一种数据结构,将叶子节点两两散列生成上层节点,再对上层节点进行散列,生成上层,直到最后生成一个树根,称为Merkle根,只有根是根。保存在区块头中,节省区块头空间,便于交易验证。

区块头包含父区块的哈希、版本号、当前时间戳、难度值、nonce和上述Merkle根。

假设区块链已经链接到一个区块,有四个 ABCD 节点在前十分钟收集了全网的一些交易信息比特币是个啥,他们选择了大约 4k 笔交易,打包,生成 Merkle 树根,发送区块头中的信息,即区块哈希+版本号+时间戳+难度值+随机数+默克尔树根,形成一个字符串str,通过两个哈希函数得到一个256的二进制数,即SHA256(SHA256 (str)) = 10010011...一共256位,比特币需要,生成的结果,前n位必须为0,n为难度值。如果现在生成的二进制数不符合要求,则必须更改随机数的值并重新计算,直到计算出满足条件的结果。假设现在 n 为 5,则生成的二进制数必须为 00000...(总共 256 位)。一旦挖矿成功,矿工可以将此消息广播到全网,其他矿工将根据该区块继续挖矿。下一个区块头中的父区块哈希值是前一个区块生成的00000……这个数字。

解决这个数学问题取决于运气。理论上,最幸运的矿工可能能够在 1 个哈希中计算出结果,而不幸的矿工可能永远无法计算出结果。但一般来说,如果矿工的算力越大,单位时间内能进行的哈希值越多,就越有可能在短时间内成功挖矿。

那么 n 是如何确定的呢?比特币设计者希望平均每十分钟产生一个区块,总体而言,成功挖矿的概率为 1/2^n。现在假设全球有1W台矿机,每台矿机的算力为14T次/s = 1.4×10^13次/s,单位时间/s称为算力, 10 分钟是 600s,所以 10 分钟可以进行 8×10^19 次哈希运算。从概率的角度来看,成功挖掘需要 2^n 次操作。可以列出方程 2^n = 8×10^19。 ,可以解出n约为66。所以对于这种方法,我们没有办法让自己的运气更好,只能提高算力,尽快计算出结果。

另外,需要模拟挖矿过程的C++代码可以回复邮箱。代码可以模拟比特币挖矿算法,通过调整难度值来控制出块速度。

五、如何防止假冒、篡改、重复支付等问题

比特币是个啥

这部分是理解比特币的重要部分。

5.1电子签名技术

身份认证技术在生活中很常见,可以是人脸识别、签名、指纹等,但是这些方式在数字货币领域并不安全,因为一旦数字化,就可以通过复制来伪造。所以比特币采用了电子签名的方式。

注册为比特币用户时,系统会根据随机数生成私钥,私钥会生成公钥,公钥会生成地址,其中私钥必须保密并且可以保存到硬盘中或者你的脑海中,因为这个私钥是比特币在对应地址上的唯一标识,一旦丢失,所有的比特币都将无法使用。下面介绍具体的转换过程。如果你不感兴趣,你可以忽略它。只要知道随机数->私钥->公钥->钱包地址的过程,私钥可以加密一串字符,公钥可以加密。解密,这是非对称加密。这些算法的整体功能相同,但具体算法不同。因为这些算法比较复杂,所以不会像SHA265算法那样介绍太多。如果有兴趣,可以详细了解具体算法。但是,对于比特币系统,只需了解它的功能。典型的算法是RSA,比特币使用椭圆曲线加密算法。

转换过程(可选阅读,不影响理解)

1、首先使用随机数生成器生成私钥,这是一个256位的二进制数。私钥不能泄露,相当于银行卡密码。

2、私钥通过SECP256K1算法生成公钥。 SECP256K1 是一种椭圆曲线加密算法。它的功能类似于 RSA 算法。公钥是通过已知的私钥生成的,但无法从公钥中推导出私钥。

3、与SHA256算法类似,RIPEMD160也是一种HASH算法。公钥的哈希值可以从公钥中得到,但公钥不能从哈希值中推导出来。

4、将一字节的版本号连接到公钥哈希头上,然后对其进行两次SHA256操作,将结果的前4个字节作为公钥哈希。检查值,连接在它的末尾。

5、将上一步的结果用BASE58编码得到钱包地址(相当于银行账户)。例如,A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa

比特币是个啥

所以,通过以上过程,我们可以总结出私钥、公钥和钱包的关系如下图所示。可以看出,所有的值都可以从私钥推导出来,通过BASE58和BASE58解码算法,公钥哈希和钱包地址可以相互转换。

了解了公钥、私钥和地址的概念后,防伪验证的过程就很容易理解了。对消息进行哈希处理以生成数字摘要,并使用私钥对其进行加密以生成密码。然后 A 将广播交易消息、公钥和密码。收到消息的人先对交易信息进行散列生成摘要1,然后用公钥解密密码生成摘要2。这样,如果两个摘要相同,则表示该消息确实发送了by A. 所谓签名就是密文。

5.2 余额检查

余额这个概念应该说是根深蒂固的,余额是伴随借记卡和贷记账产生的,也是目前银行常用的一种记账方法。计算一个人的交易记录后,计算一个余额。但是,比特币没有余额的概念,因为它采用了UXTO模型的记账方式。比如A->B10个比特币,B->C5个比特币,对于第二笔交易,B在发起本次交易的时候应该注明第一笔交易的信息,这样我们就可以知道B从A那里收到了10个比特币。那里收到,说明满足发起第二笔交易的条件。所以比特币余额的检查是追溯性的。

上图描述了两个交易。在交易 10001 中,B 将 10 个比特币转给 C。验证此交易的过程是:首先通过 B 的公钥解密 B 的签名,然后将其与交易的具体内容(B 的签名左侧)进行比较。如果相同,则说明消息是B发送的,然后检查10000交易是否真的存在及其内容。真实性。如果满足这两点,则表示交易10001可以接受,否则拒绝。

其实真正的交易比这复杂得多,因为有可能多笔交易构成输入,比如B->C20比特币,就是由多笔交易A->B10,D->B10组成,之前的交易ID是两个ID,甚至更多。为了描述的简单,这里只列出了一笔交易。

比特币是个啥

5.3双付

A同时发了两条消息,同时给B和C转了10个比特币比特币是个啥,其实如果他只有10个Sample会怎么样呢?假设节点 D 先收到了 10 个比特币给 B,然后又收到了 10 个比特币给 C。通过上面的验证方式,它自然会拒绝后一个。同时,节点 E 可能先收到 10 个比特币给 C.,然后收到 10 个比特币转给 B,后者自然会拒绝后者。至于哪个交易最终会被上链,就看D和E哪个先解决问题并成功挖矿了。

5.4 防篡改

假设A给B转了10个比特币,但是​​他想把这个信息从区块链上删除,让大家不知道这个东西是否存在,是否可以依赖。

首先,我们来谈谈最长链原理。假设两个矿工在某个区块后同时挖了矿,或者由于网络延迟等原因存在差异。开采正确的块,直到生成下一个块。这时候会有两条链条,但其中一条很长。比特币规定以最长链为准。如果一个节点仍然固执地基于较短的链,他正在与大部分计算能力作斗争。这样做的结果就是他挖的区块不被大家认可,浪费时间和算力。

回到上面的场景,如果A要违约,只能从上一个记录A->B10比特币消息的区块开始重新开始挖区块,创建分支链,但实际上区块前进了很多,他只能一直追,追的同时,主链也在前进,他必须将主链与主链进行比较。链条的速度很快。如果他的计算能力足够大,理论上他可以在很长一段时间后赶上成功,篡改交易信息。但是,实际上这几乎是不可能的,因为即使算力很大,平均出块速度也是 10 分钟。从非技术的角度来看,如果一个人掌握了全网一半以上的算力,那他为什么不在主链上呢?继续挖矿?有钱的人不应该愿意当小偷。

六、总结

区块链不等同于比特币,比特币不是区块链,区块链只是比特币应用的一种技术,这项技术可以启发我们。比特币的伟大之处在于前所未有的区块链技术的应用。区块链技术还有哪些应用需要继续探索。

比特币是区块链技术最成功的应用,但比特币本身也存在很多问题。它想通过发行货币来挑战主权货币。这种动机值得怀疑。此外,由于比特币的匿名性,进行交易只需要一个公钥或地址,为黑色行业提供了一个很好的平台。另外,比特币不是成熟的支付系统,存在吞吐量低、扩展性差等缺点。