如何验证ASC密钥指纹?

目前,我正在尝试检查我从http://www.virtualbox.org/wiki/Linux_Downloads下载的oracle_vbox.asc密钥的指纹:他们提供了密钥和指纹,但没有给出自己审查这些信息的说明。

我如何显示刚刚下载的密钥的指纹?

apt-key finger oracle_vbox.asc会显示所有受信任密钥的指纹,这不是我想要的。

5个回答

获取密钥:
$ wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc

打印使用GPG版本1的密钥指纹。
$ gpg --with-fingerprint oracle_vbox.asc 
pub  1024D/98AB5139 2010-05-18 Oracle Corporation
                      (VirtualBox archive signing key) <info@virtualbox.org>
      Key fingerprint = 7B0F AB3A 13B9 0743 5925  D9C9 5442 2A4B 98AB 5139
sub  2048g/281DDC4B 2010-05-18
      Key fingerprint = 27B0 97CF 8257 4209 C434  8D42 B674 8A65 281D DC4B

请注意,第二个指纹只是子密钥的指纹。
使用GPG 2版本打印指纹。
$ gpg2 -n -q --import --import-options import-show  oracle_vbox.asc   
pub   dsa1024 2010-05-18 [SC]
      7B0FAB3A13B907435925D9C954422A4B98AB5139
uid   Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
sub   elg2048 2010-05-18 [E]

请注意,-n--dry-run的别名,即密钥实际上不会被导入。
或者,只需显示指纹:
$ gpg2 -nq --import --import-options import-show --with-colons oracle_vbox.asc \
     | awk -F: '$1 == "fpr" { print $10 }'
7B0FAB3A13B907435925D9C954422A4B98AB5139
27B097CF82574209C4348D42B6748A65281DDC4B

有没有一种不使用gpg的类似命令?我的意思是,在SSH中,我可以执行cat ./id_rsa.pub | awk '{print $2}' | base64 -d | md5sum,它会返回与ssh -lf ./id_rsa.pub的指纹哈希相等的MD5哈希。是否有类似的方法用于GPG公钥? - user3019105
2@user3019105,不,没有。PGP公钥的格式稍微复杂一些。请参考RFC 4880和GPG源代码以获取详细信息。 - maxschlepzig
RFC(关于MD5弃用指纹)中提到:“V3密钥的指纹是通过使用MD5对形成密钥材料的MPI的主体(但不包括两个八位字节的长度)进行哈希得到的。”,那么我能否通过ASCII Armor(基数64)公钥文件获取这些MPI的主体呢? - user3019105
@user3019105,你可以这样做。你可以复制GPG中已经实现的内容。但是这样的命令行会比你发布的SSH公钥更加复杂。因此,它不会是类似的。 - maxschlepzig
好的,谢谢。但是我还需要找出RFC所提到的“形成密钥材料的MPI主体”如何获取。 - user3019105
1一些解释性的评论和参考资料可以大大改善这个答案(例如,交换密钥 - GnuPG)。 - nutty about natty
@nuttyaboutnatty,嗯,我认为现在的情况已经非常准确了。问题只是关于显示密钥文件的指纹,因此答案也只涉及到这个。再加上其他内容可能会增加信号中的干扰,可以这么说。 - maxschlepzig
1这个语法不再适用于 GnuPG 2。它会输出:警告:未提供命令。尝试猜测您的意思...,然后列出没有指纹的密钥。请参阅我的回答。 - ominug
@ominug 请查看我最新的更新,可以在不将密钥导入密钥环的情况下显示指纹。 - maxschlepzig

第1步

$ deb http://download.virtualbox.org/virtualbox/debian artful contrib

第2步

$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -

第3步

$ apt-key list

或者,等价地,
$ apt-key finger

应该返回的是
/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2016-04-22 [SC]
      B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
uid           [ unknown] Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
sub   rsa4096 2016-04-22 [E]

这应该等同于。

The key fingerprint for oracle_vbox_2016.asc is

B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
https://www.virtualbox.org/wiki/Linux_Downloads上,可以通过视觉检查或进一步的命令行操作来进行。

相关链接:


这个问题缺少一些解释... - nutty about natty

这适用于GPG 2(至少我可以使用版本2.1.182.2.12进行验证):
wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc
gpg_home=$(mktemp -d)
gpg --homedir "$gpg_home" --import oracle_vbox.asc
# gpg: keybox '/tmp/tmp.CHoWuJBy7N/pubring.kbx' created
# gpg: /tmp/tmp.CHoWuJBy7N/trustdb.gpg: trustdb created
# gpg: key 54422A4B98AB5139: public key "Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>" imported
# gpg: Total number processed: 1
# gpg:               imported: 1
gpg --homedir "$gpg_home" --list-keys
# /tmp/tmp.CHoWuJBy7N/pubring.kbx
# -------------------------------
# pub   dsa1024 2010-05-18 [SC]
#       7B0FAB3A13B907435925D9C954422A4B98AB5139
# uid           [ unknown] Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
# sub   elg2048 2010-05-18 [E]
# 

来源:https://unix.stackexchange.com/a/468889

使用gpg版本2.2.27
gpg --version

# output
gpg (GnuPG) 2.2.27
libgcrypt 1.9.4

https://www.virtualbox.org/wiki/Linux_Downloads下载当前的.asc文件,截至本文撰写日期(2023年3月22日)。
wget https://www.virtualbox.org/download/oracle_vbox_2016.asc

VirtualBox 网站当前显示:

The key fingerprint for oracle_vbox_2016.asc is

B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
以下命令都可以验证这些信息,每个命令的格式不同:
gpg --show-keys --with-fingerprint --keyid-format=short oracle_vbox_2016.asc

输出:

pub   rsa4096/2980AECF 2016-04-22 [SC]
      Key fingerprint = B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
uid                    Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
sub   rsa4096/920E471F 2016-04-22 [E]

gpg --show-keys --with-fingerprint oracle_vbox_2016.asc

输出:

pub   rsa4096 2016-04-22 [SC]
      B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
uid                      Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
sub   rsa4096 2016-04-22 [E]

gpg --show-keys oracle_vbox_2016.asc

输出:

pub   rsa4096 2016-04-22 [SC]
      B9F8D658297AF3EFC18D5CDFA2F683C52980AECF
uid                      Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>
sub   rsa4096 2016-04-22 [E]

gpg --show-keys --with-colons oracle_vbox_2016.asc

输出 ("--with-colons 选项以稳定的、可机器解析的格式输出,适用于脚本和其他程序。"):
pub:-:4096:1:A2F683C52980AECF:1461318881:::-:::scESC::::::23::0:
fpr:::::::::B9F8D658297AF3EFC18D5CDFA2F683C52980AECF:
uid:-::::1461318881::CA5D570DDFDB695A0301885765DD8E285368742C::Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>::::::::::0:
sub:-:4096:1:AD18C79D920E471F:1461318881::::::e::::::23:
fpr:::::::::31DD01EB8C64DF3D12E7BC97AD18C79D920E471F:


3ssh-keygen无法识别"oracle_vbox.asc"作为公钥文件。 - Amanda
我的错误,命令应该是“ssh-keygen -lf”。你还是得到了一个错误吗? - mvario
4这个不起作用。 - maxschlepzig
ssh-keygen -lf oracle_vbox_2016.asc oracle_vbox_2016.asc 不是一个公钥文件。 - Scott Stensland
2ssh-keygen 不适用于 PGP 密钥。 - Geoffrey