主页 > imtoken官网app下载 > btc验证节点 BTC学习笔记连载(三)——哈希

btc验证节点 BTC学习笔记连载(三)——哈希

imtoken官网app下载 2023-02-06 07:22:34

春节放假了。 如果你觉得喝酒打牌很无聊,何不来学点新东西呢。 正好好兄弟@songoku_web3 完成了比特币学习笔记系列,这是我见过最深入的比特币研究内容。 你知道的和不知道的都在这里。 通过本系列文章,您将真正了解什么是区块链? 什么是比特币? 我们的公众号会持续更新他的系列研究成果,敬请关注:

如果您想了解更多信息,请在 twitter.com/songoku_web3 上关注@All in web3。 如需加入交流微信群,请加@looshine123为微信好友(注:web3)。

jquery节点前添加节点_btc验证节点_网关节点 簇头节点

我们说BTC是一种加密货币,

既然是加密货币,自然与密码学密切相关。

但是整个比特币使用的密码学只有两种:

散列,签名

签名主要使用公钥加密。 本文将首先讨论哈希。

什么是哈希?

不仅仅是BTC网络,哈希是整个加密世界的基础。 要想对区块链有更深入的了解,首先要了解哈希。

哈希(Hash)就是我们通常所说的散列函数、散列函数、散列算法,它可以将任意长度的输入值转换成固定长度的输出值。

哈希函数通过其算法将消息和数据压缩成一个摘要,在减少数据量的同时统一输出数据,便于对任何输入数据进行指纹识别。

哈希冲突、不可逆性、益智友好

一个可以应用于BTC乃至整个加密世界的哈希函数称为加密图形哈希函数。 这样的哈希函数具有三个重要特征:

1. 抗碰撞

这是哈希函数最重要的特性之一,即抗碰撞性。

什么是碰撞?

对于任意哈希函数H(x),如果两个不同的输入可以得到相同的输出,即两个输入发生哈希冲突,也可以表示为:

X ≠ Y, H(X) = H(Y)

为什么会发生碰撞?

事实上,不仅有碰撞,而且有无限多次碰撞。

很简单,我们知道SHA-256是一个固定256位二进制输出的哈希函数,即它的输出空间是2^256。 这虽然是一个天文数字,但依然有限。

有限的输出空间对应无限的输入空间,必然会发生碰撞。

哈希本质上是一个多对一的模型,其中任何输出对应于无限数量的输入。

碰撞会带来哪些隐患?

比如Sun Cut的BTC钱包私钥(一个256位的二进制数),如果有人能将其与它的公钥相撞,将立即获得私钥对应资产的控制权,一波自由直接袭来.

但如果这种东西可以“操作”的话,那么整个Crypto世界基本上就被推翻了,还有人的钱包还安全吗?

这显然不是你想撞就能撞的!

散列如何抵抗冲突?

这里的阻力意味着没有办法人为地制造碰撞。 比如你知道孙杰的钱包地址,就没办法“撞”到它的私钥。 你只能继续尝试,你可以尝试一下。 概率比地球爆炸的概率小N倍。

(私钥-公钥-地址的转换算法文后面会详细讲解,这里了解Collision resistance即可)

这是哈希函数的抗碰撞性,

这是加密世界的核心基础,

如果这一点被破坏,整个现有的加密世界将被推翻!

2. 不可逆转

哈希的不可逆性也称为单向性,或隐藏。

也就是说,已知一个输入x,很容易得到它的输出H(x),但是在得到输出H(x)之后,不可能推导出任何输入信息。 也可以这样表达:

x —> H(x)

如何保证其隐藏特性?

我们先看看它是如何不隐藏的:

比如在酒吧玩游戏,小姐姐让你猜她是几月(你猜对了,今晚会和你一起回家),为了避免作弊嫌疑,先把答案散列一下再公布.

在这种情况下,根本没有隐藏。 你只需要对1月到12月的一个个进行hash运算,最多计算12次就可以对比结果找到答案。

聪明的孩子很快就能找到问题所在。 要实现隐藏,输入空间必须足够大,分布必须足够均匀。

也就是说,你不能通过任何技术、任何信息或任何暗示来逆转输入。

如果上面游戏中的女孩要你猜她最喜欢的诗句,今晚你就得自己回家了。

3.益智友好

满足加密应用要求的哈希函数有两个基本特征:

- 只要输入不变btc验证节点,输出就不变

- 输入的任何微小变化,输出都会有很大的不同

如 SHA-256 函数的两个输出所示(转换为十六进制):

''7f75b27d8174945991fd7ab054f66611cb7712b533bbcd77e20c3c2c0d6e226e''

''708e0993431d8156a95464bd870476b9d3809b6fa3e38abcb24ffcd842e6598a''

这是两个完全不相关的值。 事实上,输入因时间而异:

