BTC哈希函数简述业界

/ 发布时间 / 2021-07-27
对BTC有兴趣的人多少应该都听说过“加密哈希函数(cryptographichashfunction)”这个术语。...

对BTC有兴趣的人多少应该都听说过“加密哈希函数(cryptographic hash function)”这个术语。但它到底的意思是,与数字货币又有哪些联系?

哈希函数不止是BTC协议的要紧部分,还是也是整个信息安全的要紧部分。

大家将在下文中通过一些容易的例子来展示哈希函数的工作原理。

从理论上讲,哈希函数就是一种数学步骤,将任意大小的输入数据放入该步骤,然后返回固定大小的输出数据。

更具体地讲就是,提取任意长度的字母序列作为输入——大家将其称为string——然后返回一个固定长度的字母序列。无论这个输入string是一个单一的字母,单词,句子还是整部小说,而输出的长度——叫做摘要(digest)——永远都是相同的。

这类的哈希函数的容易见到用例就是存储密码。

当你用任何一种互联网服务创建一种需要密码的用户竞价推广账户时。这种密码都是通过哈希函数运行的,存储的就是该密码信息的哈希摘要。当你输入密码来登录账号时,然后相同的哈希函数就会去运行你输入的密码,然后服务器就会检查其结果是不是与存储的摘要相匹配。

这就意味着即便黑客可以访问用于存储哈希的数据库,他们也不可能立即破坏所有用户竞价推广账户,由于没办法随便找到生成某一特定哈希的密码。

你可以用Python(Mac和Linux操作系统在默认状况下安装的编程语言)来实验哈希值。(本课程假设用了某种版本的OSX或者Linux系统,由于Windows用Python会愈加复杂)

第一,打开终端,输入python并点击Enter。

然后你将进入Python REPL,在这种环境下,你可以直接试用Python命令,而不是在单独的文件中撰写程序。

然后输入以下数值,在每行之后敲击Enter,并在标记处输入TAB:

importhashlibdefhash:[TAB]hash_object=hashlib.md5)[TAB]print)[ENTER]

如此你就创建了一个函数——hash,该函数将计算出某一特定的用MD5哈希算法的字符串的哈希值。将字符串插入上述的括号()中便可运行该函数。比如:

hash

按下Enter并查询该字符串的哈希摘要。

你将看到在同一字符串上调用该哈希函数将会一直生成相同的哈希,但添加或改变其中的某一个字符将会生成一种完全不一样的哈希值:

hash=>7ae26e64679abd1e66cfe1e9b93a9e85hash=>6b1f6fde5ae60b2fe1bfe50677434c88

BTC哈希函数

在BTC协议中,哈希函数是区块哈希算法的一部分,区块哈希算法可以用来通过挖矿步骤将新的买卖撰写到区块链中。

在BTC挖矿过程中,函数的输入都是源于近期的尚未确认的买卖(与一些与前一个区块有关的时间戳和引用一些额外输入)

在以上代码示例中,大家已经看到改变哈希函数中的一小部分会致使产生一种完全不一样的输出。这个属性与挖矿过程中的“工作量证明(POW)”算法至关要紧:为了成功“解决”一个区块,矿工需要以这种方法将所有输入与他们我们的输入数据结合,由此产生的哈希将以某些0开头。

作为一种基础的演示,大家可以通过在“CoinDesk rocks!”后面手工添加尝试感叹号(!),以此尝试用大家的Python哈希函数来进行“挖矿”,知晓大家找到以单个0开头的哈希。

>>>hash66925f1da83c54354da73d81e013974d>>>hashc8de96b4cf781a6373766c668ceac0f0>>>hash9ea367cea6a2cc4a6f5a1d9a334d0d9e>>>hashb8d43387d98f035e2f0ac49740a5af38>>>hash0fe46518541f4739613b9ce29ecea6b6=>SOLVED!

当然,为BTC区块解决哈希——撰写该文时,需要以18个0开头——需要一个很大的计算量(BTC互联网的所有计算机处置能力结合在一块仍旧需要接近10分钟才能解决一个区块)。

需要很多的处置能力就意味着新BTC的挖掘需要一个长期的过程才能完成,而没办法一次性将所有些BTC全部挖出。

为了可以从挖矿中赚取BTC,你需要投入很多的工作来解决区块——通过获得这种奖励,你将所有些新买卖锁入区块中,也就是添加到之前所有买卖的永久性记录中:区块链。

此文出于传递更多信息之目的,并不意味着同意其看法或证实其描述。本网站所提供的信息,只供参考之用。

1