GnuPG 命令行 - 验证 KeePass 签名

GnuPG 命令行 - 验证 KeePass 签名

我正在尝试验证 KeePass 2.14 安装文件的最新版本的 PGP 签名签名,但这是我收到的输出:

C:\Program Files (x86)\GNU\GnuPG>gpg.exe --verify C:\Users\User\Desktop\KeePass-2.14-Setup.exe
gpg: no valid OpenPGP data found.
gpg: the signature could not be verified.
Please remember that the signature file (.sig or .asc)
should be the first file given on the command line.

C:\Program Files (x86)\GNU\GnuPG>

我发现这个命令这里,但它没有提到“.sig”或“.asc”文件,所以我认为我做错了。通过阅读手册页,我进一步尝试了以下方法:

C:\Program Files (x86)\GNU\GnuPG>gpg.exe --pgpfile C:\Users\User\Desktop\KeePass-2.14-Setup.exe
gpg: Invalid option "--pgpfile"

C:\Program Files (x86)\GNU\GnuPG>

正如您所见,结果相当令人困惑...

我看了看这在超级用户上,但似乎没有一个链接真正回答我的问题,至少没有直接帮助我了解如何继续解决这个问题。

有人能帮我了解 OpenPGP 的深奥技术​​细节和 GnuPG 程序的相关用途吗?我觉得自己学习 VBS 很蠢,但这简直太丢脸了:它完全摧毁了我对 IT 技能的信心(不过,我也没有理由吹嘘,因为我还没有拿到 A+ 证书,哈哈)。


更新日期 04-04-2011

好吧,我厌倦了摆弄 Windows,并决定通过启动 Ubuntu 来做正确的事情;仅此一点就让事情变得更合乎逻辑!

以下是我的命令列表和我所在的位置:

  1. proto@type:~$ cd Desktop/
  2. proto@type:~/Desktop$ gpg --import KeePass-2.14-Setup.exe.asc gpg: no valid OpenPGP data found. gpg: Total number processed: 0
  3. proto@type:~/Desktop$ gpg --import Dominik_Reichl.asc gpg: /home/proto/.gnupg/trustdb.gpg: trustdb created gpg: key FEB7C7BC: public key "Dominik Reichl " imported gpg: Total number processed: 1 gpg: imported: 1
  4. proto@type:~/Desktop$ gpg --verify KeePass-2.14-Setup.exe gpg: no valid OpenPGP data found. gpg: the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line.
  5. proto@type:~/Desktop$ gpg --verify KeePass-2.14-Setup.exe.asc gpg: Signature made Sun 02 Jan 2011 05:25:24 AM MST using DSA key ID FEB7C7BC gpg: Good signature from "Dominik Reichl " gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 2171 BEEA D0DD 92A1 8065 5626 DCCA A5B3 FEB7 C7BC
  6. proto@type:~/Desktop$ gpg --verify Dominik_Reichl.asc gpg: verify signatures failed: unexpected data

按照 Mike 的指示,我将“.exe”和“.asc”文件放在同一个目录中,即桌面。如您在代码中看到的,我还将公钥“Dominik_Reichl.asc”放在桌面目录中。

请耐心等待,因为我已经被 MD5 彻底宠坏了;我假设上面的第 5 步是与此等同的 GPG:

C:\Users\user\>CD Desktop

C:\Users\user\Desktop>MD5Sum KeePass-2.14-Setup.exe
bae59065b24f0a6f2ed4bb9e0d6fc65f *KeePass-2.14-Setup.exe

我之所以这么说,是因为每当我将“KeePass-2.14-Setup.exe”文件移动到桌面上的“temp”文件夹时,行为就会发生变化。当我运行命令时,我得到的结果如下:

proto@type:~/Desktop$ gpg --verify KeePass-2.14-Setup.exe.asc
gpg: no signed data
gpg: can't hash datafile: file open error

这些结果让我相信我应该从步骤 5 中提取“DSA 密钥 ID”和“主密钥指纹”,然后将它们与签名页顶部的值那么,MD5 验证的相似性就在这里吗?这就是全部内容了吗?还是还有进一步的步骤?是否有命令可用于验证这些字符串? 这些字符串是我真正需要检查的吗?这些字符串是什么?



现在,我还要处理另一个问题。在“主键指纹”结果中,“8065”和“5626”之间有 2 个空格。当我使用电子表格将结果与签名页上的字符串进行验证时,由于结果中有多余的空格,我得到了“FALSE”结果。我检查了签名页的源代码,看看浏览器是否忽略了多余的空格,但事实并非如此。

2171 BEEA D0DD 92A1 8065 5626 DCCA A5B3 FEB7 C7BC    # From Source of Signature Page
2171 BEEA D0DD 92A1 8065  5626 DCCA A5B3 FEB7 C7BC    # From My Results

只要我删除多余的空格,我的结果就会与签名页的结果相匹配,但它们不应该在无需我进行任何干预的情况下匹配吗? 空白处的差异应该引起警惕吗?

