考虑文件是否使用命令加密
例如
gpg --output test.txt.gpg --encrypt --recipient [email protected] test.txt
现在,假设另一个人收到了test.txt.gpg
公钥[email protected]
,如何进行检查以确保该文件确实是使用公钥加密的?
答案1
在较新版本的 中,某些行为已发生改变gpg
(我正在 上测试gpg v2.2.4
)。执行 时,它会提示您输入密码--list-packets
。现在默认情况下,-k
不再显示密钥 ID,只显示 40 个字符的指纹。
以下是一些将跳过提示并显示密钥 ID 的命令:
# show public key ID that it was encrypted with, skipping prompts
gpg --pinentry-mode cancel --list-packets file.gpg
# list keys with the key IDs
gpg -k --keyid-format long
然后,您可以将 16 个字符的密钥 ID--list-packets
与 中的列表进行匹配-k
。
答案2
您甚至不需要有公钥(只要知道它的 ID 即可)。假设有人没有故意隐藏用于加密文件/消息的密钥,那么您可以使用该list-packets
命令执行您要执行的操作。
gpg --list-packets test.txt.gpg
这将向您显示 PGP 消息/文件头中列出的每个解密数据包的列表。有多种方法可以加密密钥并将该密钥隐藏在此列表中,但使用常规命令(如示例中的命令)将导致列出所有解密密钥,如下所示。
gpg --list-packets crypto-text.pgp
# off=0 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 2206D60BA555DCB0
data: [2045 bits]
data: [2047 bits]
# off=529 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 0D6229B307ED0210
data: [2043 bits]
data: [2048 bits]
# off=1058 ctb=85 tag=1 hlen=3 plen=526
:pubkey enc packet: version 3, algo 16, keyid 0E9AFA6C61A4DC66
data: [2048 bits]
data: [2046 bits]
请注意列出的三个不同的密钥 ID。是的,您猜对了,每个密钥都可用于解密此特定消息。
如果你有公钥,则可以获得加分因为--list-packets
命令还会告诉您消息头中每个数据包的友好名称。(并且您可以使用已经拥有的公钥)。
但,除非有人故意隐藏解密密钥,不将其列在邮件头中,您可以看到所有 PGP 密钥均可用于解密消息,而无需访问任何一个的公钥或私钥。
我实际上使用这个的次数比我想承认的要多得多,通常是在我公司的人交换 PGP 消息时,突然有人打不开。他们总是责怪软件实现。到目前为止,每次都是这样,一条消息被起草、加密,加密后,一个新的收件人被添加到收件人列表中。我可以将密文复制到 crypto-text.pgp 文件中(就像我的例子一样),并确切地看到消息被加密发送给了谁;向他们展示这一点往往会阻止“你的软件插件坏了”的游戏。
答案3
答案4
如果文件加密,使用此命令将为您提供基本信息。
gpg --list-packets <文件绝对路径>
您可以在哪里找到keyid
加密 pgp 密钥的一些基本信息。就我而言,一些 pgp 密钥已安装在系统中,因此我可以与它们进行比较。如果上述代码失败,则说明它未加密。
此外,要获取更多信息,请keyid
将此代码全部使用(我尝试对加密和非加密文件都有效)
gpg --list-keys --keyid-format LONG <keyid>
您可以在其中找到keyid
与 pgp 公钥相关的详细信息。