数字签名和码字有什么区别?
上下文:我最近不得不对 gzip 文件做大量工作。我在阅读Python zlib文档时发现的一件有趣的事情是声称CRC不应该用作通用哈希算法。这让我想知道,如果CRC不是通用的哈希算法,它的意义何在?检查平等的重点不是吗?
zip文件中的CRC主要用于确保文件在存储或运输过程中不会损坏。它不用于提供真实性或防止文件被攻击者更改。因此,不需要加密安全性。
加密哈希确实提供了相同或更好的完整性故障保护。然而,它们的计算量更大,需要更大的输出。如果哈希的输出减少太多,那么CRC实际上可以更好地检测(随机(变化。
由于 CRC 值不能防止故意更改 - 不难找到将生成相同 CRC 值的文件 - 它不适合数字签名。为此,您确实需要一个加密哈希。
请注意,加密哈希不是签名。对于签名,您需要一个数字签名应用程序,例如 PGP。数字签名(通常(由一个哈希组成,然后使用来自私钥的信息进行处理(由接收方的公钥验证(。
注意:有时"签名"一词表示"指纹"。对于指纹,仍然使用加密哈希 - 主要是MD5或SHA-1。但在我看来,这是相当牵强的,而且 - 不正确地使用了"签名"一词。
你在那里问了四五个不同的问题,并在上下文中使用了一大堆不同的,有时是模棱两可的术语。 最好在问答网站上一次问一个明确的问题。
- 为什么 gzip 使用 CRC 而不是通用哈希算法?
CRC 擅长错误检测,计算速度相对较快。 输入位在CRC中分布良好,并且还具有良好的突发错误检测能力。 这就是原因。 目前尚不清楚您所说的"通用哈希算法"是什么意思(仅适用于哈希表?还是加密强度?(。 无论如何,目的不是制作文件的查找表,也不是对数据进行签名。 无论如何,将加密哈希(例如 MD5 或 SHA-2(放入 gzip 文件中没有任何价值,因为有人可以简单地更改数据和哈希! 任何人都可以生成的哈希只有在您通过其他渠道获取哈希时才有用。
- 数字签名和码字有什么区别?
通过"码字",我从链接中推测您指的是CRC。 CRC是一种快速计算的错误检查代码,在硬件和软件应用程序中实施,以检查数据的完整性。 从上下文来看,我认为当您说数字签名时,您指的是加密哈希。 加密哈希是一种单向函数,旨在使创建具有给定哈希值的消息变得极其困难。 CRC恰恰相反。 作为一个线性函数,修改消息以具有任何给定的CRC非常容易。 加密哈希通常比CRC具有更多的位,以使意外碰撞的可能性实际上是不可能的。 然而,单向和许多位使得加密哈希的生成计算量要大得多。
- 我在阅读Python zlib文档时发现的一件有趣的事情是声称CRC不应该用作通用哈希算法。
这是正确的。 虽然 CRC 将输入位很好地分布到值中并且可以成功用作哈希,但它无法通过您可能希望哈希算法通过的某些测试。 如果您希望算法从键创建哈希表,请使用为此目的设计的哈希算法。 如果这就是它的全部目的,那么哈希不需要也不应该是加密的。 快速更重要。
- 如果CRC不是通用的哈希算法,那么它的意义何在?
CRC是编码理论的一个结果,它提供了错误检测和纠正的算法。 CRC 的目的是错误检测。
- 检查
- 平等的重点不是吗?
目前尚不清楚您在这里指的是什么平等。 无论如何,CRC的目的是检查完整性。 它在流中提供冗余信息,这些信息将检测该流在传输过程中的几乎所有意外损坏。