将 OpenPGP 私钥导入 Proton Mail
- 阅读
- 4 分钟
- 类别
- 加密与密钥
Proton Mail 允许您将现有的 OpenPGP 私钥(或密钥)导入其加密生态系统中。这样您就可以继续使用这些密钥来签名和解密您的电子邮件。
出于安全和兼容性方面的考虑,您导入的密钥必须满足 Proton 的最低密钥要求。
如果您的密钥满足我们的最低要求,您应该可以直接将其导入。
如果您的密钥不满足我们的最低要求,您在尝试上传后会看到错误屏幕。该错误屏幕会说明密钥被拒绝的原因。我们提供修改密钥的指南,以便您可以导入密钥。
如何将 OpenPGP 密钥导入 Proton Mail
- 登录 Proton Mail 网页应用中的 Proton 帐户
- 点击设置 → 所有设置 → 加密与密钥 → 邮件加密密钥。
- 选择与相关密钥关联的电子邮件地址,点击显示 生成密钥的下拉菜单,然后点击 导入密钥。

完成!您现在可以在 Proton Mail 上使用您的 OpenPGP 私钥了。
如何修改您的 OpenPGP 密钥
如果您的密钥不满足我们的要求,您将无法导入密钥。
我们将介绍密钥被拒绝的最常见情形,并说明如何解决这些问题。
开始之前
如果您需要修改 OpenPGP 私钥才能将其上传到 Proton Mail,则必须在开始之前完成两个步骤:
- 下载并设置 GnuPG,然后导入您的密钥
- 在修改 OpenPGP 密钥之前先创建备份版本
设置 GnuPG 并导入您的密钥
在本指南中,我们全程使用 GnuPG(GNU Privacy Guard)工具来修改想要导入的私钥。
如果您尚未安装 GnuPG,请访问 https://gnupg.org/download/(新窗口) 查找适用于您设备的应用。
如果您想导入 Proton Mail 的密钥尚未导入 GnuPG,则需要使用以下命令进行导入:
gpg --import
以下大多数操作都将依赖于基于以下内容的交互式命令:
gpg --edit-key
重要提示:修改密钥之前请先备份
如果您尝试导入的私钥除 Proton 之外还用于其他应用,请务必在修改任何密钥之前创建备份副本。
如果您已将私钥导入 GnuPG,可以使用以下命令执行该操作:
gpg --armor --export-secret-keys > backup-key.asc
稍后您可以使用以下命令重新导入原始密钥:
gpg --import backup-key.asc
您的私钥被拒绝的原因
您的密钥设置了过期日期

这意味着什么
OpenPGP 密钥(和子密钥)可以设置过期日期,过期后,所有符合 OpenPGP 标准的库都会拒绝它们。
为确保您始终可以使用此 OpenPGP 密钥在 Proton Mail 上接收电子邮件,我们要求所有导入的密钥均不设置过期日期。
如果您尝试导入设置了过期日期的密钥,该密钥将被拒绝。
如何解决此问题
- 打开 GnuPG,运行以下命令检查密钥是否设置了过期日期:
gpg --list-keys
其中“用户 ID”是与密钥关联的电子邮件地址。
您看到的输出将类似于以下内容:
$ gpg --list-keys key.import.test@example.proton.mesec rsa3072 2022-09-21 [SC] [expires: 2024-09-20] C931E2A00A01EE4604049A4EA9C08446B1B88861uid Import key guide ssb rsa3072 2022-09-21 [E] [expires: 2024-09-20] |
在这里,我们可以看到主密钥和加密子密钥的过期日期均设置为 2024-09-20。
要导入 Proton Mail,我们需要编辑该密钥使其不设置过期日期。
2. 要编辑密钥,请运行以下命令:
gpg --edit-key
GnuPG 将进入交互模式。您需要逐一检查每个子密钥并编辑其过期日期。您可以使用以下命令选择子密钥:
key
然后使用以下命令将其过期日期设置为永不过期:
expire 0
3. 使用以下命令保存:
save
对于上述示例中的密钥,完整的操作记录将如下所示:
$ gpg --edit-key key.import.test@example.proton.megpg> key 0gpg> expire 0gpg> key 1gpg> expire 0gpg> save |
4. 使用以下命令检查您的密钥是否有过期日期:
gpg --list-keys
您看到的输出应类似于以下内容:
$ gpg --list-keys key.import.test@example.proton.mepub rsa3072 2022-09-21 [SC] C931E2A00A01EE4604049A4EA9C08446B1B88861uid [ultimate] Import key guide sub rsa3072 2022-09-21 [E] |
如上所示,原先列出过期日期的部分现在已为空白。
5. 现在我们可以使用以下命令从 GnuPG 导出密钥:
gpg --armor --export-secret-keys > exported-key.asc
您的密钥身份有误或存在多个身份

