本教程主要面向无技术背景的初学者,讲解 非对称加密的基本概念和流程,并为非对称加密软件 Kleopatra 和 OpenKeychain 提供对应的图文使用教程与技巧。
本教程中 蓝色的文字 为超链接,可以 点击跳转 到对应的章节或者外部页面。
为了安全起见,在对教程内容的阅读与实践中,请确保完整理解并执行所有步骤。对于未能完全理解其含义和必要性的步骤,也请尽可能执行,而非直接跳过。
本教程内容以 CC BY-NC-SA 4.0 许可协议发布。
如果对本教程有任何问题或建议,欢迎前往本教程的 GitHub 仓库 提交 Issue 或 Pull Request。
介绍
对称加密
你曾通过加密压缩文件来规避聊天软件或网盘等平台的审查(如违规检查)吗?这种方式属于对称加密,加密和解密都需要使用同一个密钥(密码)。
不过这里存在一个问题:如何安全地告知朋友这个密钥呢?直接把密钥通过平台发给对方,平台背后的运营方也能通过查看你们之间的聊天记录知道这个密钥,这使得加密失去了意义。
非对称加密
非对称加密解决了这个问题。它使用一对密钥:一个公钥(公开密钥)和一个私钥(私有密钥)。公钥可以对外分享,用来加密消息;私钥只能自己持有,用来解密消息。你的朋友使用你的公钥加密消息(明文)得到密文,这段密文只有你的私钥才能解密并还原为原始消息(明文)。其他人即使拿到密文,也会因为没有你的私钥而无法解密。此外,其他人也不能通过你的公钥反推出你的私钥。
在实际使用中,通过非对称加密发送一条消息通常需要经过以下步骤:
安装好的加密软件、创建好的密钥对和导入的公钥可以重复使用,无需每次加密前重复相关操作。
选择加密软件
OpenPGP 是一种开放的非对称加密标准,它制定了密文、密钥与签名的统一格式。
由于历史原因,有时也用 PGP 或 GPG(GnuPG) 指代 OpenPGP,三者一般可以互换使用。
本教程主要介绍实现了 OpenPGP 标准的加密软件。不同的加密软件,只要都实现了 OpenPGP 标准,就能相互收发加密消息。
软件选择建议:
- Windows / Linux 用户推荐使用 Kleopatra。
- Android 平台可选择 OpenKeychain,但该软件已停止维护,原则上不再推荐。
- 其他平台的用户可在 OpenPGP Software 中寻找合适的软件,或自行搜索。
Kleopatra
本章将介绍 Kleopatra 的安装与使用,包括:
- 创建 OpenPGP 密钥对
- 导出自己的公钥
- 导入并认证他人的公钥
- 加密文本或文件
- 解密文本或文件
完成本章后,建议继续阅读:
准备软件
Windows
浏览器打开 Gpg4win 下载页面。
选择捐赠金额后下载安装包。若不捐赠,选择“$0”,再点击 “Download” 按钮直接下载。
以管理员权限运行安装包。
点击“下一步”按钮,进入选择组件界面。
勾选加密软件 Kleopatra,再按需勾选其他要安装的组件:
点击“下一步”按钮,按照界面提示完成后续步骤,直至完成软件安装。
其他平台 (Linux, BSD 等)
请优先使用发行版所提供的包管理器进行安装。
创建密钥对
打开 Kleopatra。
打开“文件”菜单,然后选择“创建 OpenPGP 密钥对”。
输入你的名字和电子邮件地址(不一定要用真实姓名和实际存在的电子邮件地址),确保收到公钥的人能通过其辨认出密钥所有者的身份。
如果该密钥对需要用于支持 OpenPGP 的在线服务,如电子邮箱、在线 Git 托管服务(如 GitHub)、公钥服务器等,则必须填写能够联系到你的电子邮件地址。
特殊的情况是如果 GitHub 账户启用了“Keep my email addresses private”(不公开我的电子邮件地址),则 Git 提交和 GPG 公钥需要使用 GitHub 提供的带有
no-reply
的电子邮件地址。详见 这篇 GitHub 帮助文档第 8 条的 Note。勾选“使用密码句保护生成的密钥”选项。
点击“OK”按钮开始创建密钥对。
为新创建的密钥对设置 私钥密码。在“Passphrase”和“Repeat”输入框中输入相同的密码,然后点击“OK”按钮。
重要说明:
此处设置的私钥密码仅用于加密私钥本身;在使用私钥(如解密消息)时,Kleopatra 会要求用户输入该密码来临时解密私钥。这样做的目的是提高安全性,即使私钥意外泄露,也会因为缺少私钥密码而无法使用。
因此私钥密码和私钥都很重要,只能自己持有,不能公开;且密码应有一定的复杂度,不应该和其他密码相同。创建好的密钥对会显示在 Kleopatra 的证书管理界面中。
目前为止,你可能在 Kleopatra 的界面中遇到了这三种相似而模糊的表达,以下是简单的辨析:
- 密钥对:由公钥与配对的私钥组成。
- 证书:由密钥对或者单独的公钥,再加上额外的元数据(如作为身份信息的名字和电子邮件地址等)组成。
- 密钥:通常代指证书;在对称加密中也可以指对称密钥(密码)。
为了简单起见,在实际使用中,你可以结合上下文理解相应术语的含义,不需要过于纠结其精确定义。
导出公钥
公钥推荐导出为 文本形式(用于交流和发布),也可以导出为 文件形式(用于存储和归档)。
两种方式均建议掌握。
导出公钥文本
导出公钥
进入 Kleopatra 的证书管理界面,双击 需要导出的公钥。
每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。
点击“导出”按钮,公钥文本会显示在导出界面的文本框中。
分享公钥
发送公钥文本给对方。
可以复制公钥文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。
等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。
- 如果一致,说明公钥发送成功,应告知对方校验结果。
- 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
导出公钥文件
导出公钥
进入 Kleopatra 的证书管理界面,选择需要导出的公钥,然后点击工具栏上的“导出”按钮。
选择存储公钥的位置,导出后缀名为
.asc
的公钥文件。
分享公钥
发送公钥文件给对方。
回到 Kleopatra 的证书管理界面,双击 需要导出的公钥。
每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。
等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。
- 如果一致,说明公钥发送成功,应告知对方校验结果。
- 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
导入公钥
两种方式均建议掌握。
导入公钥文本
收到以
-----BEGIN PGP PUBLIC KEY BLOCK-----
开头的公钥文本。可以通过文本首行的内容辨别公钥和密文:
- 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
- 密文文本首行的英文:BEGIN PGP MESSAGE
进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。
将公钥文本复制到“记事本”选项卡下方的文本框中,然后点击“导入记事本”按钮。
点击“认证”按钮。
在认证证书界面上,将显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。
- 如果一致,则进入下一步。
- 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站 或 一次性匿名聊天室 传递指纹,并通过原平台发送链接。
在“认证方式”下拉框中选择自己的私钥,然后点击“认证”按钮。
在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
提示:
Kleopatra 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。已导入的公钥会显示在 Kleopatra 的证书管理界面中。
导入公钥文件
收到文件后缀名为
.asc
的公钥文件。在资源管理器中双击打开公钥文件。
或者在 Kleopatra 中点击工具栏上的“导入”按钮,然后在“选择证书文件”对话框中选择公钥文件。
点击“认证”按钮。
在认证证书界面上,将显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。
- 如果一致,则进入下一步。
- 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站 或 一次性匿名聊天室 传递指纹,并通过原平台发送链接。
在“认证方式”下拉框中选择自己的私钥,然后点击“认证”按钮。
提示:
Kleopatra 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
已导入的公钥会显示在 Kleopatra 的证书管理界面中。
加密消息
两种方式均建议掌握。
加密消息文本并发送
确保已导入对方的公钥。
进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。
在选项卡下方的文本框中输入要发送的文本。
切换到“收件人”选项卡。
在“签名身份”下拉框中选择自己的私钥,用于标识发件人的身份。
点击“为他人加密”输入框右侧的
按钮,选择所有收件人(可多选)。所选收件人的公钥将用于加密。清空输入框可取消选择。
如果输入框下方报错“错误:未找到匹配的证书或证书组”,则在确保对应收件人的公钥已导入后,清空输入框并重新选择收件人可修复报错。
点击“签名/加密记事本内容”按钮。
在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
加密完成后,密文文本会取代原文本显示在“记事本”选项卡下的输入框中。
发送密文文本给对方。
可复制密文文本到 文本分享网站 为其创建分享链接,再将链接发给对方。
加密消息文件并发送
确保已导入对方的公钥。
在资源管理器中右击要发送的文件,然后点击“Sign and encrypt”(如果找不到该菜单,请检查 GpgEX 是否安装)。
或者在 Kleopatra 中,点击工具栏上的“签名/加密”按钮,然后在“选择一个或多个要签名/加密的文件”对话框中选择要发送的文件。
在“签名/加密文件”对话框的“签名身份”下拉框中,选择自己的私钥,用于标识发件人的身份。
点击"为他人加密"输入框右侧的
按钮,选择所有收件人(可多选)。所选收件人的公钥将用于加密。清空输入框可取消选择。
如果输入框下方报错“错误:未找到匹配的证书或证书组”,则在确保对应收件人的公钥已导入后,清空输入框并重新选择收件人可修复报错。
在“输出文件或文件夹”文本框中设置密文文件的保存位置以及文件名。
点击“签名/加密”按钮。
在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
加密完成得到密文文件。
发送密文文件给对方。
解密消息
两种方式均建议掌握。
解密消息文本
收到以
-----BEGIN PGP MESSAGE-----
开头的密文文本。可以通过文本首行的内容辨别公钥和密文:
- 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
- 密文文本首行的英文:BEGIN PGP MESSAGE
进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。
将密文文本粘贴到“记事本”选项卡下方的文本框中,然后点击“解密/验证记事本内容”按钮。
在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
解密得到的文本会取代先前的密文文本出现在“记事本”选项卡下的输入框中。
解密消息文件
收到文件后缀名为
.gpg
或.pgp
的密文文件。在资源管理器中双击密文文件。
若双击后未出现 Kleopatra 的界面,则右击密文文件,然后点击“Decrypt and verify”(如果找不到该菜单,请检查 GpgEX 是否安装,或在“More GpgEX Options”菜单里查找)。
或在 Kleopatra 中点击工具栏的“解密/校验”按钮,然后在弹出的对话框中选择密文文件。
在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。
点击“输出文件夹”输入框右侧的
按钮打开“选择文件夹”对话框,选择解密得到的文件的保存位置。
随后再点击“Save All”按钮。
如果软件询问是否以原始文件名保存,根据显示的文件名自行比较决定。原始文件名通常更为完整且含义清晰。(注:该界面上的“是,覆盖”为误译,实际是“是,另存为”)
解密得到的文件会被保存在此前指定的位置。
警告:
OpenKeychain 已经过时且停止维护,不建议再使用。推荐改用 PC 上的 Kleopatra。
OpenKeychain 在尝试解密较新版本 GPG 的密文时可能会发生错误。若坚持使用 OpenKeychain,则双方需要都使用该应用来创建密钥对和加解密消息。
OpenKeychain
本章将介绍 OpenKeychain 的安装与使用,包括:
- 创建 OpenPGP 密钥对
- 导出自己的公钥
- 导入并认证他人的公钥
- 加密文本或文件
- 解密文本或文件
完成本章后,建议继续阅读:
准备软件
浏览器打开 OpenKeychain 的 F-Droid 下载页面。
点击最新版本对应的“下载 APK”链接。
安装 APK。如果安装失败,可以尝试以下解决方法:
- 设置允许(应用)安装未知来源软件
- 退出操作系统账号登录
- 关闭相关的安全选项
创建密钥对
注意:
如果你是第一次打开 OpenKeychain,请从 第 2 步 开始看。
在 OpenKeychain 的密钥管理界面,点击右上角的三点按钮,然后选择“管理我的密钥”选项。
输入你的名字(不一定要用真实姓名),确保收到公钥的人能通过其辨认出密钥所有者的身份。
输入你的电子邮件地址(不一定要用实际存在的电子邮件地址),确保收到公钥的人能通过其辨认出密钥所有者的身份。
如果该密钥对需要用于支持 OpenPGP 的在线服务,如电子邮箱、在线 Git 托管服务(如 GitHub)、公钥服务器等,则必须填写能够联系到你的电子邮件地址。
特殊的情况是 GitHub 如果启用了“Keep my email addresses private”(不公开我的电子邮件地址),则 Git 提交和 GPG 公钥需要使用 GitHub 提供的带有
no-reply
的电子邮件地址才能让该设置生效。详见 这篇 GitHub 帮助文档第 8 条的 Note。点击右上角的三点按钮,然后选择“更改密钥配置”选项。
选择“变更密码”选项。
为新创建的密钥对设置 私钥密码。在“密码”和“重复密码”输入框中输入相同的密码,然后点击“OK”按钮。
重要说明:
此处设置的私钥密码仅用于加密私钥本身;在使用私钥(如解密消息)时,OpenKeychain 会要求用户输入该密码来临时解密私钥。这样做的目的是提高安全性,即使私钥意外泄露,也会因为缺少私钥密码而无法使用。
因此私钥密码和私钥都很重要,只能自己持有,不能公开;且密码应有一定的复杂度,不应该和其他密码相同。点击右上角的“保存”按钮。
点击右下角的“创建密钥”按钮。
创建好的密钥对会显示在 OpenKeychain 的密钥管理界面中。
目前为止,你可能在 OpenKeychain 的界面中遇到了这三种相似而模糊的表达,以下是简单的辨析:
- 密钥对:由公钥与配对的私钥组成。
- 证书:由密钥对或者单独的公钥,再加上额外的元数据(如作为身份信息的名字和电子邮件地址等)组成。
- 密钥:通常代指证书;在对称加密中也可以指对称密钥(密码)。
为了简单起见,在实际使用中,你可以结合上下文理解相应术语的含义,不需要过于纠结其精确定义。
导出公钥
公钥推荐导出为 文本形式(用于交流和发布),也可以导出为 文件形式(用于存储和归档)。
两种方式均建议掌握。
导出公钥文本
导出公钥
进入 OpenKeychain 的密钥管理界面,选择需要导出的公钥。
进入密钥概览界面。点击右上角的三点按钮,然后选择“更多密钥详情”选项。
进入密钥详情界面。切换到“分享”选项卡。
每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。
点击下方“分享到...”右边的 第二个图标,复制公钥文本到剪贴板。
分享公钥
发送公钥文本给对方。
可以复制公钥文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。
等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。
- 如果一致,说明公钥发送成功,应告知对方校验结果。
- 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
导出并分享公钥文件
导出公钥
进入 OpenKeychain 的密钥管理界面,选择需要导出的公钥。
进入密钥概览界面。点击右上角的三点按钮,然后选择“更多密钥详情”选项。
进入密钥详情界面。切换到“分享”选项卡。
每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。
点击下方“分享到...”右边的 第一个图标,选择导出方式。
分享公钥
发送公钥文件给对方。
等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。
- 如果一致,说明公钥发送成功,应告知对方校验结果。
- 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
导入公钥
两种方式均建议掌握。
导入公钥文本
收到以
-----BEGIN PGP PUBLIC KEY BLOCK-----
开头的公钥文本。可以通过文本首行的内容辨别公钥和密文:
- 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
- 密文文本首行的英文:BEGIN PGP MESSAGE
选择以下一种方式让 OpenKeychain 读取公钥文本。
方式 1:分享公钥文本到 OpenKeychain
部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享公钥文件到 OpenKeychain 让其读取。
参考步骤:
选中全部公钥文本。
点击文本周围出现的工具栏上的分享按钮。
选择“OpenKeychain:导入密钥”选项和“仅此一次”选项(如果有该项)。
方式 2:自动从剪贴板读取公钥文本
复制公钥文本,然后打开 OpenKeychain 进入密钥管理界面。
界面下方出现“在剪贴板中发现密钥数据”的提示,点击右侧的“查看”按钮。
方式 3:手动指定从剪贴板读取公钥文本
复制公钥文本,然后打开 OpenKeychain 进入密钥管理界面。
点击界面右下角的圆形“+”图标,然后选择“从文件导入”选项。
进入导入密钥界面。点击右上角的三点图标,然后选择“从剪贴板读取”选项。
点击“导入”按钮。
回到密钥管理界面,选择刚导入的公钥。
进入密钥概览界面。点击右上角的三点按钮,然后选择“通过指纹确认”选项。
将界面上显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。
- 如果一致,则选择“密钥指纹符合”选项。
- 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站 或 一次性匿名聊天室 传递指纹,并通过原平台发送链接。
在“我的密钥”下拉框中选择自己的私钥,然后点击“确认密钥”按钮。
在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。
提示:
OpenKeychain 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。已导入的公钥会显示在 OpenKeychain 的密钥管理界面中。
导入公钥文件
收到文件后缀名为
.asc
的公钥文件。选择以下一种方式让 OpenKeychain 读取公钥文件。
方式 1:直接打开公钥文件
点击打开公钥文件,然后选择“OpenKeychain:导入密钥”选项和“仅此一次”选项(如果有该项)。
方式 2:手动指定并读取公钥文件
打开 OpenKeychain 进入密钥管理界面。
点击界面右下角的圆形“+”图标,然后选择“从文件导入”选项。
点击浏览公钥文件按钮,然后选择要导入的公钥文件。
点击“导入”按钮。
回到密钥管理界面,选择刚导入的公钥。
进入密钥概览界面。点击右上角的三点按钮,然后选择“通过指纹确认”选项。
将界面上显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。
- 如果一致,则选择“密钥指纹符合”选项。
- 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。
可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站 或 一次性匿名聊天室 传递指纹,并通过原平台发送链接。
在“我的密钥”下拉框中选择自己的私钥,然后点击“确认密钥”按钮。
在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。
提示:
OpenKeychain 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。已导入的公钥会显示在 OpenKeychain 的密钥管理界面中。
加密消息
两种方式均建议掌握。
加密消息文本并发送
确保已导入对方的公钥。
选择以下一种方式进入 OpenKeychain 的加密文本界面。
方式 1:从密钥概览界面进入
进入 OpenKeychain 的密钥管理界面,选择收件人的密钥。
点击加密文本按钮(图中的 2 处)。
方式 2:从加密/解密界面进入
打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。
选择“加密/解密”选项。
选择“加密文本”选项。
方式 3:分享要发送的文本到 OpenKeychain
部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享要发送的文本到 OpenKeychain 进行加密。
参考步骤:
选中全部要发送的文本。
点击文本周围出现的工具栏上的分享按钮。
选择“OpenKeychain:加密”选项和“仅此一次”选项(如果有该项)。
进入加密文本界面。
在图中“1”处的输入框中键入收件人的名字或电子邮件地址来选择所有收件人(可多选)。所选收件人的公钥将用于加密。
在图中“2”处的下拉框中选择自己的私钥,用于标识发件人的身份。
在图中“3”处的输入框中输入要发送的文本。
点击图中“4”处的按钮可加密文本并复制密文到剪贴板。
在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。
加密完成后,密文文本会被复制到剪贴板,然后将剪贴板的密文文本发送给对方。
可粘贴密文文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。
加密消息文件并发送
确保已导入对方的公钥。
选择以下一种方式进入 OpenKeychain 的加密文件界面。
方式 1:从密钥概览界面进入
进入 OpenKeychain 的密钥管理界面,选择收件人的密钥。
点击加密文件按钮(图中的 1 处)。
方式 2:从加密/解密界面进入
打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。
选择“加密/解密”选项。
选择“加密文件”选项。
方式 3:分享要发送的文件到 OpenKeychain
在文件管理器(或要发送的文件所在的应用)中对文件选择“分享”相关的操作。
选择“OpenKeychain:加密”选项和“仅此一次”选项(如果有该项)。
进入加密文件界面。
在图中“1”处的输入框中键入收件人的名字或电子邮件地址来选择所有收件人(可多选)。所选收件人的公钥将用于加密。
在图中“2”处的下拉框中选择自己的私钥,用于标识发件人的身份。
在图中“3”处的列表中选择要发送的文件。建议只选择一个文件,选择多个可能会加密失败。如需分享多个文件,可以手动将多个文件打包为一个文件再加密。
点击图中“4”处或“5”处的按钮。“4”处的按钮可加密文件为密文文件并保存,“5”处的按钮可加密文件为密文文件并分享到其他应用。
在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。
密文文件会根据此前所选操作,保存至指定位置或分享至其他应用。
解密消息
两种方式均建议掌握。
解密消息文本
收到以
-----BEGIN PGP MESSAGE-----
开头的密文文本。可以通过文本首行的内容辨别公钥和密文:
- 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
- 密文文本首行的英文:BEGIN PGP MESSAGE
选择以下一种方式让 OpenKeychain 读取密文文本。
方式 1:分享密文文本到 OpenKeychain
部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享密文文本到 OpenKeychain 进行解密。
参考步骤:
选中密文文本。
点击文本周围出现的工具栏上的分享按钮。
选择“OpenKeychain:解密”选项和“仅此一次”选项(如果有该项)。
方式 2:手动指定从剪贴板读取
打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。
选择“加密/解密”选项。
选择“从剪贴板导入”选项。
在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。
解密得到的文本会显示在新页面。
解密消息文件
收到文件后缀名为
.gpg
或.pgp
的密文文件。选择以下一种方式让 OpenKeychain 读取密文文件。
方式 1:直接打开密文文件
点击打开密文文件,然后选择“OpenKeychain:解密”选项和“仅此一次”选项(如果有该项)。
方式 2:手动指定密文文件
打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。
选择“加密/解密”选项。
选择“从文件导入”选项。
选择需要解密的密文文件。
在“密码”输入框中输入先前设置的密码,然后点击“解锁”按钮。
分享或保存解密得到的文件到指定位置。
文本分享网站(Pastebin)
发送大段的文本(如公钥、密文等)时,推荐的方式是复制文本到文本分享网站为其创建分享链接,再将链接发给对方。
这样做的好处有:
- 避免因文本过长导致消息发送失败,或刷屏影响观感。
- 降低消息内容在聊天平台被记录、审查或篡改的风险。
以下推荐一些免登录的文本分享网站:
- Pastebin:支持长期保存、阅后即焚与设置过期时间,删除需要登录;每天创建分享的数量有限制。
- Paste2:不支持删除。
- Paste.ee:支持长期保存、阅后即焚与设置过期时间;不支持删除。
- uPaste:固定 1 小时过期;不支持删除。
- Hastebin:不支持删除。
- OneTimeSceret:仅支持阅后即焚。
- Pastebin Worker:支持文本与文件;支持设置过期时间,支持更新与删除。若查看分享内容时出现错误,可尝试升级或更换浏览器1。
由于网站使用了
Response.bytes()
API,浏览器(或其内核)版本需不低于 Chromium 132 或 Firefox 128 等。 ↩
即时通信平台
以下是几款相对安全的即时通信平台,可用于交换公钥、传输密文或临时沟通等不方便手动加密的场景:
- hack.chat:匿名、无记录的临时网页文本聊天室。
- chocoChat:匿名网页聊天室,支持文本与图片;会保留消息,支持手动删除。
- 十条:匿名网页聊天室,支持文本、图片与语音;聊天室仅保留最新 10 条消息,不支持手动删除。
- Delta Chat:基于电子邮件的跨平台端到端加密聊天应用;官方服务器仅需昵称即可注册,云端仅短期记录消息。
- Telegram:功能丰富、用户广泛;支持长期保存聊天记录,但注册流程相对繁琐。
- Element:基于 Matrix 协议的端到端加密聊天应用,提供前向安全性。
安全与保密意识
安全与保密没有绝对的标准,每个人面临的风险都不尽相同。以下是作者基于个人的安全标准提出的主观建议,请根据自身的实际情况,评估面临的风险(即“威胁模型”)和愿意付出的精力来作出决定。
建议加密的内容:
建议养成的习惯:
- 始终禁止输入法联网3,并避免使用国产输入法。
- 使用翻墙或加密软件时,避免同时(在前台或后台)运行国产的软件或游戏(如国产浏览器、QQ、360、WPS、哔哩哔哩和原神等)。
必须遵守的安全底线:
- 绝对禁止 公开私钥或私钥密码。
违反上述建议可能会导致被和谐和查水表。通过任何平台发送的内容,都有可能被识别记录,以供审查和取证。
工作场所不宜(Not Safe/Suitable For Work),指裸露、暴力、色情或冒犯等不适宜公众场合的内容。 ↩
包括对称与非对称加密中的密钥。若首次交换公钥时没有可用的加密方式,请确保通过与传输公钥时不同的另一渠道核对指纹,以验证公钥的完整性。 ↩
所有联网渠道,在移动端通常包括 WLAN 和移动数据网络。 ↩
参考资料
中文写作风格
Markdown 教程
非对称加密
- 黑客能否盗取微信和QQ中的消息?安全的给小姐姐写信的姿势是什么?HTTPS是怎么回事儿?Anduin讲解信息安全之内容传输安全
- Public-key cryptography
- Pretty Good Privacy
- GNU Privacy Guard
- OpenPGP
- GPG入门教程(作者:阮一峰)