主页 > imtoken官方网站 > 比特币的工作原理:哈希函数

比特币的工作原理:哈希函数

imtoken官方网站 2023-05-05 07:11:04

哈希函数是只能在一个方向上估计的函数——这个特殊的过程使区块链世界既清晰又安全。

这意味着如果给函数输入,可以估计输出,但是给定输出,就不可能逆向推算输入。 (从这个意义上说,就像从公钥中获取私钥一样。)

我们不讨论它背后的物理原理或它今天的工作原理。所需要的只是你了解它的作用。再说一次,即使是物理的,也可以被认为是魔法。

另外,我们可以选择我们希望哈希函数的输出占据的范围。例如,我们可以使用从 0 到 9 的所有数字(所以只有一个数字)、0 到 99、0 到一百万甚至任何数字(例如 0 到 894)@ >。

为了说明这是如何工作的,让我们假设我们的哈希函数的范围是 0 到 9。我们输入的任何内容都会给出其中一个数字:如果我们给它一个表情符号,它可能会给我们一个 5。如果我们输入7859,它可能会返回一个 3。如果我们输入整个 Moby Dick 的文本,它可能会给我们数字 7。

它总会给我们一个数字——但我们不知道为什么。

现在,假设我们在其中输入了《白鲸记》的全部文本,但将其降低了一个短语。您可能会认为,由于此输入与我们输入的最后一个输入非常相似,返回数字 7,因此此输入很可能也会返回 7,但您错了。

虽然输入非常相似,但这里的 t 在输出中没有可预测的相关性。绝对未知数的云可以避免黑客攻击 - 知道输出并不能告诉您输入可能是什么。

在加密货币中,哈希函数用于将密码存储在集中式 Web 服务器上。但是网络数据库经常被黑客入侵,如果黑客在成功的黑客信息后能够读取每个人的密码,这对用户来说是不利的。

比特币好弄吗_比特币 好123_比特币09年挖好挖吗

为了让用户更安全比特币好弄吗,几乎所有现代网站都会在将用户密码存储到数据库之前对其进行哈希处理。因此,黑客仅仅通过读取数据库很难知道用户密码是什么,因为这意味着从哈希函数的输出到输入——一个难以逆向工程的深度代码,意味着黑客读取了什么看起来像一堆随机数。

但是,每次用户登录时,服务器都可以正确验证他们是否提供了真实密码——服务器获取正确的密码并可以再次对其进行哈希处理,看看它是否与存储在数据库中的哈希结果匹配。 .

这样密码本身就是秘钥,但是黑客获取“散列”密码是没有用的,因为它不能倒退。

哈猜谜游戏

在比特币上,我们选择向矿工发布区块的权力,矿工可以通过哈希函数运行他们提出的区块并输出一定范围内的数字。

然后,矿工必须以有序、格式化的方式对他们发布的数据进行格式化 - 但要有一个允许他们放置少量无用垃圾数据(称为“nonce”)的地方。我们告诉人们在 Moby Dick 的文本随机短语中添加一两个 gobbledegook,并通过哈希函数运行它,以尝试将其输出与某个特定的幻数匹配。

基本上,我们正试图做相反的事情 - 给定哈希输出,矿工需要找到合适的输入。

但是等等!这不是不可能吗?

不知何故:不可能使用某种形式的方法从输出中推断输入。可能是随机猜测。

比特币09年挖好挖吗_比特币好弄吗_比特币 好123

让我们回到散列 0 到 9 之间数字的散列函数的示例。假设我们正在玩 Moby Dick 散列挑战,如果你用少量无意义的散列编辑 Moby Dick,你将获得奖励3..这很容易,因为有人从任何给定的输入中获得 3 的机会是十分之一。他们只需平均尝试 5 次不同的输入即可赢得奖品。

MacBook 上的标准 CPU 运行速度尽可能快,每秒可以将 88,000 次推测插入哈希函数,因此实际上只需要几分之一秒即可得到答案。

例如,如果有 50 个人使用 MacBook 进行挑战,并且您希望比赛持续大约一个小时,您可以将 88,000 除以 60 秒除以 60 分钟,以求出某人在一小时内可以做出的猜测次数,然后除以 50 得到玩游戏的人数。

因此,你的哈希函数必须有一个更大的范围:0 到 (88000 * 60 * 60 * 50) 之间的任何值,范围是 0 到 15840000000。

p>

要获得奖励比特币好弄吗,你必须猜对。

如你所见,比特币在哈希函数的范围内使用了极大的数字,所以即使随着玩家的成长,运行所有玩家的猜谜游戏平均仍需要十分钟。一旦有人赢得游戏,他们制作的新积木就会被视为“已发布”。

