Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

教程版本: v2.1.0-preview-101-gcaf7ae2

本教程主要面向无技术背景的初学者,讲解 非对称加密的基本概念和流程,并为非对称加密软件 KleopatraOpenKeychain 提供对应的图文使用教程与技巧。

本教程中 蓝色的文字 为超链接,可以 点击跳转 到对应的章节或者外部页面。

为了安全起见,在对教程内容的阅读与实践中,请确保完整理解并执行所有步骤。对于未能完全理解其含义和必要性的步骤,也请尽可能执行,而非直接跳过


本教程内容以 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

  1. 浏览器打开 Gpg4win 下载页面

  2. 选择捐赠金额后下载安装包。若不捐赠,选择“$0”,再点击 “Download” 按钮直接下载。

    不捐赠直接下载

  3. 以管理员权限运行安装包。

  4. 点击“下一步”按钮,进入选择组件界面。

    选择组件

  5. 勾选加密软件 Kleopatra,再按需勾选其他要安装的组件:

    • GpgEX在资源管理器的右键菜单中提供加解密等功能的快捷入口,推荐安装
    • GpgOL:电子邮件客户端 Outlook 的插件,为其增加 OpenPGP 支持。
    • Okular:PDF 阅读器,支持 PDF 签名与签名校验。
  6. 点击“下一步”按钮,按照界面提示完成后续步骤,直至完成软件安装。

其他平台 (Linux, BSD 等)

请优先使用发行版所提供的包管理器进行安装。

创建密钥对

  1. 打开 Kleopatra。

  2. 打开“文件”菜单,然后选择“创建 OpenPGP 密钥对”。

    创建 OpenPGP 密钥对菜单项

  3. 输入你的名字和电子邮件地址(不一定要用真实姓名和实际存在的电子邮件地址),确保收到公钥的人能通过其辨认出密钥所有者的身份。

    如果该密钥对需要用于支持 OpenPGP 的在线服务,如电子邮箱、在线 Git 托管服务(如 GitHub)、公钥服务器等,则必须填写能够联系到你的电子邮件地址。

    特殊的情况是如果 GitHub 账户启用了“Keep my email addresses private”(不公开我的电子邮件地址),则 Git 提交和 GPG 公钥需要使用 GitHub 提供的带有 no-reply 的电子邮件地址。详见 这篇 GitHub 帮助文档第 8 条的 Note

    名字和电子邮件地址

  4. 勾选“使用密码句保护生成的密钥”选项。

  5. 点击“OK”按钮开始创建密钥对。

  6. 为新创建的密钥对设置 私钥密码。在“Passphrase”和“Repeat”输入框中输入相同的密码,然后点击“OK”按钮。

    重要说明:
    此处设置的私钥密码仅用于加密私钥本身;在使用私钥(如解密消息)时,Kleopatra 会要求用户输入该密码来临时解密私钥。这样做的目的是提高安全性,即使私钥意外泄露,也会因为缺少私钥密码而无法使用。
    因此私钥密码和私钥都很重要,只能自己持有,不能公开;且密码应有一定的复杂度,不应该和其他密码相同。

    设置私钥密码

  7. 创建好的密钥对会显示在 Kleopatra 的证书管理界面中。


目前为止,你可能在 Kleopatra 的界面中遇到了这三种相似而模糊的表达,以下是简单的辨析:

  • 密钥对:由公钥与配对的私钥组成。
  • 证书:由密钥对或者单独的公钥,再加上额外的元数据(如作为身份信息的名字和电子邮件地址等)组成。
  • 密钥:通常代指证书;在对称加密中也可以指对称密钥(密码)。

为了简单起见,在实际使用中,你可以结合上下文理解相应术语的含义,不需要过于纠结其精确定义。

导出公钥

公钥推荐导出为 文本形式(用于交流和发布),也可以导出为 文件形式(用于存储和归档)。

两种方式均建议掌握。

导出公钥文本

本节介绍 导出公钥分享公钥 的方法。

导出公钥

  1. 进入 Kleopatra 的证书管理界面,双击 需要导出的公钥。

    证书列表

  2. 进入证书细节界面,通过截图等方式记录指纹,用于后续的验证。

    每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。

    证书细节

  3. 点击“导出”按钮,公钥文本会显示在导出界面的文本框中。

    公钥文本

