哈希压缩算法比特币 比特币哈希函数

发布时间:2025-12-21 15:08:03 浏览:5 分类:比特币资讯
大小:509.7 MB 版本:v6.141.0
欧易官网正版APP,返佣推荐码:61662149

一、什么是哈希

散列是指从可变大小的输入生成固定大小的输出的过程。这是通过使用称为散列函数(作为散列算法实现)的数学公式来完成的。

尽管并非所有哈希函数都涉及密码学的使用,但所谓的密码哈希函数是加密货币的核心。多亏了它们,区块链和其他分布式系统能够实现显着水平的数据完整性和安全性。

传统和加密散列函数都是确定性的。确定性意味着只要输入不变,散列算法将始终产生相同的输出(也称为摘要或散列)。

通常,加密货币的散列算法被设计为单向函数,这意味着如果没有大量的计算时间和资源,它们就无法轻易恢复。换句话说,从输入创建输出非常容易,但在相反的方向(仅从输出生成输入)相对困难。一般来说,越难找到输入,哈希算法被认为越安全。

不同的散列函数将产生不同大小的输出,但每种散列算法可能的输出大小始终是恒定的。例如,SHA-256算法只能生成 256位的输出,而 SHA-1将始终生成 160位的摘要。

为了说明这一点,让我们通过 SHA-256哈希算法(比特币中使用的算法)运行“Bitcoin”和“bitcoin”这两个词。

请注意,微小的更改(第一个字母的大小写)会导致完全不同的哈希值。但由于我们使用 SHA-256,输出将始终具有 256位(或 64个字符)的固定大小-无论输入大小如何。此外,无论我们通过算法运行这两个单词多少次,两个输出都将保持不变。

相反,如果我们通过 SHA-1哈希算法运行相同的输入,我们将得到以下结果:

值得注意的是,首字母缩略词 SHA代表安全哈希算法。它指的是一组加密哈希函数,包括 SHA-0和 SHA-1算法以及 SHA-2和 SHA-3组。SHA-256是 SHA-2组的一部分,还有 SHA-512和其他变体。目前,只有 SHA-2和 SHA-3组被认为是安全的。

传统的哈希函数具有广泛的用例,包括数据库查找、大文件分析和数据管理。另一方面,加密散列函数广泛用于信息安全应用,例如消息认证和数字指纹。就比特币而言,加密哈希函数是挖矿过程的重要组成部分,也在新地址和密钥的生成中发挥作用。

散列的真正威力在于处理大量信息时。例如,可以通过哈希函数运行一个大文件或数据集,然后使用其输出来快速验证数据的准确性和完整性。由于散列函数的确定性,这是可能的:输入将始终产生简化的、压缩的输出(散列)。这种技术消除了存储和“记住”大量数据的需要。

散列在区块链技术的背景下特别有用。比特币区块链有几个涉及散列的操作,其中大部分在挖掘过程中。事实上,几乎所有的加密货币协议都依赖散列来将交易组链接和压缩成块,并在每个块之间产生加密链接,从而有效地创建区块链。

同样,部署密码技术的散列函数可以定义为密码散列函数。一般来说,破解密码哈希函数需要无数次的蛮力尝试。对于“还原”加密哈希函数的人来说,他们需要通过反复试验来猜测输入是什么,直到产生相应的输出。然而,也有可能不同的输入产生完全相同的输出,在这种情况下会发生“冲突”。

从技术上讲,加密哈希函数需要遵循三个属性才能被视为有效安全。我们可以将这些描述为抗碰撞性、抗原像性和抗二次原像性。

在讨论每个属性之前,让我们用三个简短的句子总结它们的逻辑。

如前所述,当不同的输入产生完全相同的散列时,就会发生冲突。因此,哈希函数被认为是抗冲突的,直到有人发现冲突为止。请注意,任何散列函数都将始终存在冲突,因为可能的输入是无限的,而可能的输出是有限的。

换句话说,当发现碰撞的可能性非常低以至于需要数百万年的计算时,哈希函数是抗碰撞的。因此,尽管没有无冲突的哈希函数,但其中一些函数足够强大,可以被视为具有抵抗力(例如,SHA-256)。

在各种 SHA算法中,SHA-0和 SHA-1组不再安全,因为已经发现冲突。目前,SHA-2和 SHA-3组被认为是抗冲突的。

