不用命令行的 PGP 加密
PGP 的名声是强大与难用并存,这正是如今许多人把密钥粘贴进 AI 聊天里操作的原因——而私钥恰恰是最不该去的地方。本指南用浏览器本地运行的 PGP 套件,走完覆盖几乎所有真实用途的四个操作:生成密钥对、加密、解密、签名与验证——再加上决定这一切是否经得起考验的密钥卫生。
不要再把私钥粘贴进聊天机器人
这件事发生在一个可预料的时刻。密钥导不进去、消息解不开、指纹对不上,看起来最快的办法就是把整段内容——连私钥一起——粘贴进 AI 聊天,问它哪里出了问题。不要这样做。私钥一旦进入聊天,就脱离了你的控制:它可能留在对话记录里、日志里、你日后分享的截图里,留在一台并不是你以为的那台设备上。你无法撤回一次粘贴。任何被复制进你不控制的系统的密钥,都必须视为已泄露,这意味着吊销它、重新来过——恰恰是那次粘贴本想省掉的工作。
还有第二个问题,比第一个更安静:答案可能是错的。语言模型会拒绝某些密钥处理请求,会截断过长的装甲文本块,也可能在看错中间内容之后,以十足的把握报出一个指纹或密钥 ID。密码学不原谅这种差一点。替代方案不是为了命令行而命令行,而是把工作放在本地完成,让密钥材料从不离开本机。这正是本站 PGP 套件 的用途:密钥生成、加密、解密、签名与验证都在浏览器标签页中运行,什么都不上传。
PGP 到底给了你什么
PGP——以其现代形态而言,即由 GnuPG 等工具实现的 OpenPGP 标准——是在一对密钥之上构建的两个操作。公钥可以与任何人分享,可以打印、发邮件或公开发布。私钥则保密保存,由口令保护。任何用公钥加密的内容,只能用配套的私钥解密。这就是全部的保密机制:无需事先交换共享秘密,也无需在你正试图保护的同一个渠道里商定密码。
签名走的是反方向。你用私钥签名,任何持有你公钥的人都可以验证:签名确实来自该私钥的持有者,且被签内容自此未被更改。两者合起来,加密回答谁能读这个?,签名回答是谁写的,它完整吗?。而两者都不回答谁在旁边看着?——这个限制下文还会回到,因为它决定了 PGP 到底是不是合适的工具。
生成一对密钥,然后用别人的公钥加密
在一台你信任的机器上生成密钥对,并从第一分钟起区别对待两个半部。公钥那一半是名片:导出它,给任何可能给你写信的人,放在通信对象能找到的地方。私钥那一半是通往所有曾加密给你的消息的主钥匙,它属于离线环境——放在做解密的那台机器上,并在独立介质上备一份加密备份,不要放云笔记、不要放邮箱、不要放聊天里。生成时,选一个不在任何地方复用的口令;本站的密码生成器可以在本地生成一个长口令短语,这比在压力之下临时编一个要好。
加密是人们想象中的那一步,也是最简单的一步。你取来收件人的公钥——以你信任的方式取得,理由见下文——写好消息或附上文件,然后用那把公钥加密。输出是一个装甲文本块,可以走普通电子邮件,因为它的内容只有配套私钥的持有者能读。这里有一个值得直说的后果:如果你没有同时加密给你自己的公钥,你将无法重读自己发出的内容。这个决定要有意地做,而不是出于意外。
注意是哪把密钥做了这项工作。你用的是对方的公钥,不是你自己的。当别人给你写信、以及你签名时,起作用的是你的密钥对;当你给别人写信时,起作用的是对方的。初学者的大部分困惑——以及大多数第一次尝试的失败——都是这个方向弄反了,结果是一条谁也打不开的消息,偶尔连本该收到它的人也打不开。
解密收到的内容,签名发出的内容,验证收到的签名
解密正是私钥那些存储规则挣得其地位的地方。有人发给你一个装甲文本块或一个加密文件;你用私钥打开它,输入口令,在本地读到内容。这一步不需要网络、不需要服务器、不需要账户,也不应有其中任何一样。如果某个流程要求你把加密消息和私钥一起上传到某个网站、让它替你解密,那么这个流程本身就是威胁——关掉那个标签页。
签名与验证是一对,而验证是人们跳过的那一半。你做出的签名告诉收件人:这来自这把密钥的持有者,未经更改。你验证的签名则告诉你同样的事,关于到达你手里的内容——但前提是你真的去查,而且查的是你确信属于发送者的公钥。验证失败不是一个可以点过去的警告。它只意味着三件事之一:内容在签名后被改动了,签名损坏了,或者签名的密钥不是你预期的那把。三者的结局相同:不要根据该内容行事,并通过另一个渠道询问发送者发生了什么。
大多数日子里,密钥卫生就是安全本身
现实世界中的 PGP 失败,很少是数学被攻破。它们是:一把没有备份的私钥随着笔记本一起丢失;一个从论坛账户复用来的口令;一把在对话中途过期的密钥,于是通信对象悄悄退回到明文。设置一个你真的会维护的过期时间——一到两年是常见而合理的选择——并在生成密钥的当天就把续期日期写进日历,而不是在它失效的那一周。
在生成密钥的同时、趁你还不需要时,就生成吊销证书,并把它与备份放在一起。吊销证书是你向世界宣告一把密钥已退役或已泄露的方式;生成它需要私钥,而这恰恰是你在倒霉那天可能没有的东西。口令、备份和吊销证书都不起眼,而它们正是一次事件与一个死胡同之间的区别。
最后是指纹。密钥 ID 很短,不证明任何事;指纹是公钥的长哈希,比对它才是你确认自己手里的密钥就是通信对象手里那把的方式。用带外方式比对——在通话中读出来,对照一张对方给你的名片或一个由对方控制的页面——不要在送来密钥的同个邮件线程里比对。一把通过电子邮件到达、指纹也在同一封邮件里的密钥,等于自己验证了自己,也就是说,它根本没有被验证。
诚实的限制,以及何时该用别的工具
PGP 加密的是内容。它不隐藏元数据:在电子邮件中,发件人、收件人、时间和通常还有主题行,对承载消息的服务器仍然可见,加密文件的大小也说明问题。它还背着三十年的可用性历史——密钥管理困惑了一整代用户,工具也从未像现代消息应用那样变得无形。这并不使它无用。这使它具体而明确:异步的、面向文件与消息的加密,发生在能管理密钥的人之间,没有中央账户,也没有居中的厂商。
日常对话用 Signal 是更好的工具:密钥替你管理,元数据处理更强,也没人需要在晚饭前比对指纹。为存储或传输加密一个文件,age 比 PGP 更简单,也更难误用。当你需要的只是一个签名——签署一个发布版本或一份文档——minisign 更小、更清晰。PGP 剩下的阵地是真实的:必须多年后仍可读的电子邮件、既有基础设施内部的签名、跨工具跨数十年的互操作性——而在这块阵地上,这里的 PGP 套件 把命令行从这项工作中拿掉,但不拿掉这项工作所要求的审慎。
常见问题
基于浏览器的 PGP 安全吗?
密钥材料从不离开标签页:生成、加密、解密和签名都在浏览器中本地运行,页面不上传也不存储任何东西。但话说回来,浏览器只和运行它的设备与浏览器本身一样可信——扩展、恶意软件和借来的机器都在它之下。对日常密钥来说,这个权衡是合理的。对最高风险的密钥——那把保护着发布版本、保险库或他人数据的密钥——请用一台离线机器,浏览器工具留给图方便的工作。
我弄丢了私钥或它的口令——有人能恢复我的消息吗?
不能,这正是要点所在。没有密码重置,没有客服台,没有后门:一封加密给某个密钥的消息,如果其私钥半部已丢失、或口令被遗忘,就会一直保持加密状态。任何能替你恢复它的人,也能替别人恢复它。这正是卫生一节中备份与吊销证书存在的原因——备份让你在丢失设备后活下来,吊销证书让你退役一把你再也用不了或再也不信任的密钥。
我怎么知道一把公钥真的属于那个人?
通过第二个渠道比对指纹:在通话中大声读出来,对照对方递给你的名片,或对照一个由对方控制的页面。指纹是公钥的完整哈希;如果两边一致,你拿到的就是对方持有的那把密钥。密钥服务器什么都不证明——任何人都可以上传一把声称是任何姓名和邮箱的密钥,上架不等于验证。从任何地方下载一把密钥,再在另一个地方用指纹确认它,是应当瞄准的标准。