主页 > imtokenapp下载安装 > 3j通过哈希值查询区块_区块链密码学(三):密码学哈希算法与挖矿

3j通过哈希值查询区块_区块链密码学(三):密码学哈希算法与挖矿

imtokenapp下载安装 2023-06-06 07:38:20

从上面继续:

Reed:区块链中的密码学(一):提高对密码学的理解zhuanlan.zhihu.com

ac27e228930275a3248b0d8d348ed4ab.png

Reed:区块链中的密码学(二):密码学基础介绍zhuanlan.zhihu.com

说到挖矿,大家首先想到的应该是:

3a2b5b33d90614d4a4c4a6557a70a0ca.png

但是在区块链中挖矿其实是这样的:

55d02ceb34edf42298c889fad8e7573e.png

机架上放满了矿机,它们不停地在做计算,在做Hash计算。 有人称这种挖矿为黑色能源生产,将电能转化为数字货币。 那么今天就来说说Hash算法和POW共识算法的关系。

01:哈希算法

说到Hash,我们就不得不区分普通的Hash算法和密码学中的Hash算法。

普通哈希算法,一般也称为哈希表或哈希表哈希值btc,属于一种基本的数据结构。 一般用于实现O(1)的查询条件,涉及哈希函数的选择和解决哈希碰撞问题。

它的应用范围很广,比如C++标准库中的hashmap,Java中的HashMap,Python中的dict,都是使用Hash算法实现的。 另外,很多缓存产品,比如memecached、redis,都是哈希算法的大规模应用。

密码学中的哈希算法可以用一个公式来描述:

摘要/散列/指纹 = 散列(消息)

算法的输入是一条消息,或者一堆二进制内容。 最后输出的是一个定长的二进制字符串,可以称为摘要、哈希值、指纹等。哈希算法也有很多种。 密码学的散列算法有五个重要的特点:

消息是输入相同,输出值相同,所有输出长度相等; 无论输入多长,计算速度都快; 算法是单向的,很难通过输出值得到输入值; 输入信息一旦被修改,即使是很Minor的修改,输出的值也是不一样的; 没有哈希冲突。 即很难找到两个输出值相同的不同消息;

哈希值_哈希值btc_哈希值转种子

有许多加密哈希算法,例如 MD4 和 SHA。 但是MD5在国内被王晓云教授证明是不安全的,所以目前广泛使用的是SHA族算法。 比特币使用 SHA-256 算法。

我们可以在Python中演示使用SHA-256的过程:

 % python
Python 3.7.3 (default, Nov 15 2019, 04:04:52) 
>>> import hashlib
>>> hashlib.sha256("hello world!".encode('utf-8')).hexdigest()
'7509e5bda0c762d2bac7f90d758b5b2263fa01ccbc542ab5e3df163be08e6ca9'
>>> hashlib.sha256("hello world".encode('utf-8')).hexdigest()
'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'
>>> hashlib.sha256("hello world, bitcoin ethereum consusus".encode('utf-8')).hexdigest()
'39a0a566f63869830e769533c4efabd31cba7cf624cd23e67638a25354fa5c10'

密码哈希算法的特点决定了它的应用范围,常用于身份验证、文件指纹、消息防篡改等各个方面。

接下来我们要说的是一个和区块链极其相关的应用,HashCash。

02:哈希现金

HashCash 我们在《从区块链技术发展史看什么是区块链? 》中提到,由Adam Back设计,具体见论文: Adam Back在当今区块链行业仍有巨大的影响力。他是Blockstream的创始人兼CEO,比特币核心开发人员大多是Blockstream的员工。

5ac1e7ae004dd76ccfd5f896048fbd37.png

哈希值btc_哈希值转种子_哈希值

HashCash最早出现是为了解决网络中大量的资源滥用问题,尤其是垃圾邮件的泛滥。 怎么做?

HashCash 的思想很简单。 你能不能在发邮件之前做一些小工作,只有你做对了我才会接受你的邮件。 这个工作不能太重,但至少要占用发送方的一些资源。

其实这个过程大家应该很熟悉了:

151922ff6fc9ddb1558de6b3c484cdfb.png

12306占据了人们的注意力,HashCash就是CPU的计算能力。 他的方法是:

在邮件的消息头中,添加一个哈希现金戳(hashcash stamp)哈希值; hash 包含收件人地址、发送时间、salt,hash 值的特殊之处在于至少前 20 位必须为 0 是合法的 hashcash 戳。 为了得到一个合法的散列值,发送方必须经过多次尝试(改变盐值)才能获得。