《我是中本聪》

''我是中本聪。 ''

这一点很重要!

你没有办法根据输入法推导出输出结果!

这是Puzzle friendly,没有什么捷径可言,只有通过穷举结果的比较,没有任何经验优势,没有任何逻辑关联,这是世界上最公平的事情。

后面要讲的BTC挖矿(Mining)过程就是不断尝试随机数Nonce进行哈希,直到一个Nonce计算出一个满足条件的结果。 没有捷径。

只有满足这个条件,POW(Proof of work)才能成立,它可以证明你因为做了足够的工作而获得了某个Block的记账权,这样任何“单位算力”都可以感觉到这是一个块。 公平的游戏。

而一旦找到这样的Nonce,获得了记账权,其他节点就很容易验证了。

挖矿难,验证容易!

(稍后我们会出一篇关于BTC挖矿的专题文章)

是不是觉得这些特征有点让人迷惑,其实只要理解了Hiding是说输入不能通过输出反转,而Puzzle friendly是指输入之间不相关,就很好理解了。

所有在Crypto世界中使用的哈希函数都必须满足以上三个特性,包括我们后面会讲到的以太坊。 虽然有与BTC不同的哈希函数,但必须基于这几点才能顺利运行。 .

Rivest、MD 系列、SHA 系列、RIPEMD

市场上有许多流行的哈希函数。 最经典的是MD系列。 我们平时接触到的就是MD5(Message-Digest Algorithm 5)。 MD5 是由 MD2 和 MD4 发展而来的。

1989年,麻省理工学院教授Ronald Rivest设计了MD2。 该算法首先对信息数据进行补码,使信息的字节长度为16的倍数,然后在末尾附加一个16位的校验和,并根据新生成的信息计算哈希值。

为了增强算法的安全性,Rivest在1990年设计了MD4算法。MD4也是先填充信息……然后对每个块分三个不同的步骤进行多轮处理,生成一个128位的摘要.

1991年,Den Boer和Bosselaers发表了一篇文章,指出了MD4多次迭代的第一步和第三步中的漏洞。 Dobbertin向大家演示了如何使用普通个人电脑在几分钟内找到MD4的漏洞。 这个漏洞会导致输入不同输出相同,毫无疑问MD4的寿命到头了。

但不得不说,MD4影响了很多主流的哈希算法:MD5、SHA家族和RIPEMD。

在MD4的基础上,Rivest马不停蹄地设计了更加成熟的MD5算法。 它在MD4的基础上增加了“安全带”的概念。 它由四个步骤组成,与 MD4 略有不同。 合成,输出也是128位,也是用了多轮思考。

jquery节点前添加节点_网关节点 簇头节点_btc验证节点

如图所示,一次MD5运算由类似的64个循环组成,分为4组,每组16个循环。 F是非线性函数,一个函数运算一次。 Mi代表一个32位的输入数据,Ki代表一个32位的常量,用来完成每次不同的XOR、AND、OR、NOT等运算。

1996年后,MD5被证明存在弱点,可以被破解。 2009年,中国科学院谢涛和冯登国破解了MD5,算法复杂度仅为2^20.96。 这种攻击在普通计算机上运行只需几秒钟。 对于安全性要求高的数据,MD5正式退出历史舞台!

这个时候只要有更好的技术,就轮到SHA出场了:

SHA 是 Secure Hash Algorithm 的缩写。 我们称之为安全哈希算法。 它是一个加密散列函数系列,并通过了 FIPS 认证。

但棘手的是,SHA 是由美国国家安全局 (NSA) 设计并由美国国家标准技术研究院 (NIST) 发布的。 这是美国政府的标准。 谁知道它有没有后门?

SHA有四大类:

SHA-0:1993年发布后,很快被NSA撤回,几乎没有留下什么声响。

SHA-1:是MD5的主要继承者,在很多安全协议中被广泛使用,但其安全性在2010年后的大部分场景中暴露出来。2017年,荷兰密码学研究组CWI和谷歌正式宣布破解SHA . -1。

SHA-2:包括SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256等。这些不同的算法标准不仅是生成摘要的长度,循环次数等。除了细微差别外,基本相同。 最知名的应该是SHA-256和SHA-512。 SHA-2 尚未暴露出明显的漏洞。 虽然该算法与SHA-1基本相似,但目前还没有对SHA-2进行有效的攻击。

SHA-3:由于MD5的成功破解以及SHA-0和SHA-1的理论破解,NIST需要与以往不同的哈希算法,SHA-3于2015年正式发布。

RIPEMD 于 1996 年由鲁汶大学的 Hans Dobbertin、Antoon Bosselaers 和 Bart Prenee 组成的 COSIC 研究小组发布。 RIPEMD是基于MD4设计的,其性能类似于比较著名的SHA-1。