分享公钥

  1. 发送公钥文本给对方。

    可以复制公钥文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。

  2. 等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。

    • 如果一致,说明公钥发送成功,应告知对方校验结果。
    • 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

导出公钥文件

本节介绍 导出公钥分享公钥 的方法。

导出公钥

  1. 进入 Kleopatra 的证书管理界面,选择需要导出的公钥,然后点击工具栏上的“导出”按钮。

    导出公钥按钮

  2. 选择存储公钥的位置,导出后缀名为 .asc 的公钥文件。

分享公钥

  1. 发送公钥文件给对方。

  2. 回到 Kleopatra 的证书管理界面,双击 需要导出的公钥。

  3. 进入证书细节界面,通过截图等方式记录指纹,用于后续的验证。

    每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。

    证书细节

  4. 等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。

    • 如果一致,说明公钥发送成功,应告知对方校验结果。
    • 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

导入公钥

本章介绍如何导入 公钥文本公钥文件

两种方式均建议掌握。

导入公钥文本

  1. 收到以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头的公钥文本。

    可以通过文本首行的内容辨别公钥和密文:

    • 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
    • 密文文本首行的英文:BEGIN PGP MESSAGE

  2. 进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。

    记事本

  3. 将公钥文本复制到“记事本”选项卡下方的文本框中,然后点击“导入记事本”按钮。

    粘贴公钥和导入记事本

  4. 点击“认证”按钮。

    开始认证公钥

  5. 在认证证书界面上,将显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。

    • 如果一致,则进入下一步。
    • 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

    可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站一次性匿名聊天室 传递指纹,并通过原平台发送链接。

    检查指纹

  6. 在“认证方式”下拉框中选择自己的私钥,然后点击“认证”按钮。

    认证公钥

  7. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    提示:
    Kleopatra 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。

    输入私钥密码

  8. 已导入的公钥会显示在 Kleopatra 的证书管理界面中。

导入公钥文件

  1. 收到文件后缀名为 .asc 的公钥文件。

  2. 在资源管理器中双击打开公钥文件。

    或者在 Kleopatra 中点击工具栏上的“导入”按钮,然后在“选择证书文件”对话框中选择公钥文件。

    导入公钥按钮

  3. 点击“认证”按钮。

    开始认证公钥

  4. 在认证证书界面上,将显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。

    • 如果一致,则进入下一步。
    • 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

    可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站一次性匿名聊天室 传递指纹,并通过原平台发送链接。

    检查指纹

  5. 在“认证方式”下拉框中选择自己的私钥,然后点击“认证”按钮。

    提示:
    Kleopatra 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。

    认证公钥

  6. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    输入私钥密码

  7. 已导入的公钥会显示在 Kleopatra 的证书管理界面中。

加密消息

本章介绍如何加密 文本文件

两种方式均建议掌握。

加密消息文本并发送

  1. 确保已导入对方的公钥。

  2. 进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。

    记事本

  3. 在选项卡下方的文本框中输入要发送的文本。

  4. 切换到“收件人”选项卡。

    收件人

  5. 在“签名身份”下拉框中选择自己的私钥,用于标识发件人的身份。

  6. 点击“为他人加密”输入框右侧的 选择证书按钮 按钮,选择所有收件人(可多选)。所选收件人的公钥将用于加密。清空输入框可取消选择。

    如果输入框下方报错“错误:未找到匹配的证书或证书组”,则在确保对应收件人的公钥已导入后,清空输入框并重新选择收件人可修复报错。

  7. 点击“签名/加密记事本内容”按钮。

  8. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    输入私钥密码

  9. 加密完成后,密文文本会取代原文本显示在“记事本”选项卡下的输入框中。

    密文文本

  10. 发送密文文本给对方。

    可复制密文文本到 文本分享网站 为其创建分享链接,再将链接发给对方。