原像电阻的特性与单向函数的概念有关。当有人找到生成特定输出的输入的可能性非常低时,哈希函数被认为是抗原像的。

请注意,此属性与前一个属性不同,因为攻击者会试图通过查看给定的输出来猜测输入是什么。另一方面,当有人发现产生相同输出的两个不同输入时,就会发生冲突,但使用哪个输入并不重要。

原像抗性的特性对于保护数据很有价值,因为消息的简单散列可以证明其真实性,而无需披露信息。在实践中,许多服务提供商和 Web应用程序存储和使用从密码生成的哈希值,而不是明文密码。

为简化起见,我们可以说第二原像电阻介于其他两个属性之间。当有人能够找到一个特定的输入,该输入生成与他们已经知道的另一个输入相同的输出时,就会发生二次原像攻击。

换句话说,第二原像攻击涉及寻找碰撞,但不是搜索生成相同散列的两个随机输入,而是搜索生成由另一个特定输入生成的相同散列的输入。

因此,任何抗碰撞的哈希函数也能抗第二原像攻击,因为后者总是意味着碰撞。然而,人们仍然可以对抗碰撞函数执行原像攻击,因为它意味着从单个输出中找到单个输入。

比特币挖矿有很多步骤涉及哈希函数,例如检查余额、链接交易输入和输出,以及对区块内的交易进行哈希处理以形成默克尔树。但比特币区块链安全的主要原因之一是矿工需要执行无数的散列操作,以便最终为下一个区块找到有效的解决方案。

具体来说,矿工在为其候选块创建哈希值时必须尝试几种不同的输入。本质上,如果他们生成以一定数量的零开头的输出哈希,他们将只能验证他们的块。零的数量决定了挖矿难度,它根据网络的哈希率而变化。

在这种情况下,哈希率表示在比特币挖矿中投入了多少计算机能力。如果网络的哈希率增加,比特币协议会自动调整挖矿难度,使挖出一个区块所需的平均时间保持在接近 10分钟。相反,如果几个矿工决定停止挖矿,导致算力大幅下降,则会调整挖矿难度,使其更容易挖矿(直到平均出块时间回到10分钟)。

请注意,矿工不必发现冲突,因为他们可以生成多个散列作为有效输出(从一定数量的零开始)。所以对于某个区块有几种可能的解决方案,矿工只需要找到其中一种——根据挖矿难度确定的阈值。

由于比特币挖矿是一项成本密集型任务,矿工没有理由欺骗系统,因为这会导致重大的经济损失。加入区块链的矿工越多,它就变得越大越强大。(国内禁止参与挖矿)

毫无疑问,哈希函数是计算机科学中必不可少的工具,尤其是在处理大量数据时。当与密码学结合时,散列算法可以非常通用,以多种不同的方式提供安全性和身份验证。因此,加密哈希函数对几乎所有加密货币网络都至关重要,因此了解它们的属性和工作机制对于任何对区块链技术感兴趣的人肯定会有所帮助。

二、比特币地址

比特币地址

比特币地址是用于在比特币网络中接收比特币的唯一标识符。它由公钥经过一系列复杂的运算和编码过程生成,确保了地址的唯一性和安全性。以下是比特币地址生成的详细过程:

一、公钥生成地址的必要性

在比特币系统中,虽然公钥本身是公开的,但直接使用公钥作为地址存在多个问题。首先,公钥有未压缩和压缩两种形式,长度不同,这会导致用户混淆。其次,公钥的长度较长,会增加链上存储和搜索的压力。再者,虽然从公钥推算出私钥几乎不可能,但增加一层地址可以进一步提高比特币系统的防护性。最后,通过对地址进行设计,可以支持更加复杂的脚本锁定,增加系统的拓展性。

二、压缩公钥生成地址的流程

对公钥进行双哈希(HASH160)运算

首先,选择压缩公钥作为起点。然后,使用SHA-256算法对公钥进行哈希运算,得到的结果再经过RIPEMD-160算法进行第二次哈希运算,最终得到公钥哈希值。这个哈希值为二进制160位,十六进制40个字符,大小为20字节。

对“公钥哈希值”加上版本前缀

