如果您想确保文件有效(未经过屏蔽且来自正确/预期来源),您可以执行以下两项操作:哈希和签名
出于我的问题的目的,散列意味着提供要下载的文件的散列(以及文件)。客户端下载散列和文件,重新计算散列,并验证它是否与下载的散列匹配;这“证明”该文件未被篡改。
签名表示使用公用 - 私有加密方案,您可以使用公钥对二进制文件进行签名,客户端使用私钥来验证您是否确实签署了密钥。
根据这些定义,我真的没有看到签署某些内容与散列内容的主要好处。它们都应该证明文件没有被篡改。
我唯一能看到的是,使用散列,受感染的服务器可能意味着有人也会破坏散列并用匹配的密钥替换恶意二进制文件;但是使用公私方案,只要私钥保密,就无法伪造恶意文件。
或者我错过了什么?
答案 0 :(得分:9)
区别如你所说:黑客可以更新哈希以匹配篡改文件,但无法生成有效签名。
使用私钥进行签名,使用公钥进行验证。你说上面的反面。由于实际原因,它通常也是在文件的哈希值而不是文件本身上完成的。
答案 1 :(得分:5)
签名验证两件事 - 文件未被篡改,和签名者的身份。如果你可以确定给你哈希的实体绝对是应该给你文件的实体,那么两者是等价的。签名和证书颁发机构是确保信任关系的一种方式。
答案 2 :(得分:3)
提供一些数据(可执行文档,无论如何)和散列并使用签名提供相同数据之间的最大区别在于散列,数据和散列值都来自同一个地方。所以,如果有人可以妥协其中一个,他可能也会妥协另一个。
例如,如果我可以入侵您的Web服务器,我可以轻松地用我自己的版本替换您的可执行文件,并用我的可执行文件的正确哈希替换哈希值。
如果您签署了可执行文件,我不能仅为其他可执行文件生成另一个签名并替换原始签名。签名验证原始数据的哈希值(数据自签名后未更改)以及签名是否由您的私钥生成。
当然,这一切都假设收到您签名的可执行文件的人已经以某种可信的方式收到了您的公钥。如果我可以欺骗人们使用我的公钥而不是你的公钥,那么我可以入侵你的网站并用我自己的公钥替换你签名的可执行文件。这就是为什么我们有证书颁发机构。
This page对数字签名进行了高级概述。
答案 3 :(得分:3)
哈希是一个输出,具有固定长度的字符(如果以二进制表示,则为位),用于传递给函数的特定数据。 哈希是不可逆的。特定数据的哈希值总是相同的。如果数据中的单个位改变,则改变的数据几乎整个哈希值都会改变。计算散列的过程称为散列。
在非对称加密中,每个通信方都有自己的密钥对(私钥和公钥)。顾名思义,私钥通常是保密的,公钥是共享的。这些密钥本质上是这样的,如果使用一个密钥加密,则唯一的其他密钥对可以解密。
要实现不可否认(发件人不能拒绝他发送消息)并验证特定实体以接收数据,公共密钥将共享给他们,以便他们可以使用相应的私钥解密发件人加密的任何内容。发件人(仅限发件人即秘密) 但请注意,在此示例中,保密性是一周,因为发件人不知道并且不能保证公钥是否被泄露给未知。
当私钥用于加密哈希时,它变成签名,该过程称为签名。这实现了真实性(数据来自真正的家伙,因为使用了私钥),并且还确保了完整性,因为接收者在接收数据时通过使用发送者给予他的相应公钥解密散列然后计算相同的散列来验证哈希在他自己和匹配它。