加密消息文件并发送

  1. 确保已导入对方的公钥。

  2. 在资源管理器中右击要发送的文件,然后点击“Sign and encrypt”(如果找不到该菜单,请检查 GpgEX 是否安装)。

    或者在 Kleopatra 中,点击工具栏上的“签名/加密”按钮,然后在“选择一个或多个要签名/加密的文件”对话框中选择要发送的文件。

    签名/加密按钮

  3. 在“签名/加密文件”对话框的“签名身份”下拉框中,选择自己的私钥,用于标识发件人的身份。

    签名/加密文件对话框

  4. 点击"为他人加密"输入框右侧的 选择证书按钮 按钮,选择所有收件人(可多选)。所选收件人的公钥将用于加密。清空输入框可取消选择。

    如果输入框下方报错“错误:未找到匹配的证书或证书组”,则在确保对应收件人的公钥已导入后,清空输入框并重新选择收件人可修复报错。

  5. 在“输出文件或文件夹”文本框中设置密文文件的保存位置以及文件名。

  6. 点击“签名/加密”按钮。

  7. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    输入私钥密码

  8. 加密完成得到密文文件。

  9. 发送密文文件给对方。

解密消息

本章介绍如何解密 密文文本密文文件

两种方式均建议掌握。

解密消息文本

  1. 收到以 -----BEGIN PGP MESSAGE----- 开头的密文文本。

    可以通过文本首行的内容辨别公钥和密文:

    • 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
    • 密文文本首行的英文:BEGIN PGP MESSAGE

  2. 进入 Kleopatra 的记事本界面,并切换到“记事本”选项卡。

    记事本

  3. 将密文文本粘贴到“记事本”选项卡下方的文本框中,然后点击“解密/验证记事本内容”按钮。

    解密密文文本

  4. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    输入私钥密码

  5. 解密得到的文本会取代先前的密文文本出现在“记事本”选项卡下的输入框中。

    文本解密结果

解密消息文件

  1. 收到文件后缀名为 .gpg.pgp 的密文文件。

  2. 在资源管理器中双击密文文件。

    若双击后未出现 Kleopatra 的界面,则右击密文文件,然后点击“Decrypt and verify”(如果找不到该菜单,请检查 GpgEX 是否安装,或在“More GpgEX Options”菜单里查找)。

    或在 Kleopatra 中点击工具栏的“解密/校验”按钮,然后在弹出的对话框中选择密文文件。

    解密/校验按钮

  3. 在“Passphrase”输入框中输入私钥密码,然后点击“OK”按钮。

    输入私钥密码

  4. 点击“输出文件夹”输入框右侧的 设置输出路径按钮 按钮打开“选择文件夹”对话框,选择解密得到的文件的保存位置。

    随后再点击“Save All”按钮。

    解密的文件

  5. 如果软件询问是否以原始文件名保存,根据显示的文件名自行比较决定。原始文件名通常更为完整且含义清晰。(注:该界面上的“是,覆盖”为误译,实际是“是,另存为”)

    是否原始文件名保存

  6. 解密得到的文件会被保存在此前指定的位置。

警告:

OpenKeychain 已经过时且停止维护,不建议再使用。推荐改用 PC 上的 Kleopatra。

OpenKeychain 在尝试解密较新版本 GPG 的密文时可能会发生错误。若坚持使用 OpenKeychain,则双方需要都使用该应用来创建密钥对和加解密消息。

OpenKeychain

本章将介绍 OpenKeychain 的安装与使用,包括:

  • 创建 OpenPGP 密钥对
  • 导出自己的公钥
  • 导入并认证他人的公钥
  • 加密文本或文件
  • 解密文本或文件

完成本章后,建议继续阅读:

准备软件

  1. 浏览器打开 OpenKeychain 的 F-Droid 下载页面

  2. 点击最新版本对应的“下载 APK”链接。

    下载 APK

  3. 安装 APK。如果安装失败,可以尝试以下解决方法:

    • 设置允许(应用)安装未知来源软件
    • 退出操作系统账号登录
    • 关闭相关的安全选项

创建密钥对