为了区分比特币主网和测试网的地址,需要在公钥哈希值前加上版本前缀。比特币主网的版本前缀为“0x00”,而测试网的版本前缀为“0x6F”。添加版本前缀后,得到的结果为21字节。

计算校验码(即两次SHA-256)

对加上版本前缀后的结果进行两次SHA-256哈希运算,取前4个字节作为校验码。校验码的作用是确保地址在传输过程中没有被篡改。

进行Base58Check编码

将版本前缀、公钥哈希值和校验码连接起来,得到的结果为25字节。然后,使用Base58Check编码对这个结果进行编码,得到最终的比特币地址。Base58Check编码是一种基于Base58的编码方式,它去除了容易混淆的字符(如0、O、I、l等),并增加了校验功能,提高了地址的可读性和安全性。

三、比特币地址的特点

唯一性:每个比特币地址都是唯一的,由公钥经过一系列复杂的运算和编码过程生成。安全性:比特币地址的设计考虑了多种安全措施,如哈希运算、版本前缀和校验码等,确保了地址的不可篡改性和抗攻击性。可读性:比特币地址使用Base58Check编码,去除了容易混淆的字符,提高了地址的可读性。匿名性:比特币地址与用户的真实身份没有直接关联,保护了用户的隐私。

综上所述,比特币地址是比特币网络中用于接收比特币的唯一标识符,它由公钥经过一系列复杂的运算和编码过程生成,具有唯一性、安全性、可读性和匿名性等特点。

三、什么是哈希值和区块链

区块链中的哈希值是什么意思?

如果你对区块链领域有所了解,那么你一定听说过哈希值,或许我们在浏览区块链信息时会经常看到哈希值,但是如果让我们说说哈希值到底是什么,可能我们也并不能说明白。我知到,虽然很多人都已经进入币圈很久,但是对于区块链领域的一些概念还处于一个一知半解,知道又不完全清楚的状态。其实哈希就是一种压缩信息的方法,我们可以通过哈希将很长的一段文字压缩成一小段乱码,那么区块链中的哈希值是什么意思呢?现在就让我来为大家详细的讲解一下。

哈希值是将任意长度的输入字符串转换为密码并进行固定输出的过程。哈希值不是一个“密码”,我们不能通过解密哈希来检索原始数据,它是一个单向的加密函数。

区块链哈希是什么?如果是刚开始了解区块链,就需要结合“区块”的概念来一起理解了。每一个区块,包含的内容有数据信息,本区块的哈希值以及上一个区块的哈希值。区块中的数据信息,主要是交易双方的地址与此次交易数量还有交易时间信息等。而哈希值就是寻找到区块,继而了解到这些区块信息的钥匙。以上就是区块链中哈希的含义了。

区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。金窝窝集团分析其哈希算法的作用如下:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都接获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。

在区块链中,每个块都有前一个块的哈希值,前一个块被称为当前块的父块,如果考虑父块有一个当前区块。它将会有上一个块的哈希值即父块。

在区块链中,每个块都有前一个块的哈希值。当我们更改当前块中的任何数据时,块的哈希值将被更改,这将影响前一个块,因为它有前一个块的地址。例如,如果我们只有两个块,一个是当前块,一个是父块。当前块将拥有父块的地址。如果需要更改当前块中的数据,还需要更改父块。当只有两个数据块时,很容易更改数据,但是现在,当我们在区块链中实现时,2020-01-2412:32已经挖掘了614272个块,而614272(th)块的哈希值为00000000000000000007a6be31011560f1e3abe8f125e356a31db6051753334e。如果我们要更改当前块614272(th)中的数据,614271块的哈希地址必须更改,但是614271块的哈希是不可能更改的,所以这就是区块链被称为不可变的,数据可信的。区块链的第一个块,称为起源块。你可以从这个起源块中看到有多少块被开采到现在。

如果我们对输入的任何部分做一个小的改变,输出就会有一个大的改变,请看下面的例子以获得更多的理解。哈希值是区块链技术不可变的和确定的潜力核心基础和最重要的方面。它保留了记录和查看的数据的真实性,以及区块链作为一个整体的完整性。

#比特币[超话]##数字货币##欧易OKEx#

区块链哈希算法是什么?

