我正在尝试一个程序接收邮件后对其进行加密,这样至少可以在接收邮件服务器上以加密形式存储邮件(尽管仍将以纯文本形式传输)。虽然它的设计目的不是对已加密的电子邮件进行双重加密,但它似乎仍然无法加密已签名的电子邮件。
我测试了这个命令序列,它也失败了;这基本上就是程序正在做的事情:
echo "Hello" > blah.txt
gpg --clearsign blah.txt
gpg --encrypt --armor blah.txt.asc
gpg --decrypt blah.txt.asc.asc
最后一个命令通常会解密并验证签名。然而,它只解密,并且需要第二次 --validate 传递来验证签名。这意味着电子邮件客户端无法正确显示邮件,即使它们包含 PGP 支持。
答案1
只有当签名包含在原始加密过程中时,GPG 才能在解密文件的同时验证签名。从 GPG 的角度来看,PGP/MIME 中包含的清晰签名消息或分离签名将是已加密的纯文本数据的一部分。因此,单独操作来验证签名是正常的。
有趣的是,尽管这与 RFC 4880 的建议相差甚远,但将明文签名的签名嵌套在加密块中的过程正是 Hushmail 所做的事情。