这意味着什么
OpenPGP 密钥可以与一个或多个指定了电子邮件地址的用户身份相关联。
在某些 Proton 服务中,该身份用于查找给定地址的密钥。
为确保您的密钥与预期地址相关联并避免与错误地址相关联,Proton 要求所有导入的密钥仅包含一个用户 ID,且该用户 ID 使用的电子邮件地址与密钥要导入到的 Proton 帐户的电子邮件地址相同。
如果您拥有多个 Proton Mail 地址,请确保将正确的密钥导入到正确的地址。

如果该地址拥有多个用户身份(其中一个可能与您要将密钥导入的 Proton Mail 地址相关联),也会出现此错误。在这种情况下,Proton 要求移除其他身份,因为对于外部地址(非 Proton Mail 地址),Proton 无法确认密钥是由该地址的所有者创建的。
如何解决此问题
- 打开 GnuPG 并 检查与您的密钥相关联的身份。您可以使用指纹选择您的密钥,指纹可在导入对话框中找到。 您可以运行以下命令来访问:
gpg --list-keys
您看到的输出将类似于以下内容:
$ gpg --list-keys 5980f1c63aeb7534f36c3c669b838c4a93779a09pub rsa3072 2022-10-11 [SC] 5980F1C63AEB7534F36C3C669B838C4A93779A09uid [ultimate] Some identity sub rsa3072 2022-10-11 [E] |
在这里我们可以看到,该密钥拥有一个与不受 Proton 管理的电子邮件地址相关联的用户身份。
2. 运行以下命令编辑密钥:
gpg --edit-key
然后使用以下命令创建新的用户身份:
adduid
指定名称和电子邮件地址(电子邮件地址必须是您要将密钥导入到的 Proton Mail 地址)。
现在您的密钥可能拥有多个身份。要继续操作,您必须移除与您的 Proton Mail 地址不相关联的身份。
3. 使用以下命令选择您要移除的其他用户身份:
uid
使用以下命令删除:
deluid
4. 使用以下命令保存更改:
save
对于上述示例中的密钥,完整的操作记录将如下所示:
$ gpg --edit-key 5980f1c63aeb7534f36c3c669b838c4a93779a09...gpg> adduidReal name: Import testEmail address: key.import.test@example.proton.meComment:...Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Osec rsa3072/9B838C4A93779A09 created: 2022-10-11 expires: never usage: SC trust: ultimate validity: ultimatessb rsa3072/07FE974BC493DC08 created: 2022-10-11 expires: never usage: E [ultimate] (1) Some identity [ unknown] (2). Import test gpg> uid 1...gpg> deluidReally remove this user ID? (y/N) y...gpg> save |
5. 使用以下命令检查密钥的用户身份:
gpg --list-keys
您看到的输出应类似于以下内容:
$gpg --list-keys 5980f1c63aeb7534f36c3c669b838c4a93779a09...pub rsa3072 2022-10-11 [SC] 5980F1C63AEB7534F36C3C669B838C4A93779A09uid [ultimate] Import test sub rsa3072 2022-10-11 [E] |
如上所示,该密钥现在只关联了一个用户身份,且该身份仅链接到一个 Proton Mail 地址。
6. 使用以下命令从 GnuPG 导出密钥:
gpg --armor --export-secret-keys > exported-key.asc
您的密钥没有加密子密钥