注意:
如果你是第一次打开 OpenKeychain,请从 第 2 步 开始看。

  1. 在 OpenKeychain 的密钥管理界面,点击右上角的三点按钮,然后选择“管理我的密钥”选项。

    密钥管理界面菜单

  2. 选择“创建密钥”选项。

    管理我的密钥

  3. 输入你的名字(不一定要用真实姓名),确保收到公钥的人能通过其辨认出密钥所有者的身份。

    名字

  4. 输入你的电子邮件地址(不一定要用实际存在的电子邮件地址),确保收到公钥的人能通过其辨认出密钥所有者的身份。

    如果该密钥对需要用于支持 OpenPGP 的在线服务,如电子邮箱、在线 Git 托管服务(如 GitHub)、公钥服务器等,则必须填写能够联系到你的电子邮件地址。

    特殊的情况是 GitHub 如果启用了“Keep my email addresses private”(不公开我的电子邮件地址),则 Git 提交和 GPG 公钥需要使用 GitHub 提供的带有 no-reply 的电子邮件地址才能让该设置生效。详见 这篇 GitHub 帮助文档第 8 条的 Note

    电子邮件地址

  5. 点击右上角的三点按钮,然后选择“更改密钥配置”选项。

    更改密钥配置

  6. 选择“变更密码”选项。

  7. 为新创建的密钥对设置 私钥密码。在“密码”和“重复密码”输入框中输入相同的密码,然后点击“OK”按钮。

    重要说明:
    此处设置的私钥密码仅用于加密私钥本身;在使用私钥(如解密消息)时,OpenKeychain 会要求用户输入该密码来临时解密私钥。这样做的目的是提高安全性,即使私钥意外泄露,也会因为缺少私钥密码而无法使用。
    因此私钥密码和私钥都很重要,只能自己持有,不能公开;且密码应有一定的复杂度,不应该和其他密码相同。

    设置私钥密码

  8. 点击右上角的“保存”按钮。

    保存密钥设置

  9. 点击右下角的“创建密钥”按钮。

    创建密钥

  10. 创建好的密钥对会显示在 OpenKeychain 的密钥管理界面中。


目前为止,你可能在 OpenKeychain 的界面中遇到了这三种相似而模糊的表达,以下是简单的辨析:

  • 密钥对:由公钥与配对的私钥组成。
  • 证书:由密钥对或者单独的公钥,再加上额外的元数据(如作为身份信息的名字和电子邮件地址等)组成。
  • 密钥:通常代指证书;在对称加密中也可以指对称密钥(密码)。

为了简单起见,在实际使用中,你可以结合上下文理解相应术语的含义,不需要过于纠结其精确定义。

导出公钥

公钥推荐导出为 文本形式(用于交流和发布),也可以导出为 文件形式(用于存储和归档)。

两种方式均建议掌握。

导出公钥文本

本节介绍 导出公钥分享公钥 的方法。

导出公钥

  1. 进入 OpenKeychain 的密钥管理界面,选择需要导出的公钥。

    密钥列表

  2. 进入密钥概览界面。点击右上角的三点按钮,然后选择“更多密钥详情”选项。

    更多密钥详情

  3. 进入密钥详情界面。切换到“分享”选项卡。

  4. 通过截图等方式记录界面上的指纹,用于后续的验证。

    每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。

    密钥详情界面

  5. 点击下方“分享到...”右边的 第二个图标,复制公钥文本到剪贴板。

分享公钥

  1. 发送公钥文本给对方。

    可以复制公钥文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。

  2. 等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。

    • 如果一致,说明公钥发送成功,应告知对方校验结果。
    • 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

导出并分享公钥文件

本节介绍 导出公钥分享公钥 的方法。

导出公钥

  1. 进入 OpenKeychain 的密钥管理界面,选择需要导出的公钥。

    密钥列表

  2. 进入密钥概览界面。点击右上角的三点按钮,然后选择“更多密钥详情”选项。

    更多密钥详情

  3. 进入密钥详情界面。切换到“分享”选项卡。

  4. 通过截图等方式记录界面上的指纹,用于后续的验证。

    每个公钥都有 唯一对应 的指纹,可用于验证公钥在发送过程中是否被篡改。

    密钥详情界面

  5. 点击下方“分享到...”右边的 第一个图标,选择导出方式。

分享公钥

  1. 发送公钥文件给对方。

  2. 等待对方发来 导入的公钥的指纹,并校验其与 实际的公钥指纹 是否一致。

    • 如果一致,说明公钥发送成功,应告知对方校验结果。
    • 如果不一致,表明对方收到的公钥可能被篡改,应排查操作问题并重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

导入公钥

本章介绍如何导入 公钥文本公钥文件

两种方式均建议掌握。

