![如何使用分离签名来验证文件的完整性和真实性?](https://linux22.com/image/1426129/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%88%86%E7%A6%BB%E7%AD%BE%E5%90%8D%E6%9D%A5%E9%AA%8C%E8%AF%81%E6%96%87%E4%BB%B6%E7%9A%84%E5%AE%8C%E6%95%B4%E6%80%A7%E5%92%8C%E7%9C%9F%E5%AE%9E%E6%80%A7%EF%BC%9F.png)
我理解分离签名是由签名者的私钥生成的,并且您使用签名者的公钥来验证下载的文件。
例如
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 并不期望文件名(或任何其他标识符)存储在签名中。但是:签名是签名文件的哈希值,使用签名者的私钥加密,因此可以使用签名者的公钥解密。如果解密的哈希值与用于验证的文件的哈希值不匹配,则您知道该文件与签名的文件不同(但无法判断它是错误的文件,因为选择了错误的文件,还是被篡改了)。