首页 > 比特币 > 正文

比特币入门第一课:搞懂哈希,轻松掌握加密货币核心!

大道简说Whisery2025-07-27 来源:大道简说Whisery

内容提要:本文详细解析了比特币使用的密码学哈希算法核心原理。哈希算法将任意数据转换为固定长度摘要(如SHA-256生成64位十六进制值),具有确定性、不可逆性、抗碰撞性和雪崩效应等特性。比特币挖矿本质是通过nonce随机数寻找满足H(区块头+nonce)

比特币其实是一种加密货币(Encryption currency),加密部分内部是利用密码学原理,主要用到密码学中的2个功能:哈希和签名。本篇先来讲第一个功能,也就是哈希。

1.0 哈希算法

定义:哈希(Hash)算法是一种将任意长度的数据压缩到某一固定长度的数据摘要的算法(运用哈希函数),得到的结果称为 哈希值 或 散列值。

特性:

1、输出的长度是固定的(无论输入什么,都会有固定长度的输出值)。

2、确定性:对于相同的输入,哈希函数总是生成相同的哈希值。→ 可以用于验证数据完整性。

3、不可逆性(单向性)(也叫隐蔽性hiding):哈希函数是不可逆的,即从哈希值很难推导出原始输入数据(已知输出值H(x),很难推出输入值x)。除非暴力破解,也就是一个个去试。所以这个隐蔽性的前提是输入的空间要足够大且输入的取值要分布均匀,若输入的空间已经足够大了,但所有取值只在一小块区间中,这样也是不行的。

4、抗哈希碰撞(抗碰撞性Collision Resistance):抗哈希碰撞是指不同的输入产生相同的哈希值的概率非常低(比特币中SHA-256的哈希算法使其有2^256种输出,但有无数个输入,所以可能会存在不同的输入,一样的输出的情况,即x≠y,H(x)=H(y)。目前只能遍历所有的输入x,无法在数学中证明能人为制造碰撞,而有一种哈希算法MD5已经知道怎么人为制造碰撞)。

5、雪崩效应:即使输入数据有微小的变化,哈希值也会发生显著变化。→ 可以用于验证数据完整性。

比特币中还有个谜题友好型(puzzle friendly)的性质,意思是哈希值的计算,事先是不可预测的,想要得到落在某一个范围的H(x),只能遍历x带入计算,这过程中是没有捷径的。

这个性质在区块链中重要的就是挖矿,也是比特币挖矿的本质:

在比特币中,加入了随机数n(nonce),使得x范围足够大且分布均匀(比特币的区块链中,每个区块有一个区块头,区块头中其中的2个域,分别为随机数nonce和目标值target):

矿工们要做的事情就是不断地尝试这个nonce值,并将这个nonce值结合区块头信息一起作为输入,然后计算哈希值。若哈希值小于或等于这个target值,说明挖矿成功,否则不成功,继续尝试其他nonce值。

其实这也是矿工挖矿的过程(即PoW工作量证明,只要矿工计算出n使得H(x)落在某一个范围内就能得到奖励),运用了第3点不可逆性的性质,但是这个性质的前提是输入值x范围足够大且分布均匀。

H(区块头哈希值x+n)< target(指定的目标域值)

要想取得某个nonce值满足上面公式,没有什么捷径可走,只能一个个去尝试,所以只能做大量的工作来验证,这就是所谓的工作量证明POW(proof of work),也就是所谓的比特币挖矿。

值得注意的是,找到随机数n使得哈希值落在某个范围很困难,但是一但找到n,验证哈希值非常容易,这种difficult to sovle, but easy to verify的不对称特点使得篡改变得难以可行。

常见应用:

1、📦数据完整性验证:通过计算文件或数据的哈希值,并与预期的哈希值进行比较,可以验证数据是否被篡改或损坏。

2、🔐密码存储:在现代安全系统中,密码通常不会以明文形式存储,而是存储其哈希值(如 SHA-256)。当用户登录时,系统会将输入的密码进行哈希处理并与存储的哈希值进行比较。这样即使数据库泄露,攻击者也难以获取用户的原始密码。

3、🕵️ 数字签名:数字签名利用哈希算法生成消息的摘要,并结合公钥加密技术,确保消息来源可靠、未被篡改。

关于防篡改的应用,举个例子🌰:

密封信封的数字形式

digital equivalent of a sealed envelope(digital commitment)

