GnuPG是否支持对预先生成的摘要/哈希值进行签名?
GnuPG是否支持对预先生成的摘要/哈希值进行签名?
当然可以!GnuPG完全支持直接签名你预先生成的哈希值,不过得注意一些格式和参数上的细节——毕竟GPG签名的不是单纯的哈希字符串,得符合OpenPGP的规范要求才行。
下面是具体的操作步骤:
第一步:把哈希值转换成二进制格式
通常我们生成的哈希是十六进制字符串(比如用sha256sum输出的结果),但GPG需要处理的是二进制格式的哈希数据。你可以用xxd工具转码,假设你的十六进制哈希存放在hash.txt文件里,执行:xxd -r -p hash.txt > hash.bin这样就得到了二进制格式的哈希文件
hash.bin。第二步:用GPG签名二进制哈希
接下来用GPG的分离签名模式,同时指定你生成哈希时用的算法(这一步非常重要,必须和哈希算法完全一致),比如你用的是SHA256,执行:gpg --detach-sign --digest-algo SHA256 --output signature.sig hash.bin这里的
--detach-sign是生成独立的签名文件,而不是把签名嵌入到原文件里;--digest-algo明确指定哈希算法,避免GPG使用默认算法导致签名与哈希不匹配。第三步:验证签名
验证的时候,需要把二进制哈希文件和签名文件一起交给GPG:gpg --verify signature.sig hash.bin如果验证通过,会输出签名的有效性和签名者的相关信息。
额外提醒:千万不要直接签名十六进制哈希字符串,那样GPG实际上是对字符串本身签名,而不是对原始文件的哈希签名,后续验证时会无法对应上原始文件的哈希值。
备注:内容来源于stack exchange,提问作者ivicaa
相关产品推荐
相关产品推荐

