Digital Signature和codeword之间的区别是什么?
背景: 最近我一直在使用gzip压缩文件进行大量的工作。 One interesting thing I found while reading the Python zlib documentation is the claim that CRC should not be used as a general hash algorithm.这让我想知道,如果CRC不是一般的哈希算法,它的重点是什么?检查平等不是重点吗?
答案 0 :(得分:6)
zip文件中的CRC主要用于确保文件在存储或传输过程中不被损坏。它不用于提供真实性或防止攻击者更改文件。因此不需要加密安全性。
加密哈希确实可以提供相同或更好的完整性故障保护。然而,它们更加计算密集,并且需要更大的输出。如果散列的输出减少太多,那么CRC实际上可以提供更好的(随机)变化检测。
由于CRC值无法防止故意更改 - 因此找到会产生相同CRC值的文件并不困难 - 它不适合数字签名。为此你做需要加密哈希。
请注意,加密哈希不是签名。对于签名,您需要一个数字签名应用程序,如PGP。数字签名(通常)由散列组成,然后使用来自私钥的信息(由接收方的公钥验证)处理。
注意:有时候“签名”这个词的意思是“指纹”。对于指纹,仍然使用加密哈希 - 主要是MD5或SHA-1 。但在我看来,这是一个相当遥远的问题 - 错误地使用了“签名”这个词。
答案 1 :(得分:5)
你在那里问了四五个不同的问题,并在上下文中使用了一大堆不同的,有时含糊不清的术语。最好在问答网站上一次提出一个明确的问题。
CRC擅长错误检测,计算速度相对较快。输入比特在CRC中很好地分布,并且还具有良好的突发错误检测能力。这就是为什么。目前还不清楚你的意思是"一般哈希算法" (仅用于哈希表?或加密强大?)。在任何情况下,目的不是为了制作文件的查找表,也不是为了对数据进行签名。无论如何,在放置加密哈希时没有任何价值,例如gzip文件中的MD5或SHA-2,因为有人可以简单地更改数据和哈希!任何人都可以生成的哈希仅在您通过其他渠道获得哈希时才有用。
通过"代码字",我从链接中推测你的意思是CRC。 CRC是快速计算的错误检查代码,在硬件和软件应用程序中实现,以检查数据的完整性。从上下文来看,当你说数字签名时,我认为你的意思是加密哈希。加密哈希是一种单向函数,旨在使创建具有给定哈希值的消息极其困难。 CRC恰恰相反。作为线性函数,modify a message to have any given CRC非常容易。加密散列通常具有比CRC更多的位,以便实际上不可能发生意外碰撞的概率。然而,单向和多位使加密散列生成的计算密集程度更高。
这是正确的。虽然CRC很好地将输入位分配到值中,但可以成功地用作散列it fails certain tests that you might like a hash algorithm to pass。如果您希望算法从密钥创建哈希表,请使用hash algorithm designed for that purpose。如果这是它的全部内容,则哈希不需要也不应该是加密的。快速更重要。
CRC是coding theory的一个结果,它提供了错误检测和纠正的算法。 CRC的目的是检测错误。
目前尚不清楚你在这里指的是什么平等。在任何情况下,CRC的要点是检查完整性。它在流中提供冗余信息,几乎可以检测到传输中该流的任何意外损坏。