哈希算法也被称为“散列”,是区块链的四大核心技术之一。是能计算出一个数字消息所对应的、长度固定的字符串(又称消息摘要)的算法。由于一段数据只有一个哈希值,所以哈希算法可以用于检验数据的完整性。在快速查找和加密算法的应用方面,哈希算法的使用非常普遍。

在互联网时代,尽管人与人之间的距离更近了,但是信任问题却更严重了。现存的第三方中介组织的技术架构都是私密而且中心化的,这种模式永远都无法从根本上解决互信以及价值转移的问题。因此,区块链技术将会利用去中心化的数据库架构完成数据交互信任背书,实现全球互信的一大跨步。在这一过程中,哈希算法发挥了重要作用。

散列算法是区块链中保证交易信息不被篡改的单向密码机制。区块链通过散列算法对一个交易区块中的交易进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。区块链的散列值能够唯一而准确地标识一个区块。在验证区块的真实性时,只需要简单计算出这个区块的散列值,如果没有变化就意味着这个区块上的信息是没有被篡改过的。

链乔教育在线旗下学硕创新区块链技术工作站是中国教育部学校规划建设发展中心开展的“智慧学习工场2020-学硕创新工作站”唯一获准的“区块链技术专业”试点工作站。专业站立足为学生提供多样化成长路径,推进专业学位研究生产学研结合培养模式改革,构建应用型、复合型人才培养体系。

区块链中的哈希值是什么?

哈希值是将任意长度的输入字符串转换为密码并进行固定输出的过程。哈希值不是一个“密码”,我们不能通过解密哈希来检索原始数据,它是一个单向的加密函数。

区块链:

区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。2019年1月10日,国家互联网信息办公室发布《区块链信息服务管理规定》。

什么是哈希

我们先来讲个故事哈。

有一个人每次打开区块链文章,都意气风发,暗暗下决心要发愤图强,看了一会儿,发现很难看懂什么,硬逼着自己学习,却已是强弩之末,最后只能末学肤受,学了个皮毛而已。

那个人就是我哈,希望大家不要末学肤受,而能食髓知味,深刻理解区块链知识。

这四个成语。

意气风发~发奋图强~强弩之末~末学肤受

每个成语的第一个字,是前一个成语的最后一个字,组成了一个成语链的链式结构。

我们来类比一下,区块链的链式结构。

区块链0,1,2,3的链式结构是靠什么形成的呢?

是靠前一个区块的哈希值,也叫做父区块哈希值。

区块0是区块1的父区块。

区块1是区块0的子区块。

区块0的哈希值对区块1而言,就是父区块的哈希值。

父区块哈希值,就是上面成语链式结构里,把前后两个成语连接起来的那个字。

要理解区块链链式结构,还要理解什么叫哈希。

再讲个故事哈。

小黑同学要把一袋猫粮快递给大白老师。

他让哈希公司的快递员上门取件,打包完成后,拿到了快递单号。

这个寄快递的过程中,有三个关键步骤。

1.选择要寄送的物品。

2.选择哈希快递公司,对物品进行快递打包。

3.拿到快递单号。

哈希公司给的快递单号就是哈希值。

大白老师对小黑选择的哈希公司很满意。

1.不论小黑寄的东西有多大,经过哈希公司打包后,拿到手的快递包裹都一样大。

2.哈希公司打印出来的快递单号也就是哈希值,除了让你查询物流的实时状况,还可以让你知道包裹中的物品有没有被人调包或撰改。

比如小黑寄给大白的猫粮,在运送过程中,哪怕袋子上的配料表,被人改了一个标点符号,哈希公司给的快递单号,也就是哈希值都会实时发生变化,警示小黑快递包裹发生了异常情况。

哈希公司确实很厉害哈。

区块链技术中的哈希算法是什么?

1.1.简介

计算机行业从业者对哈希这个词应该非常熟悉,哈希能够实现数据从一个维度向另一个维度的映射,通常使用哈希函数实现这种映射。通常业界使用y=hash(x)的方式进行表示,该哈希函数实现对x进行运算计算出一个哈希值y。

区块链中哈希函数特性:

函数参数为string类型;

固定大小输出;

计算高效;

collision-free即冲突概率小:x!=y=hash(x)!=hash(y)

隐藏原始信息:例如区块链中各个节点之间对交易的验证只需要验证交易的信息熵,而不需要对原始信息进行比对,节点间不需要传输交易的原始数据只传输交易的哈希即可,常见算法有SHA系列和MD5等算法

1.2.哈希的用法

哈希在区块链中用处广泛,其一我们称之为哈希指针(HashPointer)

哈希指针是指该变量的值是通过实际数据计算出来的且指向实际的数据所在位置,即其既可以表示实际数据内容又可以表示实际数据的存储位置。下图为HashPointer的示意图

HashPointer在区块链中主要有两处使用,第一个就是构建区块链数据结构。了解区块链的读者应该知道区块链数据结构由创世区块向后通过区块之间的指针进行连接,这个指针使用的就是图示的HashPointer.每个区块中都存储了前一个区块的HashPointer。这样的数据结构的好处在于后面区块可以查找前面所有区块中的信息且区块的HashPointer的计算包含了前面区块的信息从而一定程度上保证了区块链的不易篡改的特性。第二个用处在于构建MerkleTree.MerkleTree的各个节点使用HashPointer进行构建,关于区块链数据结构以及MerkleTree的内容我们在后续文章中进行进一步介绍。

哈希还在其他技术中有所应用例如:交易验证以及数字签名等等。

2.加密算法

2.1简述

加密简单而言就是通过一种算法手段将对原始信息进行转换,信息的接收者能够通过秘钥对密文进行解密从而得到原文的过程。按照加密方和解密方秘钥相同与否可以将加密算法大致分为三种子类型:

对称加密

对称加密的加密解密方使用相同的秘钥,这种方式的好处在于加解密的速度快但是秘钥的安全分发比较困难,常见对称加密算法有DES,AES,...

非对称加密

非对称加密体系也称为公钥体系,加解密时加密方拥有公钥和私钥,加密方可以将公钥发送给其他相关方,私钥严格自己保留。例如银行的颁发给个人用户的私钥就存储在个人的U盾里;非对称加密中可以通过私钥加密,他人能够使用公钥进行解密,反之亦然;非对称加密算法一般比较复杂执行时间相对对称加密较长;好处在于无秘钥分发问题。常见的其他非对称加密算法有RSA,ECC,区块链中主要使用ECC椭圆曲线算法。

对称加密与非对称加密的结合

这种方式将加密过程分为两个阶段,阶段一使用非对称加密进行秘钥的分发使得对方安全地得到对称加密的秘钥,阶段二使用对称加密对原文进行加解密。

2.2数字签名

数字签名又称之为公钥数字签名,是一种类似于写在纸上的物理签名。数字签名主要用于数据更改的签名者身份识别以及抗抵赖。数字签名包含三个重要特性:

只有自己可以签署自己的数字签名,但是他人可以验证签名是否是你签发;

数字签名需要和具体的数字文档绑定,就好比现实中你的签名应该和纸质媒介绑定;

数字签名不可伪造;

依赖非对称加密机制可以较容易实现上述三种特性。

首先,需要生成个人的公私钥对:

(sk,pk):=generateKeys(keysize),sk私钥用户自己保留,pk公钥可以分发给其他人

其次,可以通过sk对一个具体的message进行签名:

sig:=sign(sk,message)这样就得到了具体的签名sig

最后,拥有该签名公钥的一方能够进行签名的验证:

isValid:=verify(pk,message,sig)

在区块链体系中每一条数据交易都需要签名,在比特币的设计过程中直接将用户的公钥来表征用户的比特币地址。这样在用户发起转账等比特币交易时可以方便的进行用户交易的合法性验证。

2.3数字证书和认证中心

2.3.1数字证书(DigitalCertificate)

数字证书又称“数字身份证”、“网络身份证”是经认证中心授权颁发并经认证中心数字签名的包含公开秘钥拥有者及公开秘钥相关信息的电子文件,可以用来判别数字证书拥有者身份。

数字证书包含:公钥、证书名称信息、签发机构对证书的数字签名以及匹配的私钥

证书可以存储在网络中的数据库中。用户可以利用网络彼此交换证书。当证书撤销后,签发此证书的CA仍保留此证书的副本,以备日后解决可能引起的纠纷。

2.3.2认证中心(CertificateAuthority)

认证中心一般简称CA,CA一般是一个公认可信的第三方机构,其作用主要是为每个用户颁发一个独一无二的包含名称和公钥的数字证书。

2.4常见加密算法的对比