不幸的是,GPG 手册页对我来说仍然相当晦涩难懂,或者用某些人的话来说,是“用户敌意”(搜索“用户敌意 gpg”),所以我需要一些额外的奖励。我承认:我很笨。事实上,当我还在学习如何使用 MD5 验证时,我对它的困惑几乎与对这个的困惑一样多。

答案1

在您提供的第一个命令中,您应该引用 .asc 签名文件 - 而不是 .exe 文件。.exe 文件也应该与 .asc 文件位于同一目录中。

来自 gpg 手册页:

- 核实
      假设第一个参数是一个签名文件或一个分离的签名,并在没有生成器的情况下对其进行验证。
      任何输出。如果没有参数,则从 STDIN 读取签名数据包。如果仅给出 sigfile,
      它可能是完整的签名,也可能是分离的签名,在这种情况下,签名的内容应该以
      不带“.sig”或“.asc”扩展名的文件。如果参数超过 1 个,则第一个参数应为分离的
      签名,其余文件是已签名的内容。要从 STDIN 读取已签名的内容,请使用“-”
      作为第二个文件名。出于安全原因,分离签名无法从
      STDIN 而不采用上述方式表示。

答案2

看起来你把事情搞得太复杂了:-) 尝试在以下位置搜索 DSA 密钥 ID FEB7C7BChttps://keyserver.pgp.com/vkd/GetWelcomeScreen.event我想你明白了!

答案3

这篇文章主要是为了“从 A 到 Z”的细分,这样任何遇到困难的人都可以得到答案,而不必翻遍所有的评论。请不要投票赞成;因为荣誉归于参与者(Mike Fitzpatrick、grawity 和 Jan Ivar Beddari)。

另一件事:不要相信这个帖子! 违反直觉的说法,但我对 GPG 的工作原理的理解是有缺陷的/有限的。当我对此有了更好的理解时,我会更新它;现在我对它的工作原理还一头雾水。

  1. 下载您想要的副本KeePass, 相应的签名以及你最喜欢的 Linux 发行版上的同一目录(就我而言,我一直在使用 Ubuntu,并将桌面作为工作目录)
    • 这个很重要!公钥KeePass 网站上的公钥不应下载!您需要下载其他用户信任的公钥,希望这些用户是您信任的个人。您怎么做呢?请拥有受信任公钥的朋友给您一份副本;但您不一定有朋友拥有该公钥。好吧,感谢 Jan Ivar Beddari 的帖子,您可以从下载 Dominik Reichl 发布的公钥这里并从那里使用导入公钥。
  2. 打开终端(Ubuntu 中为“CTRL+ALT+T”)
  3. 跑步cd Desktop/
  4. 跑步gpg --import %KEYNAME%.asc
  5. 跑步gpg --verify %SIGNATURE%.asc
  6. 将生成的密钥指纹与 KeePass 网站上的密钥指纹进行比较

以下是我使用来自 keyserver.pgp.com 的公钥时的结果:

proto@type:~$ cd Desktop/

proto@type:~/Desktop$ gpg --import key0xDCCAA5B3FEB7C7BC.asc 
gpg: key FEB7C7BC: public key "Dominik Reichl " imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: no ultimately trusted keys found

proto@type:~/Desktop$ gpg --verify KeePass-2.14-Setup.exe.asc
gpg: Signature made Sun 02 Jan 2011 05:25:24 AM MST using DSA key ID FEB7C7BC
gpg: Good signature from "Dominik Reichl "
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2171 BEEA D0DD 92A1 8065  5626 DCCA A5B3 FEB7 C7BC

以下是我使用 KeePass 网站上的公钥时的结果:

proto@type:~$ cd Desktop

proto@type:~/Desktop$ gpg --import Dominik_Reichl.asc
gpg: key FEB7C7BC: public key "Dominik Reichl " imported
gpg: Total number processed: 1
gpg:               imported: 1

proto@type:~/Desktop$ gpg --verify KeePass-2.14-Setup.exe.asc
gpg: Signature made Sun 02 Jan 2011 05:25:24 AM MST using DSA key ID FEB7C7BC
gpg: Good signature from "Dominik Reichl "
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2171 BEEA D0DD 92A1 8065  5626 DCCA A5B3 FEB7 C7BC

如您所见,结果都相同,除了“gpg:未找到最终受信任的密钥”部分。我不确定该怎么做,但密钥指纹与 KeePass 网站上的密钥指纹相匹配,这在验证文件时很重要。不过,这与验证公钥是否值得信赖有很大不同。公钥是您信任或不信任的东西,就像您是否信任陌生人一样。让他们显得值得信赖的一种方式是,如果他们有几个人为他们担保,公钥也是如此。同样,这是我有限的范围,所以您也需要尽职尽责!

但是如果你可以等待,我会慢慢编辑我的帖子,使其简洁、简单,并希望准确地表示在验证 KeePass 副本时正确使用 GPG 的方式。

答案4

重要的 ! 这仅供参考。如果您从一个平台迁移到另一个平台(例如从 Windows 迁移到 Linux)并重新安装 KeepAss,请验证您是否安装了正确的软件包。KeepAssX 首先在存储库中可用,但如果您使用 KeepAss2 数据库,它将引发上述错误。请使用 KeepAss2 包来获取 .kbdx 数据库。

相关内容