哈希与签名二进制文件

ash*_*999 10 security

如果要确保文件有效(未被禁用且来自正确/预期的源),您可以执行以下两项操作:散列签名.

出于我的问题的目的,散列意味着提供要下载的文件的散列(以及文件).客户端下载散列和文件,重新计算散列,并验证它是否与下载的散列匹配; 这"证明"该文件未被篡改.

签名意味着使用公共 - 私有加密方案,您使用公钥对二进制文件进行签名,客户端使用私钥来验证您是否确实签署了密钥.

基于这些定义,我真的没有看到签署某些内容与散列内容的主要好处.它们都应该证明文件没有被篡改.

我唯一能看到的是,使用散列,受损的服务器可能意味着有人也会破坏散列并用匹配的密钥替换恶意二进制文件; 但是使用公私方案,只要私钥保持私密,就无法伪造恶意文件.

或者我错过了什么?

Rob*_*son 10

区别在于您所说的:黑客可以更新散列以匹配篡改文件,但无法生成有效签名.

使用私钥进行签名,使用公钥进行验证.你说上面的反面.由于实际原因,它通常也是在文件的散列而不是文件本身上完成的.


Mat*_*ges 6

签名验证两件事 - 文件未被篡改,以及签名者的身份.如果你可以确定给你哈希的实体绝对是应该给你文件的实体,那么两者是等价的.签名和证书颁发机构是确保信任关系的一种方式.


BHS*_*BHS 5

提供一些数据(可执行文件、文档等)和哈希值与提供带有签名的相同数据之间的最大区别在于哈希值,数据和哈希值都来自同一个地方。因此,如果有人可以妥协其中一个,他也可能可以妥协另一个。

例如,如果我可以侵入您的网络服务器,我可以轻松地将您的可执行文件替换为我自己的版本,并将哈希值替换为我的可执行文件的正确哈希值。

如果您对可执行文件进行签名,我不能只为不同的可执行文件生成另一个签名并替换您的原始签名。签名验证原始数据的哈希值(数据自签名后未更改)以及签名是否由您的私钥生成。

当然,这一切都假设接收您签名的可执行文件的人已经以某种可信的方式收到了您的公钥。如果我可以欺骗人们使用我的公钥而不是你的公钥,那么我就可以侵入你的网站并用我自己的签名替换你签名的可执行文件。这就是我们拥有证书颁发机构的原因。

此页面对数字签名进行了高级概述。


Gag*_*ngh 5

哈希是传递给函数的特定数据的具有固定长度字符(或位,如果以二进制表示)的输出。哈希值是不可逆的。特定数据的哈希值始终相同。如果数据中的单个位发生更改,则已更改数据的几乎整个散列都会更改。计算哈希的过程称为哈希。

在非对称加密中,每个通信方都有自己的密钥对(私钥和公钥)。顾名思义,私钥通常是保密的,而公钥是共享的。这些密钥本质上是这样的:如果使用一个密钥对进行加密,则只有另一个密钥对可以解密。

为了实现不可否认性(发送者不能否认他发送的消息)并验证特定实体接收数据,公钥被共享给他们,以便他们可以使用发送者拥有的相应私钥解密发送者加密的任何内容(仅限发送者(即秘密))但请注意,在此示例中,保密性很弱,因为发送者不知道并且无法保证公钥是否被泄露给未知者。

当私钥用于加密哈希时,它就成为签名,该过程称为签名。这实现了真实性(数据来自真实的人,因为使用了私钥),并且完整性也得到了保证,因为接收者在接收数据时通过使用发送者提供给他的相应公钥解密哈希值来验证哈希值,然后计算相同的哈希值靠他自己并匹配它。