导入公钥文本

  1. 收到以 -----BEGIN PGP PUBLIC KEY BLOCK----- 开头的公钥文本。

    可以通过文本首行的内容辨别公钥和密文:

    • 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
    • 密文文本首行的英文:BEGIN PGP MESSAGE

  2. 选择以下一种方式让 OpenKeychain 读取公钥文本。

    方式 1:分享公钥文本到 OpenKeychain

    部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享公钥文件到 OpenKeychain 让其读取。

    参考步骤:

    1. 选中全部公钥文本。

    2. 点击文本周围出现的工具栏上的分享按钮。

    3. 选择“OpenKeychain:导入密钥”选项和“仅此一次”选项(如果有该项)。

      使用 OpenKeychain 处理公钥

    方式 2:自动从剪贴板读取公钥文本

    1. 复制公钥文本,然后打开 OpenKeychain 进入密钥管理界面。

    2. 界面下方出现“在剪贴板中发现密钥数据”的提示,点击右侧的“查看”按钮。

      自动检测剪贴板的公钥文本

    方式 3:手动指定从剪贴板读取公钥文本

    1. 复制公钥文本,然后打开 OpenKeychain 进入密钥管理界面。

    2. 点击界面右下角的圆形“+”图标,然后选择“从文件导入”选项。

      从文件导入

    3. 进入导入密钥界面。点击右上角的三点图标,然后选择“从剪贴板读取”选项。

      从剪贴板读取

  3. 点击“导入”按钮。

    导入的公钥的信息

  4. 回到密钥管理界面,选择刚导入的公钥。

    点击导入的公钥

  5. 进入密钥概览界面。点击右上角的三点按钮,然后选择“通过指纹确认”选项。

    点击通过指纹确认

  6. 将界面上显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。

    • 如果一致,则选择“密钥指纹符合”选项。
    • 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

    可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站一次性匿名聊天室 传递指纹,并通过原平台发送链接。

    确认指纹

  7. 在“我的密钥”下拉框中选择自己的私钥,然后点击“确认密钥”按钮。

    认证公钥

  8. 在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。

    提示:
    OpenKeychain 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。

    输入私钥密码

  9. 已导入的公钥会显示在 OpenKeychain 的密钥管理界面中。

导入公钥文件

  1. 收到文件后缀名为 .asc 的公钥文件。

  2. 选择以下一种方式让 OpenKeychain 读取公钥文件。

    方式 1:直接打开公钥文件

    点击打开公钥文件,然后选择“OpenKeychain:导入密钥”选项和“仅此一次”选项(如果有该项)。

    使用 OpenKeychain 处理公钥

    方式 2:手动指定并读取公钥文件

    1. 打开 OpenKeychain 进入密钥管理界面。

    2. 点击界面右下角的圆形“+”图标,然后选择“从文件导入”选项。

      从文件导入

    3. 点击浏览公钥文件按钮,然后选择要导入的公钥文件。

      浏览公钥文件按钮

  3. 点击“导入”按钮。

    导入的公钥的信息

  4. 回到密钥管理界面,选择刚导入的公钥。

    点击导入的公钥

  5. 进入密钥概览界面。点击右上角的三点按钮,然后选择“通过指纹确认”选项。

    点击通过指纹确认

  6. 将界面上显示的指纹通过 与传输公钥时不同的渠道 发送给对方,并等待对方校验发送的指纹与预期公钥的指纹是否一致。

    • 如果一致,则选择“密钥指纹符合”选项。
    • 如果不一致,表明收到的公钥可能被篡改,应排查操作问题并要求对方重新发送公钥。若未发现问题,说明当前通信平台可能试图进行中间人攻击(MITM),应中止流程并停止使用该平台。

    可以通过线下交流、电子邮件、网站公示或游戏聊天等渠道发送指纹。若充分信任当前通信平台,也可通过 文本分享网站一次性匿名聊天室 传递指纹,并通过原平台发送链接。

    确认指纹

  7. 在“我的密钥”下拉框中选择自己的私钥,然后点击“确认密钥”按钮。

    认证公钥

  8. 在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。

    提示:
    OpenKeychain 会缓存正确的私钥密码(以及对称密钥),并在短时间内保持私钥的解锁状态。这段时间内,使用私钥时不需要重复输入私钥密码。

    输入私钥密码

  9. 已导入的公钥会显示在 OpenKeychain 的密钥管理界面中。

加密消息

本章介绍如何加密 文本文件

两种方式均建议掌握。