这意味着什么
为确保 Proton Mail 用户能够接收加密电子邮件,Proton 服务要求每个地址密钥都能够加密数据。这就是我们要求导入的密钥至少包含一个可执行加密的子密钥的原因(有些子密钥只能用于签名)。
如何解决此问题
- 打开 GnuPG,运行以下命令检查您要导入的密钥的子密钥:
gpg --list-keys
您看到的输出应类似于以下内容:
$ gpg --list-keys key.import.test@example.proton.mepub rsa3072 2022-09-21 [SC] C931E2A00A01EE4604049A4EA9C08446B1B88861uid [ultimate] Import key guide |
在此示例中,该密钥只有一个子密钥,它具有签名和认证功能(标记为 [SC])。没有具备加密功能的子密钥(加密功能会标记为 [E])。
2. 使用以下命令选择要编辑的密钥:
gpg --edit-key
使用以下命令添加新的子密钥:
addkey
选择加密算法。Proton 仅支持 RSA(仅加密)或 ECC(仅加密)。
对于 RSA 子密钥,请选择大小。Proton 要求至少为 2048 位。
选择过期日期。Proton 要求将其设置为 0(无过期日期)。
3. 确认新的子密钥,然后使用以下命令保存更改:
save
完整的操作记录应类似于以下内容:
$ gpg --edit-key key.import.test@example.proton.megpg> addkeyPlease select what kind of key you want: (3) DSA (sign only) (4) RSA (sign only) (5) Elgamal (encrypt only) (6) RSA (encrypt only) (14) Existing key from cardYour selection? 6RSA keys may be between 1024 and 4096 bits long.What keysize do you want? (3072)Requested keysize is 3072 bitsPlease specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n yearsKey is valid for? (0) 0Key does not expire at allIs this correct? (y/N) yReally create? (y/N) ygpg> save |
4. 使用以下命令检查密钥的用户身份:
gpg --list-keys
gpg --list-keys key.import.test@example.proton.mepub rsa3072 2022-09-21 [SC] C931E2A00A01EE4604049A4EA9C08446B1B88861uid [ultimate] Import key guide sub rsa3072 2022-10-11 [E] |
如上所示,该密钥现在拥有一个具备加密功能的子密钥。
5. 使用以下命令从 GnuPG 导出密钥:
gpg --armor --export-secret-keys > exported-key.asc
您的密钥使用了不受支持的算法

这意味着什么
OpenPGP 密钥可以支持多种不同的加密算法,其中一些算法在 Proton 看来不足以安全地保护您的电子邮件。
Proton 将拒绝使用薄弱或过时算法的密钥,以避免降低其他用户的安全性,并确保接收到的消息可由 Proton Mail 用户解密。
Proton 不支持以下非对称算法:
- 密钥小于 2048 位的 RSA
- ElGamal
- 使用 x25519 及 NIST 的 P-256、P-384 或 P-521 以外曲线的 ECC 密钥
- DSA
我们还要求导入的密钥声明支持以下功能:AES-256 作为对称加密算法、SHA-256 作为哈希函数,以及 ZLIB 作为压缩函数。
如何解决
- 使用以下命令检查每个密钥所使用的算法
gpg --list-keys
输出将类似于以下内容:
$ gpg --list-keys key.import.test@example.proton.mesec dsa2048 2022-09-21 [SC] [expires: 2024-09-20] C931E2A00A01EE4604049A4EA9C08446B1B88861uid Import key guide ssb elg2048 2022-09-21 [E] [expires: 2024-09-20] |
在这里,主密钥(标记有 SC(新窗口) 功能)是 DSA 密钥,而加密子密钥是 ElGamal 密钥。
如果您的主密钥(具有认证功能的密钥)使用过时或薄弱的算法,您将无法导入该密钥。
2a. 您可以直接在 Proton Mail 网页应用的帐户设置中生成新密钥,或使用 GnuPG 配合以下命令生成:
gpg --generate-key
2b. 如果您的主密钥使用受支持的算法,但某个子密钥使用过时或薄弱的算法,您可以使用以下命令移除该子密钥(并在需要时生成新的子密钥):
gpg --edit-key
使用以下命令选择使用不受支持算法的子密钥:
key
其中 n 是子密钥的索引(如提示中所示)
然后使用以下命令删除它:
delkey
如果您不再拥有加密子密钥,可以使用以下命令生成新的加密子密钥:
addkey
3. 使用以下命令确认更改:
save
完整的操作记录应类似于以下内容:
$ gpg --edit-key test@gpg.example.proton.me...sec rsa3072/BC93CFA50EFCDAF0 created: 2022-11-04 expires: never usage: SC trust: ultimate validity: ultimatessb elg2048/CEB2A2B7DB363D99 created: 2022-11-04 expires: never usage: E[ultimate] (1). teststes gpg> key 1gpg> delkey...gpg> addkey...sec rsa3072/BC93CFA50EFCDAF0 created: 2022-11-04 expires: never usage: SC trust: ultimate validity: ultimatessb rsa2048/E910A70D5E1E5FC8 created: 2022-11-04 expires: never usage: E [ultimate] (1). teststes gpg> save |
4. 使用以下命令从 GnuPG 导出密钥:
gpg --armor --export-secret-keys > exported-key.asc