如何使用分离签名来验证文件的完整性和真实性?

如何使用分离签名来验证文件的完整性和真实性?

我理解分离签名是由签名者的私钥生成的,并且您使用签名者的公钥来验证下载的文件。

例如

gpg --verify package_name.asc

使用签名者的公钥来验证签名,但是如何gpg知道签名属于下载的包?我遗漏了什么吗?

答案1

查找分离签名的文件

gpg将自动验证分离的签名是否与相同的文件名一致,不带.asc.sig扩展名。来自man gpg

--verify
  Assume  that  the first argument is a signed file or a detached signature and
  verify it without generating any output. With  no  arguments,  the  signature
  packet  is  read from STDIN. If only a sigfile is given, it may be a complete
  signature or a detached signature, in which case the signed stuff is expected
  in a file without the ".sig" or ".asc" extension.  With more than 1 argument,
  the first should be a detached signature and  the  remaining  files  are  the
  signed  stuff.  To  read  the  signed stuff from STDIN, use '-' as the second
  filename.  For security reasons a detached signature cannot read  the  signed
  material from STDIN without denoting it in the above way.

因此,gpg --verify package_name.asc期望签名文件可用package_name。如果不是(或在另一个位置),也给出此文件的路径:

gpg --verify detached_siganture.asc signed_file

这是正确的文件吗?

OpenPGP 并不期望文件名(或任何其他标识符)存储在签名中。但是:签名是签名文件的哈希值,使用签名者的私钥加密,因此可以使用签名者的公钥解密。如果解密的哈希值与用于验证的文件的哈希值不匹配,则您知道该文件与签名的文件不同(但无法判断它是错误的文件,因为选择了错误的文件,还是被篡改了)。

相关内容