HashCash背后的设计思想是希望基于数学问题,希望你做一些工作,即支付CPU的计算成本(这个概念很重要,这也是比特币中的关键),以及得到正确的结果才能获得一定的资源。 (例如向您的邮箱发送垃圾邮件)。

Hash算法速度比较快,输入数据稍有不同就会导致hash值的巨大差异,Adam Back选择了这种算法。 用现金来表示支付算力后的资源回报是非常准确和恰当的,尤其是扩展到以比特币为核心的POW共识算法时。

03:比特币挖矿

以比特币为代表的区块链技术称为分布式账本。 既然是账本,就有一个很核心的问题,会计在哪里? 谁将负责保管账簿?

在传统的中心化应用中,处理这个问题非常简单。 在应用的账户体系中,可以设置不同的权限,并将这个核心权限分配给极少数人来处理。

但比特币是一个纯粹的 P2P 系统。 每个节点的权限和地位都是一样的,这意味着要有很多人一起做决定。 这个过程在区块链中称为共识(Consensus)。 该机制称为共识算法。

中本聪在设计比特币算法时,受到HashCash的启发,采用工作量证明的方式实现记账过程。 参与记账的节点称为矿工。 比特币白皮书中明确提到了工作量证明。 详见:(整理各种版本),有详细说明。

矿工将收到的交易组合起来形成一个完整的区块。 区块头由一些字段组成,最后一个字段nonce是可变的。 矿工不断修改nonce的值,计算整个区块头的哈希值。 当哈希值小于某个目标值时,认为记账成功。 该区块为合法区块,向全网广播,矿工获得记账奖励。 目标值与难度值相关联。 难度值越大,目标值越小(哈希值前面的0越多),挖矿难度就越高。

寻找nonce的核心过程类似于下面这段代码:

def proof_of_work(header, difficulty_bits):

哈希值_哈希值btc_哈希值转种子

# calculate the difficulty target target = 2 ** (256-difficulty_bits) for nonce in xrange(max_nonce): hash_result = hashlib.sha256(str(header)+str(nonce)).hexdigest() # check if this is a valid result, below the target if long(hash_result, 16) < target: print "Success with nonce %d" % nonce print "Hash is %s" % hash_result return (hash_result,nonce) print "Failed after %d (max_nonce) tries" % nonce return nonce

完整代码见:

计算难度随着难度的增加呈指数增长。 笔者电脑是2018款macbook,截取部分计算结果如下:

哈希值转种子_哈希值_哈希值btc

Difficulty: 1048576 (20 bits)
Starting search...
Success with nonce 237723
Hash is 000005720acd8c7207cbf495e85733f196feb1e3692405bea0ee864104039350
Elapsed Time: 0.5485 seconds
Hashing Power: 433381 hashes per second
Difficulty: 2097152 (21 bits)
Starting search...
Success with nonce 687438
Hash is 000003a6eeee97491a9183e4c57458172edb6f9466377bf44afbd74e410f6eef
Elapsed Time: 1.5282 seconds
Hashing Power: 449829 hashes per second
Difficulty: 4194304 (22 bits)
Starting search...
Success with nonce 1759164
Hash is 0000008bb8f0e731f0496b8e530da984e85fb3cd2bd81882fe8ba3610b6cefc3

哈希值转种子_哈希值_哈希值btc

Elapsed Time: 3.9695 seconds Hashing Power: 443166 hashes per second Difficulty: 8388608 (23 bits) Starting search... Success with nonce 14214729 Hash is 000001408cf12dbd20fcba6372a223e098d58786c6ff93488a9f74f5df4df0a3 Elapsed Time: 32.6874 seconds Hashing Power: 434868 hashes per second Difficulty: 16777216 (24 bits) Starting search... Success with nonce 24586379 Hash is 0000002c3d6b370fccd699708d1b7cb4a94388595171366b944d68b2acce8b95 Elapsed Time: 55.3770 seconds Hashing Power: 443981 hashes per second

我们这里只讲解核心的挖矿过程,更详细的过程描述可以在《精通比特币》一书中找到。 随着比特币价格一路走高,越来越多的矿工加入算力军备竞赛哈希值btc,目前算力已经达到了恐怖的110.18 EH/s。 比特币网络本身会随着计算能力的变化动态调整难度值。 比特币网络10年难度曲线如下:

c3fc3b7bfd4240fd7c9da116607588b7.png

当然,比特币网络也是这场算力竞争的最大受益者。 算力越大,系统越安全,能够形成的共识就越大。 因此,比特币市值长期超过整个数字货币市场的50%。

密码哈希算法广泛应用于区块链技术。 除了挖矿,它在区块打包方面也大放异彩。 保证区块链不可篡改的算法是由哈希算法决定的。 敬请期待我下次来讨论这个问题。