加密消息文本并发送

  1. 确保已导入对方的公钥。

  2. 选择以下一种方式进入 OpenKeychain 的加密文本界面。

    方式 1:从密钥概览界面进入

    1. 进入 OpenKeychain 的密钥管理界面,选择收件人的密钥。

    2. 点击加密文本按钮(图中的 2 处)。

      加密按钮

    方式 2:从加密/解密界面进入

    1. 打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。

    2. 选择“加密/解密”选项。

      加密/解密”

    3. 选择“加密文本”选项。

    方式 3:分享要发送的文本到 OpenKeychain

    部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享要发送的文本到 OpenKeychain 进行加密。

    参考步骤:

    1. 选中全部要发送的文本。

    2. 点击文本周围出现的工具栏上的分享按钮。

    3. 选择“OpenKeychain:加密”选项和“仅此一次”选项(如果有该项)。

      使用 OpenKeychain 处理消息或密文

  3. 进入加密文本界面。

    加密文本界面

  4. 在图中“1”处的输入框中键入收件人的名字或电子邮件地址来选择所有收件人(可多选)。所选收件人的公钥将用于加密。

  5. 在图中“2”处的下拉框中选择自己的私钥,用于标识发件人的身份。

  6. 在图中“3”处的输入框中输入要发送的文本。

  7. 点击图中“4”处的按钮可加密文本并复制密文到剪贴板。

  8. 在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。

    输入私钥密码

  9. 加密完成后,密文文本会被复制到剪贴板,然后将剪贴板的密文文本发送给对方。

    可粘贴密文文本到 文本分享网站 为其创建分享链接,再将链接发送给对方。

加密消息文件并发送

  1. 确保已导入对方的公钥。

  2. 选择以下一种方式进入 OpenKeychain 的加密文件界面。

    方式 1:从密钥概览界面进入

    1. 进入 OpenKeychain 的密钥管理界面,选择收件人的密钥。

    2. 点击加密文件按钮(图中的 1 处)。

      加密按钮

    方式 2:从加密/解密界面进入

    1. 打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。

    2. 选择“加密/解密”选项。

      加密/解密”

    3. 选择“加密文件”选项。

    方式 3:分享要发送的文件到 OpenKeychain

    1. 在文件管理器(或要发送的文件所在的应用)中对文件选择“分享”相关的操作。

    2. 选择“OpenKeychain:加密”选项和“仅此一次”选项(如果有该项)。

      使用 OpenKeychain 处理消息或密文

  3. 进入加密文件界面。

    加密文件界面

  4. 在图中“1”处的输入框中键入收件人的名字或电子邮件地址来选择所有收件人(可多选)。所选收件人的公钥将用于加密。

  5. 在图中“2”处的下拉框中选择自己的私钥,用于标识发件人的身份。

  6. 在图中“3”处的列表中选择要发送的文件。建议只选择一个文件,选择多个可能会加密失败。如需分享多个文件,可以手动将多个文件打包为一个文件再加密。

  7. 点击图中“4”处或“5”处的按钮。“4”处的按钮可加密文件为密文文件并保存,“5”处的按钮可加密文件为密文文件并分享到其他应用。

  8. 在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。

    输入私钥密码

  9. 密文文件会根据此前所选操作,保存至指定位置或分享至其他应用。

解密消息

本章介绍如何解密 密文文本密文文件

两种方式均建议掌握。

解密消息文本

  1. 收到以 -----BEGIN PGP MESSAGE----- 开头的密文文本。

    可以通过文本首行的内容辨别公钥和密文:

    • 公钥文本首行的英文:BEGIN PGP PUBLIC KEY BLOCK
    • 密文文本首行的英文:BEGIN PGP MESSAGE

  2. 选择以下一种方式让 OpenKeychain 读取密文文本。

    方式 1:分享密文文本到 OpenKeychain

    部分应用(如 Via 浏览器)支持分享文本到其他应用。利用此特性,分享密文文本到 OpenKeychain 进行解密。

    参考步骤:

    1. 选中密文文本。

    2. 点击文本周围出现的工具栏上的分享按钮。

    3. 选择“OpenKeychain:解密”选项和“仅此一次”选项(如果有该项)。

      使用 OpenKeychain 处理消息或密文

    方式 2:手动指定从剪贴板读取

    1. 打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。

    2. 选择“加密/解密”选项。

      加密/解密”

    3. 选择“从剪贴板导入”选项。

  3. 在“密码”输入框中输入私钥密码,然后点击“解锁”按钮。

    输入私钥密码

  4. 解密得到的文本会显示在新页面。

