散列的含义是指从可变大小的输入生成固定大小的输出的过程。散列是通过使用称为散列函数的数学公式完成的。
虽然并非所有散列函数都涉及使用密码学,但所谓的密码散列函数是加密货币的核心。区块链和其他分布式系统使用加密哈希函数来实现显着水平的数据完整性和安全性。
通常,加密货币的哈希算法被设计为单向函数,这意味着如果没有大量的计算时间和资源。换句话说,从输入创建输出很容易,但从输出生成输入相对困难。通过这样做,这使得哈希函数非常安全,因为其他人无法从一个人的哈希值生成一个人的私钥的真实值。
哈希函数是如何工作的?
既然我们知道了哈希在加密中的含义,让我们来探讨一下哈希函数是如何工作的。
不同的哈希函数会产生不同大小的输出,但可能的每个散列算法的输出大小始终是恒定的。例如,SHA-256 算法只能生成 256 位的输出,而 SHA-1 将始终生成 160 位的摘要。
非常小的更改(例如将大写字母更改为小写字母)导致完全不同的哈希值。但由于我们使用的是 SHA-256,因此无论输入大小如何,输出都将始终具有 256 位(或 64 个字符)的固定大小。此外,无论我们通过算法运行这两个词多少次,两个输出都将保持不变。
为什么哈希函数很重要?
哈希在处理大量信息时非常强大。例如,可以通过哈希函数运行一个大文件或数据集,然后使用其输出来快速验证数据的准确性和完整性。这是可能的,因为散列函数的确定性:输入总是会产生一个简化的、浓缩的输出(散列)。这种技术消除了存储大量数据的需要。
区块链使用散列来压缩和存储大量信息。比特币区块链有几个涉及散列的操作,其中大部分是在挖掘过程中。事实上,几乎所有的加密货币协议都依赖于散列来将交易组链接和压缩成块,并在每个块之间产生加密链接,从而有效地创建区块链。
加密散列函数
部署密码技术的哈希函数可以定义为密码哈希函数。一般来说,破解一个密码散列函数需要无数次的蛮力尝试。对于要“还原”加密哈希函数的人,他们需要通过反复试验来猜测输入是什么,直到产生相应的输出。但是,也有可能不同的输入产生完全相同的输出,在这种情况下会发生“冲突”。
从技术上讲,加密哈希函数需要遵循三个属性才能被认为是有效安全的。这些属性是抗碰撞性、抗原像性和抗二次原像性。
抗碰撞性
如前所述,当不同的输入产生完全相同时,就会发生碰撞哈希。因此,在有人发现冲突之前,哈希函数被认为是抗冲突的。对于任何散列函数来说,冲突都是不可避免的,因为可能的输入是无限的,而可能的输出是有限的。
因此,当发现冲突的可能性很低以至于它会需要很长时间的计算。因此,尽管没有无冲突的哈希函数,但其中一些函数足够强大,可以被认为具有抵抗力(例如 SHA-256)。
在各种 SHA 算法中,SHA-0 和SHA-1 组不再安全,因为已发现冲突。目前,SHA-2和SHA-3组被认为是抗碰撞的。
抗原像性
抗原像性的性质与概念有关的单向函数。当某人找到生成特定输出的输入的可能性非常低时,哈希函数被认为是抗原像的。
原像抗性的属性对于保护数据很有价值,因为消息的简单哈希可以证明其真实性,无需透露信息。在实践中,许多服务提供商和 Web 应用程序存储和使用从密码生成的哈希值,而不是明文密码。
抗二次原像
为了简化,我们可以说第二原像电阻介于其他两个属性之间。当某人能够找到一个特定的输入,该输入与他们已经知道的另一个输入产生相同的输出时,就会发生第二原像攻击。
换句话说,第二原像攻击涉及找到碰撞,但是他们不是搜索生成相同哈希的两个随机输入,而是搜索生成由另一个特定输入生成的相同哈希的输入。
因此,任何抗冲突的哈希函数也是抵抗第二原像攻击,因为后者总是意味着碰撞。但是,仍然可以对抗碰撞函数执行原像攻击,因为这意味着从单个输出中找到单个输入。
结论
散列含义是指从可变大小的输入生成固定输出。哈希在隐私和安全方面有很多用途,尤其是在加密货币和区块链中。




