随着越来越多的电力投入到挖矿中,比特币网络会对其进行纠正,并根据估算原始区块所需的时间动态增加每个区块的“难度”。通过这样做,我们并不是真的意味着有一个集中的资源来决定这一点并告诉其他人如何去做。相反,每个矿工都在为自己估算。

比特币价值越高,想要的人越多,范围就越大——确保“游戏”随着更多玩家的加入而保持平等和广泛。

比特币09年挖好挖吗_比特币好弄吗_比特币 好123

目前,比特币并没有实际调整哈希函数的范围以使挑战看起来更容易或更难,而是使用固定范围:2 到 256 的幂。但是,在比特币版本的挑战中,矿工不是与时间赛跑以匹配特定数字,但其哈希函数的输出只需低于某个阈值即可。

让我们解释一下。

调整这个截止值可以减少挑战。例如,如果我们有一个 1 到 1000 万范围内的散列函数,我们可以将截止值设置为“2”,以允许匹配 1000 万分之一 - 矿工的输出必须等于“1”才能获胜。或者,我们可以将截止设置为 500 万,让某人有 50% 的机会在第一次尝试时获得它。

在比特币网络上,有人第一次尝试解决挑战的几率总是非常小——远大于千万分之一——但鉴于有足够的估计能力来解决世界上的挑战,所以有人会十分钟左右还是能搞定的。

想一想:有了足够的临时工,即使你订购了数百个临时工,个人获胜的几率也太低了。但是,只要有彩票,就一定会有人中奖——保证和随机性取代了中央权威。

把“链”放进区块链

一旦矿工成功解决了困境,会发生什么?他们如何告诉网络的其余部分?如何让所有用户都将新区块视为常态?

简而言之:在这个游戏中,我们最终如何创建一个清晰的历史以确保公正性和清晰性?

在这里,我们解释了设计的一个非常优雅的方面,它确保矿工防止双重支出只是为了自己的利益。

比特币好弄吗_比特币 好123_比特币09年挖好挖吗

使这成为可能的绝妙想法是:

每个区块必须包含前一个区块的哈希值,以告知用户最长的有效区块链仍被接受为规范链

这些条件共同作用,因此在网络上发布新的有效区块后,矿工必须将新区块放入您自己的链中 - 从头开始​​完全挖掘新区块。

为什么?

每个块都必须包含前一个块的哈希,这一事实确保了区块链不断更新。

假设当前链的宽度是五个区块(比特币创建后五十分钟,一个区块十分钟,记得吗?)这意味着我们正在尝试制作第六个区块,以及第六个区块的一部分。是第五个区块的哈希值。

但是假设有人打败了我们并在发布之前发布了第 6 块 - 现在我们正在尝试发布第 7 块,并且我们必须包含其他人的第 6 块哈希,这在发布之前我们很难知道。我们仍然不能尝试让第 6 个区块成为第一个,因为我们在浪费时间——人们已经接受了最长的六个区块链——如果我们不快点,很快就会有第七个区块。

咳!这意味着我们必须从头开始,如果我们希望接受并获得奖励,我们将创建下一个区块。

关键是一个块只对它之前的另一个块有效。我们正在谈论在另一个区块的“顶部”挖矿,以确保堆叠到一个有凝聚力的未来。

比特币 好123_比特币好弄吗_比特币09年挖好挖吗

如果同时发布两个块怎么办?矿工会选择其中一个来挖矿,链上会有一点点的竞争。但!在几个区块内,一个很快就会比另一个长,并且这条链会显得规范,而另一个则被遗弃。

因此,建议用户不要将付款视为最终付款,直到付款至少有几个街区。

现在我们可以看到,双花是不可能的:在一个区块的“顶部”发布多个区块后,该区块中的交易实际上被“埋葬”了——无法恢复并锁定在支付历史记录中。

在不撤销整个区块链的情况下很难撤销它们。对不起!

那么有人会如何撤销整个区块链呢?那将很难做到。事实上,只有当你消耗的电力比其他人加起来的总和还要多时,你才能赶上其他矿工。之所以称为 51% 功率,是因为我们需要控制进入系统的 51% 功率。

如果有,这就是比特币的弱点。而且,只要不发生这种情况,系统就是安全的。

(这也是政府可以扰乱比特币网络的一种形式。如果一个艺人不断地做51%的点击来扭转历史,用一堆垃圾交易代替它,最终没有人会记录任何付款,好像什么都没发生一样。完全在比特币网络中——如果你偏执,小心!)

但是,这个问题还不是全部:为了破坏生态系统,参与者(或政府)仍然需要消耗与世界各地的整个自发志愿者团队一样多的电力。他们可以赚钱。

而且,假设世界上其他任何人都想阻止这种情况(想想其他激烈的竞争者),他们将很难摆脱。

一个参与者将需要区块链网络中 51% 的电力,这可能很困难。