哈希函数—区块链的back bone

当前位置:首页 > 币圈百科 > 哈希函数—区块链的back bone

哈希函数—区块链的back bone

2023-02-07币圈百科225

理解比特币和区块链非常简单。你只要了解三个部分,第一是了解它的数据结构,第二是分布式存储和共识,第三是网络和节点。

哈希函数在数据结构和分布式共识中都非常重要,那么什么是哈希函数呢?

一般来说,哈希函数是一种可以将任意数据转换成定长输出(也就是我们所说的哈希值)并且可以高效计算的数学函数,所以我们通常用它来构建哈希表等等。

在此基础上,密码哈希又多了三个特性。

表示原始数据可以无冲突隐藏,可以用来创建搜索谜题

No conflict

No conflict,表示这个哈希函数永远不会将两个不同的数字转换成同一个哈希值。

11

我们以sha-256为例(sha-256也是比特币使用的哈希函数,属于sha-2系列)。它可以将数据转换成256位的哈希值,即32个字节,无论数据(输入)是大是小。

12

即使这个数据(输入)只是换了一个标点符号,生成的哈希值也是完全不同的。

但是理论上存在哈希值重复的情况。我们称这种情况为冲突,因为你认为,这个输入是无限的,你可以输入任何数据,或大或小。而这个输出,哈希值,是有限的。(32位字母和数字的组合,组合数量有限)但是这个数字是很大的。如果你想找到sha-256哈希值的副本,你应该尝试输入2的130次方。这个数字是天文数字,我的电脑打不出来。所以没人能发现冲突,也就是重复的哈希值。

确定哈希值的唯一性后,我们就可以用哈希值作为标识文件了。当文件非常大时,这是非常有用的。当然,这只是初级玩家的用法。

高级玩家玩起来更流畅。

相信玩编程的朋友都知道一种叫链表的数据结构。

13

单向链表

是用指针将不同的数据块按顺序链接起来,那么现在我们已经确定了哈希值的唯一性,是否可以用这个哈希值作为指针呢?

如何实现?

先计算第一个数据块的哈希值,然后把这个值放到第二个数据块中,再计算第二个数据块的值(包括第一个数据块的哈希值),以此类推,就得到一个新的数据结构,俗称区块链。

14

当然,这只是一种区块链数据结构,并不是我们现在所说的区块链技术(后者还包括分布式存储和分布式共识,以及对等网络)。那么这个数据结构比linkedlist多了一个特性,就是防篡改。任何人想修改这个链中数据块的消息都会很容易被发现,因为哈希值不会匹配。

可以隐藏原始数据

密码哈希函数的第二个特点是可以隐藏原始数据,因为哈希函数是单向函数,你可以把数据转换成哈希值,但是不能把哈希值转换成原始数据。因此,哈希函数可以隐藏原始数据。

这个很有用。最著名的应用是存储密码。

比如你在一个网站上的密码,如果网站直接把你的密码存储在他们的服务器上,是非常不安全的,但是如果存储了你的密码对应的哈希值,那么每次你输入密码的时候都会在后台自动转换成一个哈希值,只要哈希值匹配就可以登录。这样安全性就提高了很多。

但是为什么盗取号码和密码的案例那么多?那很可能是因为你的密码很普通,黑客只需要输入所有的普通密码,然后和哈希值进行比较。

所以要想安全隐藏“原始数据”,对输入的随机性和广泛性是有要求的。 这就是为什么很多网站坚持密码要有符号,包括大写字母,小写字母,数字等等。

第三个可以用来创建搜索谜题的特性

是创建搜索谜题,就是我用hash函数创建一系列的数学谜题,然后给出一个可能的答案范围(难度随着范围的大小而递减),然后让你一个一个去尝试。(注意,这个没有捷径,就像我们之前会做的,只需要改变一个标点符号的哈希值。而且这个哈希值的生成没有逻辑和规律可循,只能一个蓑衣网小编2023一个试。)如果你运气好,找到了正确的答案,用你解决这个问题的信息对答案进行哈希运算,得到一个特殊的哈希值。(比如以很多零开头,或者以很多x结尾)。

这是比特币挖矿用的。如果你找到答案(nonce)并用块头中的信息散列它,你将得到一个特殊的散列值,以许多零开始。

来源:BitcoinMagazine,区块链铅笔综合

哈希函数—区块链的back bone | 分享给朋友: