区块链技术包含多种创新,其中最重要的创新之一就是哈希。但区块链中的哈希是什么?如果没有它,区块链将变得不安全,并且完全无法使用。有了它,加密货币变得安全可靠。
如果您不想通过获得计算机科学学位来了解哈希这个加密原语的来龙去脉,那么就读这篇文章吧。您会发现理解哈希并没有那么难。
密码学一词源自希腊语 kryptos,意思是隐藏。它是为敌对活动时安全通信方法所做的研究和应用。本质上,它是对消息进行编码的行为。现代密码学以计算机为中心,但其历史可以追溯到古代。
埃及象形文是一种很好的密码学案例。古埃及开发了第一批加密信息,即一系列无序的象形文字,以防止外行人了解各种神秘学派的秘密。这种加密方法非常简单,依赖于一种称为简单替换的技术。
由于对其信使心生怀疑,罗马皇帝朱利叶斯·凯撒(Julius Caesar)向他的将军们发送了加密信息。他死后,这种加密被称为凯撒密并得到了推广。凯撒密码也是一种简单的替换技术。
哈希是密码学的一种形式。哈希函数是可以将任意大小的数据映射到固定大小的值的任何函数。哈希函数返回的值称为哈希值、哈希码、摘要或简称为哈希。
例如,以明文“Hello World”为例。使用以太坊的哈希函数Keccak-256哈希函数,我们将明文转换为哈希值“592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba”。相应地,输出的内容类似于以太坊地址。
人们在日常生活中不知不觉地会遇到哈希。您每天使用密码时可能会遇到哈希值。当您在应用程序上创建帐户时,提供商很可能不是保存您的密码,而是保存您密码的哈希值。当您登录帐户时,应用程序会对您输入的密码进行哈希处理,并将该哈希值与其保存在文件中的哈希值进行比较。
简单来说,不是所有的功能都是以同样的方式创建的。哈希函数必须满足特定要求才能正常运行。它们必须具有以下属性:
计算机必须能够快速返回哈希值;大多数计算机能在不到一秒的时间内处理哈希函数。
例如,使用 Keccak-256 哈希函数,我们将消息“Hello World”更改为“hello World”。这样的返回值为“079813c47d3d4ab9abf0c0747f5b5cdf90e0e264ae09ea44fb2509c559b72ac1”。正如您所看到的,我们的哈希函数是区分大小写的,并且因此而返回的哈希结果很不一样。
对于给定的输入值,每次都必须生成精确的哈希值。您必须记住,哈希是一种安全发送消息的方法。若情况并非如此,那么您可在接收者不知情的情况下将输入更改为哈希值。
当哈希的输出已知并且其任务是找到一些输入时,就会发生原像攻击。对加密哈希函数的原像攻击是为寻找具有特定哈希值的消息。加密哈希函数应该能够抵抗原像攻击(一组可能的输入)。
在我们的示例“Hello World”中,您不想使用原像(即纯文本)作为密码。由于明文“Hello World”非常简单且易于确定,有些数据库可以保存已知输入的记录,甚至能保存安全哈希函数(例如 SHA-256)。
这是加密哈希函数的预期属性,在其中找到已知消息摘要的次原像在计算上是无法实现的。
找到产生相同输出的两个输入一定是极其困难或不可能的。由于输入值可以是任意长度和任意字符,因此该值的可能性是无限的。输出内容具有固定的长度,并且因此有可能具有固定的数量。
因此,多个输入值可能会产生相同的输出。如果抗碰撞能力不够强,可以通过“生日攻击”发现碰撞。您可能已经注意到,抗次原像性和抗碰撞性非常相似。但请相信,它们是独立且相当简单的。
通过抗次原像性,输入是已知的,攻击者能够找到哈希到相同值的次输入。通过抗碰撞性,两个输入都是未知的,攻击者能够找到哈希到相同值的两个输入。抗碰撞性包含抗原像性。
生日攻击是一种利用概率论背后的数学原理的攻击。您可能听说过这种攻击的案例:如果在一个房间里有27个人,但实际上他们中两个人生日相同的概率为50%,虽然这听起来不太可能。
为什么是这样?一个人拥有“正确”生日的概率为1/365。第二个人有着相同生日的概率也是1/365。为了找到两者生日相同的概率,我们必须将它们的概率相乘。因此,在人数更多的情况下,如果有365个不同的生日,因此有 365种可能性,那么就需要365的平方根,即随机选择23个人,匹配概率即为50%。
将这一理论应用到哈希中后,我们在技术上会发现这一点:没有哈希函数是无碰撞性的,但是这种碰撞性需要很长时间才能发生!
比特币总哈希率:Blockchain.com
比特币在区块链上运行并使用哈希算法“SHA-256”(安全哈希算法256)。对于比特币,哈希函数用于三个主要函数:
矿工们竞相解决难题;每个矿工从其已知的区块中获取信息,对它们进行哈希处理,然后用它们构建一个区块。如果算法的输出小于目标数,那么它将被认为是有效的并且可以被网络的其余部分接受。然后他们有权创建下一个区块。
连接块用于增加安全性。区块链上的每个区块都链接到前一个区块。这是通过哈希指针(存储另一个变量的地址的变量)来实现的。基本上,每个块都可以轻松追踪区块链的历史,并消除了添加恶意区块的可能性。
要发送或接收加密货币,您需要私钥和公钥。这两个密钥通过哈希函数相互连接。此部分非常重要,能确任何人都无法根据您的公钥计算出您的私钥。
哈希函数赋予加密货币高度的安全性。尽管从理论上讲,网络上没有任何东西能免受黑客攻击,但哈希函数提供了当前最安全的保护,让黑客难以攻击。
区块链技术包含多种创新,其中最重要的创新之一就是哈希。但区块链中的哈希是什么?如果没有它,区块链将变得不安全,并且完全无法使用。有了它,加密货币变得安全可靠。
如果您不想通过获得计算机科学学位来了解哈希这个加密原语的来龙去脉,那么就读这篇文章吧。您会发现理解哈希并没有那么难。
密码学一词源自希腊语 kryptos,意思是隐藏。它是为敌对活动时安全通信方法所做的研究和应用。本质上,它是对消息进行编码的行为。现代密码学以计算机为中心,但其历史可以追溯到古代。
埃及象形文是一种很好的密码学案例。古埃及开发了第一批加密信息,即一系列无序的象形文字,以防止外行人了解各种神秘学派的秘密。这种加密方法非常简单,依赖于一种称为简单替换的技术。
由于对其信使心生怀疑,罗马皇帝朱利叶斯·凯撒(Julius Caesar)向他的将军们发送了加密信息。他死后,这种加密被称为凯撒密并得到了推广。凯撒密码也是一种简单的替换技术。
哈希是密码学的一种形式。哈希函数是可以将任意大小的数据映射到固定大小的值的任何函数。哈希函数返回的值称为哈希值、哈希码、摘要或简称为哈希。
例如,以明文“Hello World”为例。使用以太坊的哈希函数Keccak-256哈希函数,我们将明文转换为哈希值“592fa743889fc7f92ac2a37bb1f5ba1daf2a5c84741ca0e0061d243a2e6707ba”。相应地,输出的内容类似于以太坊地址。
人们在日常生活中不知不觉地会遇到哈希。您每天使用密码时可能会遇到哈希值。当您在应用程序上创建帐户时,提供商很可能不是保存您的密码,而是保存您密码的哈希值。当您登录帐户时,应用程序会对您输入的密码进行哈希处理,并将该哈希值与其保存在文件中的哈希值进行比较。
简单来说,不是所有的功能都是以同样的方式创建的。哈希函数必须满足特定要求才能正常运行。它们必须具有以下属性:
计算机必须能够快速返回哈希值;大多数计算机能在不到一秒的时间内处理哈希函数。
例如,使用 Keccak-256 哈希函数,我们将消息“Hello World”更改为“hello World”。这样的返回值为“079813c47d3d4ab9abf0c0747f5b5cdf90e0e264ae09ea44fb2509c559b72ac1”。正如您所看到的,我们的哈希函数是区分大小写的,并且因此而返回的哈希结果很不一样。
对于给定的输入值,每次都必须生成精确的哈希值。您必须记住,哈希是一种安全发送消息的方法。若情况并非如此,那么您可在接收者不知情的情况下将输入更改为哈希值。
当哈希的输出已知并且其任务是找到一些输入时,就会发生原像攻击。对加密哈希函数的原像攻击是为寻找具有特定哈希值的消息。加密哈希函数应该能够抵抗原像攻击(一组可能的输入)。
在我们的示例“Hello World”中,您不想使用原像(即纯文本)作为密码。由于明文“Hello World”非常简单且易于确定,有些数据库可以保存已知输入的记录,甚至能保存安全哈希函数(例如 SHA-256)。
这是加密哈希函数的预期属性,在其中找到已知消息摘要的次原像在计算上是无法实现的。
找到产生相同输出的两个输入一定是极其困难或不可能的。由于输入值可以是任意长度和任意字符,因此该值的可能性是无限的。输出内容具有固定的长度,并且因此有可能具有固定的数量。
因此,多个输入值可能会产生相同的输出。如果抗碰撞能力不够强,可以通过“生日攻击”发现碰撞。您可能已经注意到,抗次原像性和抗碰撞性非常相似。但请相信,它们是独立且相当简单的。
通过抗次原像性,输入是已知的,攻击者能够找到哈希到相同值的次输入。通过抗碰撞性,两个输入都是未知的,攻击者能够找到哈希到相同值的两个输入。抗碰撞性包含抗原像性。
生日攻击是一种利用概率论背后的数学原理的攻击。您可能听说过这种攻击的案例:如果在一个房间里有27个人,但实际上他们中两个人生日相同的概率为50%,虽然这听起来不太可能。
为什么是这样?一个人拥有“正确”生日的概率为1/365。第二个人有着相同生日的概率也是1/365。为了找到两者生日相同的概率,我们必须将它们的概率相乘。因此,在人数更多的情况下,如果有365个不同的生日,因此有 365种可能性,那么就需要365的平方根,即随机选择23个人,匹配概率即为50%。
将这一理论应用到哈希中后,我们在技术上会发现这一点:没有哈希函数是无碰撞性的,但是这种碰撞性需要很长时间才能发生!
比特币总哈希率:Blockchain.com
比特币在区块链上运行并使用哈希算法“SHA-256”(安全哈希算法256)。对于比特币,哈希函数用于三个主要函数:
矿工们竞相解决难题;每个矿工从其已知的区块中获取信息,对它们进行哈希处理,然后用它们构建一个区块。如果算法的输出小于目标数,那么它将被认为是有效的并且可以被网络的其余部分接受。然后他们有权创建下一个区块。
连接块用于增加安全性。区块链上的每个区块都链接到前一个区块。这是通过哈希指针(存储另一个变量的地址的变量)来实现的。基本上,每个块都可以轻松追踪区块链的历史,并消除了添加恶意区块的可能性。
要发送或接收加密货币,您需要私钥和公钥。这两个密钥通过哈希函数相互连接。此部分非常重要,能确任何人都无法根据您的公钥计算出您的私钥。
哈希函数赋予加密货币高度的安全性。尽管从理论上讲,网络上没有任何东西能免受黑客攻击,但哈希函数提供了当前最安全的保护,让黑客难以攻击。