解密消息文件

  1. 收到文件后缀名为 .gpg.pgp 的密文文件。

  2. 选择以下一种方式让 OpenKeychain 读取密文文件。

    方式 1:直接打开密文文件

    点击打开密文文件,然后选择“OpenKeychain:解密”选项和“仅此一次”选项(如果有该项)。

    使用 OpenKeychain 处理消息或密文

    方式 2:手动指定密文文件

    1. 打开 OpenKeychain,从屏幕左侧向右滑动拉出侧边菜单。

    2. 选择“加密/解密”选项。

      加密/解密”

    3. 选择“从文件导入”选项。

    4. 选择需要解密的密文文件。

  3. 在“密码”输入框中输入先前设置的密码,然后点击“解锁”按钮。

    输入私钥密码

  4. 分享或保存解密得到的文件到指定位置。

文本分享网站(Pastebin)

发送大段的文本(如公钥、密文等)时,推荐的方式是复制文本到文本分享网站为其创建分享链接,再将链接发给对方。

这样做的好处有:

  • 避免因文本过长导致消息发送失败,或刷屏影响观感。
  • 降低消息内容在聊天平台被记录、审查或篡改的风险。

以下推荐一些免登录的文本分享网站:

  • Pastebin:支持长期保存、阅后即焚与设置过期时间,删除需要登录;每天创建分享的数量有限制。
  • Paste2:不支持删除。
  • Paste.ee:支持长期保存、阅后即焚与设置过期时间;不支持删除。
  • uPaste:固定 1 小时过期;不支持删除。
  • Hastebin:不支持删除。
  • OneTimeSceret:仅支持阅后即焚。
  • Pastebin Worker:支持文本与文件;支持设置过期时间,支持更新与删除。若查看分享内容时出现错误,可尝试升级或更换浏览器1

  1. 由于网站使用了 Response.bytes() API,浏览器(或其内核)版本需不低于 Chromium 132 或 Firefox 128 等。

即时通信平台

以下是几款相对安全的即时通信平台,可用于交换公钥、传输密文或临时沟通等不方便手动加密的场景:

  • hack.chat:匿名、无记录的临时网页文本聊天室。
  • chocoChat:匿名网页聊天室,支持文本与图片;会保留消息,支持手动删除。
  • 十条:匿名网页聊天室,支持文本、图片与语音;聊天室仅保留最新 10 条消息,不支持手动删除。
  • Delta Chat:基于电子邮件的跨平台端到端加密聊天应用;官方服务器仅需昵称即可注册,云端仅短期记录消息。
  • Telegram:功能丰富、用户广泛;支持长期保存聊天记录,但注册流程相对繁琐。
  • Element:基于 Matrix 协议的端到端加密聊天应用,提供前向安全性。

安全与保密意识

安全与保密没有绝对的标准,每个人面临的风险都不尽相同。以下是作者基于个人的安全标准提出的主观建议,请根据自身的实际情况,评估面临的风险(即“威胁模型”)和愿意付出的精力来作出决定。

建议加密的内容:

  • 涉及敏感主题的内容(如 NSFW1、政治、翻墙、加密方法等),包括 本教程 在内
  • 对他人已加密发送给你的内容的引用、讨论、转发和回复
  • 其他敏感信息(如账号密码、个人信息、密钥2 等)

建议养成的习惯:

  • 始终禁止输入法联网3,并避免使用国产输入法。
  • 使用翻墙或加密软件时,避免同时(在前台或后台)运行国产的软件或游戏(如国产浏览器、QQ、360、WPS、哔哩哔哩和原神等)。

必须遵守的安全底线:

  • 绝对禁止 公开私钥或私钥密码。

违反上述建议可能会导致被和谐和查水表。通过任何平台发送的内容,都有可能被识别记录,以供审查和取证。


  1. 工作场所不宜(Not Safe/Suitable For Work),指裸露、暴力、色情或冒犯等不适宜公众场合的内容。

  2. 包括对称与非对称加密中的密钥。若首次交换公钥时没有可用的加密方式,请确保通过与传输公钥时不同的另一渠道核对指纹,以验证公钥的完整性。

  3. 所有联网渠道,在移动端通常包括 WLAN 和移动数据网络。

参考资料

中文写作风格

Markdown 教程

非对称加密

Pastebin 收集

mdBook 与 GitHub Actions

语义化版本