假如有一个非常有影响力的人巴菲A说自己能预测股市,他预测明天股价会涨并把自己的预测公布到市场上,要是明天股价涨了,就说明他预测是准确的。但是这里有一个问题是,明天的股价可能是受巴菲A的预测而影响的,并不能说明他的预测能力,于是他可以不提前公布自己的预测,而是把预测结果通过哈希函数H(x)得到一串输出,然后写在信封里并封好,再给一个可靠的第三方,等明天结果出来之后再公布自己的预测,同时公布x让大家检验预测结果是属于巴菲A的。这样就能阻止信息中途没有被篡改同时验证信息的来源(运用性质二-五)。

不过这也有个缺陷,就是输入值x只有涨、跌、不变的情况,很容易推导出H(x)的结果,所以这就是为什么x的输入值要足够大且均匀分布,使得结果难以预测。

再举个例子🌰:

比如你有一份重要文件,需要上传在云服务器上,上传前对这份文件进行哈希运算并保存结果在本地,过一段时间下载时,为了判断这份文件是否篡改过,只需再一次对这份文件哈希运算,跟上传前的哈希值比较,若相等,则没有篡改,否则篡改过。

常见Hash算法:

1. MD5 (Message-Digest Algorithm 5)

早期常用的哈希算法。但是现在已经存在较多已知的碰撞攻击,不推荐用于安全性要求高的场景。

  • 例子:65a8e27d8879283831b664bd8b7f0ad4 → 32个字符的报文摘要(32 hex/128 bits/16 bytes的输出长度)

2. SHA-1

已被发现存在安全漏洞,逐渐被淘汰。

  • 例子:2ef7bde608ce5404e97d5f042f95f89f1c232871 → 40个字符的报文摘要(40 hex/160 bits/20 bytes的输出长度)

  • 最新研究表明,对 SHA-1 进行哈希碰撞的攻击可以在大约2^51次操作内实现(约 22517998 亿次)。因此,SHA-1 已不再被认为是安全的。Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并非是为了安全性,而是为了数据的完整性;它可以保证,在很多年后,你重新checkout某个commit时,一定是它多年前的当时的状态,完全一模一样,完全值得信任。

3. SHA-2家族

包括 SHA-256 和 SHA-512 等变种,目前尚未发现其存在哈希碰撞的情况,广泛应用于安全领域。

  • SHA-224 → 224 bit / 4 = 56 hex

  • SHA-256 →256 bit / 4 = 64hex

  • SHA-2 系列中的一种安全哈希算法,广泛用于数字签名、密码存储、区块链等安全敏感领域。它将任意长度的输入转换为一个固定长度的 256 位(32 字节)哈希值。

  • SHA-384 → 384 bit / 4 = 96hex

  • SHA-512 → 512 bit / 4 = 128hex

4. SHA-3家族

SHA-3是NIST于2015年正式发布的全新哈希标准,由Keccak算法演变而来,设计初衷是为了替代因潜在安全隐患而受到质疑的SHA-2系列。特别考虑了抗碰撞能力,进一步增强了安全性。SHA-3同样提供了多种散列长度,包括SHA3-224、SHA3-256、SHA3-384和SHA3-512。

5. BLAKE2

一种高效的哈希算法,性能优于 SHA-3,在某些应用场景中表现出色。

相关名词解释

字节(Byte):1字节(byte)= 8 位(bit)。

  • 1 bit 只能是 0 或 1,所以1byte有2⁸=256种组合(比如 00000000~11111111),足够存储英文、数字和基础符号(ASCII码),同时硬件实现成本合理

  • 长度为256位的哈希,则有32个字节,2^256种组合

十六进制字符:每字节 2 个字符(不要将哈希视为字符串,而是将其视为十六进制数字)。

  • 1位十六进制(Hex)= 4位二进制(bit)

  • 一个字节由八位或两个十六进制数字表示,十六进制字符为半字节

  • 长度为256位的哈希为例:

    • 十六进制(Hexadecimal)每一位有16种可能的取值,分别是:

0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

    • 长度为256位的哈希,可以分成64组4位:

256位/4位=64位十六进制(Hex)

    • 每一位有16种组合,且64位之间相互独立,所以总的组合数是:

16^64=(2^4)^64=2^256

SHA(Secure Hash Algorithm,安全哈希算法):即安全哈希算法。

哈希碰撞(hash collision):指不同的两块数据有相同的hash值。

通过上述,我们已经知道了比特币运用密码学的第一个功能,也就是哈希,哈希的3个最主要的性质抗碰撞性、隐蔽性(hiding)、谜题友好性(puzzle friendly)构成比特币的基础,为比特币提供了安全保障,它解决了篡改的问题,但是无法验证信息的来源,所以下篇将介绍比特币的运用的第二个功能,也就是签名✍️。

相关话题
相关资讯
您可能喜欢的标签
猜你喜欢

2JMTT.com Copyright ©加密头条 All Rights Reserved

加密头条,探索加密世界无限可能