RIPEMD-160 用于 BTC,是原始 RIPEMD 的改进 160 位版本。 它是 RIPEMD 系列中最常见的版本,输出为 160 位二进制数和 40 位十六进制数。

SHA-256 的实施

为什么输入的数据无论大小都能得到等长输出?

为什么你的输入变化一点点,输出就会变化很大呢?

BTC 使用的主要哈希函数是 SHA-256。 让我们从 SHA-256 中找出原因:

对于任意长度的输入,SHA-256 产生一个 256 位哈希输出摘要,相当于一个长度为 32 字节的数组,通常用长度为 64 的十六进制字符串表示。

与MD4、MD5、HSA-1等哈希函数的运算过程类似,在进行哈希计算之前,首先需要进行填充和信息分块:

如图所示btc验证节点,对这些信息块进行多轮计算,最终得到一个256位的输出:

网关节点 簇头节点_jquery节点前添加节点_btc验证节点

使用以下公式一项一项进行操作:

btc验证节点_jquery节点前添加节点_网关节点 簇头节点

本质上是一种256位的加密算法,以消息块为密钥对中间散列值进行加密。

不管输入有多大,在一轮计算中最终都会产生一个256位的输出。 如果输入太大,无非就是多计算几轮。 当输入很小时,它会填满至少一个消息块 M1 。

一般理解这个就够了。 如果想深入,也可以自己谷歌一下,包括这里的H(0)是怎么确定的,压缩函数是怎么计算的,处理流程是怎样的等等。

防篡改、隐私保护、加盐

1.防篡改

H(m) = 摘要

如果对一段数据进行哈希处理,得到它的摘要,那么这个摘要就可以验证m是否被篡改过。

BTC每个区块中的交易通过Merkle树生成Root hash并存储在Block header中。 任何人都无法篡改区块中的交易,这一点基本由哈希函数保证。

防篡改应用在web2中也有很多场景。 比如我们在日常工作中也能找到应用案例。 比如你上传一段代码或者一个机密文件,有没有被篡改的痕迹,哈希就是一个极好的工具。

2.隐私保护

在经典密码学文章中,我们提到了用于登录的密码,一个普通密码,以及一个用于验证身份的凭证。 这是我们使用最广泛的身份验证系统之一,可防止未经授权的系统访问。

如何保存这些密码?

一般情况下,它会被散列并存储在数据库中。 当用户登录时,会对用户输入的密码进行同样的哈希运算,如果与数据库中保存的哈希匹配则通过。

这不仅保护了用户的隐私,也避免了不同站点之间的撞库风险。 在大多数系统中,密码是通过哈希加密和存储的。

但也有例外:

几年前某 Web2 大厂被黑。 还记得暴露数据库的明文密码吗?

...

事实上,直到现在,MD5 在我们的工作中仍然被频繁使用。

比如我们在腾讯做的营销和风控业务,经常需要用到机器学习建模。 建模时,客户需要提供正负样本。 样本ID通常是用户的手机号和设备ID。 这不能搞砸了。 传递。

为了保护用户隐私,保护这些手机号码不被人手窃取,通常双方的建模都是基于MD5 ID进行碰撞匹配。

虽然MD5已经不安全了,但是在很多对安全性要求不高的场景下还是适用的。 很多场景下,在一定时间内,一定阈值下足够安全就足够了。

3.数字承诺

它也可以称为密封信封的数字等价物,用于预测场景。

预测者无需提前公布结果,而是通过哈希将预测结果公之于众,等待合适的时机发布自己的预测与哈希匹配。

通常,如果想进一步加强哈希结果的安全性,还可以加盐。

什么是盐?

H(X || 盐)

这里就是salt,根据输入的X拼接一个字符串。如果场景的输入空间不是那么大或者分布不是那么均匀,可以通过加salt提高安全性。

再补充一点:

没有哈希函数可以从数学上证明抗碰撞性,这意味着无法从理论上证明上述如此重要的性质。 通常我们只能依靠实践经验。 世界上有那么多哈希函数。 密码学专家都没有找到碰撞的方法,所以我们认为SHA-256还是安全的,但是MD5就不安全了。

然而,安全不是永恒的。 加密与破解在对抗中相互发展。

随着技术突飞猛进,SHA-256 可能有一天不再安全。

但它肯定会在 BTC 受到威胁之前硬分叉出更安全的哈希算法。

所以坚持你的比特币,别担心!

后续我们会持续更新BTC学习笔记系列:

3.哈希4。 公钥加密:DH & RSA5。 公钥加密:ECC6。 为什么会有比特币? 7. BTC数据结构 8. BTC共识协议 9. 私钥-公钥-地址 10. 钱包和助记词 11. 比特币&UTXO的实现 12. 比特币网络 13. 比特币挖矿