![GnuPG 命令行 - 验证 KeePass 签名](https://linux22.com/image/1267701/GnuPG%20%E5%91%BD%E4%BB%A4%E8%A1%8C%20-%20%E9%AA%8C%E8%AF%81%20KeePass%20%E7%AD%BE%E5%90%8D.png)
我正在尝试验证 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 来做正确的事情;仅此一点就让事情变得更合乎逻辑!
以下是我的命令列表和我所在的位置:
proto@type:~$ cd Desktop/
proto@type:~/Desktop$ gpg --import KeePass-2.14-Setup.exe.asc gpg: no valid OpenPGP data found. gpg: Total number processed: 0
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
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.
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
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 的工作原理的理解是有缺陷的/有限的。当我对此有了更好的理解时,我会更新它;现在我对它的工作原理还一头雾水。
- 下载您想要的副本KeePass, 相应的签名以及你最喜欢的 Linux 发行版上的同一目录(就我而言,我一直在使用 Ubuntu,并将桌面作为工作目录)
- 这个很重要!这公钥KeePass 网站上的公钥不应下载!您需要下载其他用户信任的公钥,希望这些用户是您信任的个人。您怎么做呢?请拥有受信任公钥的朋友给您一份副本;但您不一定有朋友拥有该公钥。好吧,感谢 Jan Ivar Beddari 的帖子,您可以从下载 Dominik Reichl 发布的公钥这里并从那里使用导入公钥。
- 打开终端(Ubuntu 中为“CTRL+ALT+T”)
- 跑步
cd Desktop/
- 跑步
gpg --import %KEYNAME%.asc
- 跑步
gpg --verify %SIGNATURE%.asc
- 将生成的密钥指纹与 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 数据库。