如何创建可在文件的LF和CR / LF版本上使用的单个GnuPG签名?


2

我在每行末尾仅使用LF(换行)创建了一个文本文件。然后,我制作了一个相同的版本,只是在每行末尾都有CR / LF(回车/换行)。

然后,使用gpg22.0.19版,我为每个文件创建了一个独立的签名。每个文件都使用正确的签名正确验证,但是当我为每个数据文件使用错误的签名时,这样做失败。

到目前为止,这就是我所期望的。

但是我拥有一个文本文件及其分离的签名。我现在有两个版本的文本文件,一个是LF样式,一个是CR / LF样式。相同的分离签名在两者上均正常工作。

原始签名者如何做到这一点?我希望能够做到这一点。

Answers:


3

tl; dr:设置--textmode选项。

RFC 4880,5.2.4。计算签名

5.2.4。计算签名

通过在签名数据上生成哈希,然后在签名算法中使用生成的哈希来形成所有签名。

对于二进制文档签名(类型0x00),文档数据将直接进行哈希处理。对于文本文档签名(类型0x01),通过将行尾转换为来规范化文档<CR><LF>,并对结果数据进行哈希处理。

换句话说,您需要确保GnuPG在签名时将文档视为文本文档,这需要使用以下--textmode选项启用:

gpg --textmode --detach --sign file

通过运行gpg --list-packets signature-file,您将观察到与RFC 4880不同的签名类型,第二行包含sigclass 0x01with --textmodeset而不是with sigclass 0x00

man gpg(对于GnuPG 2相同):

-t, --textmode
--no-textmode

将输入文件视为文本,并将其存储在带有标准“ CRLF”行尾的OpenPGP规范文本格式中。这还将设置必要的标志,以通知接收者加密或签名的数据是文本,并且可能需要将其行尾转换回本地系统使用的任何内容。在具有不同行尾约定的两个平台之间进行通信时(对于Mac,类似于UNIX,对于Windows,类似于Mac,等等),此选项很有用。 --no-textmode禁用此选项,并且是默认选项。

如果将 -t (但不使用--textmode)与铠装和签名一起使用,则启用清除签名的消息。为了使命令行与PGP的命令行版本兼容,需要使用此合并。通常,您将使用--sign--clearsign选择签名的类型。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.