Proton 主页

将 OpenPGP 私钥导入 Proton Mail

阅读
4 分钟
类别
加密与密钥

Proton Mail 允许您将现有的 OpenPGP 私钥(或密钥)导入其加密生态系统中。这样您就可以继续使用这些密钥来签名和解密您的电子邮件。

出于安全和兼容性方面的考虑,您导入的密钥必须满足 Proton 的最低密钥要求。

如果您的密钥满足我们的最低要求,您应该可以直接将其导入。
如果您的密钥不满足我们的最低要求,您在尝试上传后会看到错误屏幕。该错误屏幕会说明密钥被拒绝的原因。我们提供修改密钥的指南,以便您可以导入密钥。

  1. 如何将 OpenPGP 密钥导入 Proton Mail
  2. 如何修改您的 OpenPGP 密钥

如何将 OpenPGP 密钥导入 Proton Mail

  1. 登录 Proton Mail 网页应用中的 Proton 帐户
  2. 点击设置 → 所有设置 → 加密与密钥 → 邮件加密密钥。
  3. 选择与相关密钥关联的电子邮件地址,点击显示 生成密钥的下拉菜单,然后点击 导入密钥。

完成!您现在可以在 Proton Mail 上使用您的 OpenPGP 私钥了。

如何修改您的 OpenPGP 密钥

如果您的密钥不满足我们的要求,您将无法导入密钥。

我们将介绍密钥被拒绝的最常见情形,并说明如何解决这些问题。

开始之前

如果您需要修改 OpenPGP 私钥才能将其上传到 Proton Mail,则必须在开始之前完成两个步骤:

  1. 下载并设置 GnuPG,然后导入您的密钥
  2. 在修改 OpenPGP 密钥之前先创建备份版本

设置 GnuPG 并导入您的密钥

在本指南中,我们全程使用 GnuPG(GNU Privacy Guard)工具来修改想要导入的私钥。
如果您尚未安装 GnuPG,请访问 https://gnupg.org/download/(新窗口) 查找适用于您设备的应用。

如果您想导入 Proton Mail 的密钥尚未导入 GnuPG,则需要使用以下命令进行导入:

gpg --import 

以下大多数操作都将依赖于基于以下内容的交互式命令:

gpg --edit-key

阅读 GnuPG 文档(新窗口)。

重要提示:修改密钥之前请先备份

如果您尝试导入的私钥除 Proton 之外还用于其他应用,请务必在修改任何密钥之前创建备份副本。

如果您已将私钥导入 GnuPG,可以使用以下命令执行该操作:

gpg --armor --export-secret-keys  > backup-key.asc

稍后您可以使用以下命令重新导入原始密钥:

gpg --import backup-key.asc

您的私钥被拒绝的原因

  1. 您的密钥设置了过期日期 
  2. 您的密钥身份有误
  3. 您的密钥没有加密子密钥
  4. 您的密钥使用了不受支持的算法

您的密钥设置了过期日期

这意味着什么

OpenPGP 密钥(和子密钥)可以设置过期日期,过期后,所有符合 OpenPGP 标准的库都会拒绝它们。

为确保您始终可以使用此 OpenPGP 密钥在 Proton Mail 上接收电子邮件,我们要求所有导入的密钥均不设置过期日期。

如果您尝试导入设置了过期日期的密钥,该密钥将被拒绝。

如何解决此问题

  1. 打开 GnuPG,运行以下命令检查密钥是否设置了过期日期:
gpg --list-keys 

其中“用户 ID”是与密钥关联的电子邮件地址。

您看到的输出将类似于以下内容:

$ gpg --list-keys key.import.test@example.proton.me
sec rsa3072 2022-09-21 [SC] [expires: 2024-09-20]
C931E2A00A01EE4604049A4EA9C08446B1B88861
uid 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.me
pub rsa3072 2022-09-21 [SC]
C931E2A00A01EE4604049A4EA9C08446B1B88861
uid [ultimate] Import key guide
sub rsa3072 2022-09-21 [E]

如上所示,原先列出过期日期的部分现在已为空白。

5. 现在我们可以使用以下命令从 GnuPG 导出密钥:

gpg --armor --export-secret-keys  > exported-key.asc

6. 您现在可以将新导出的密钥导入 Proton Mail

您的密钥身份有误或存在多个身份

这意味着什么

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

如果您拥有多个 Proton Mail 地址,请确保将正确的密钥导入到正确的地址。

如果该地址拥有多个用户身份(其中一个可能与您要将密钥导入的 Proton Mail 地址相关联),也会出现此错误。在这种情况下,Proton 要求移除其他身份,因为对于外部地址(非 Proton Mail 地址),Proton 无法确认密钥是由该地址的所有者创建的。

如何解决此问题

  1. 打开 GnuPG 并 检查与您的密钥相关联的身份。您可以使用指纹选择您的密钥,指纹可在导入对话框中找到。 您可以运行以下命令来访问:
gpg --list-keys 

您看到的输出将类似于以下内容:

$ gpg --list-keys 5980f1c63aeb7534f36c3c669b838c4a93779a09
pub rsa3072 2022-10-11 [SC]
5980F1C63AEB7534F36C3C669B838C4A93779A09
uid [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> adduid
Real name: Import test
Email address: key.import.test@example.proton.me
Comment:...
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

sec rsa3072/9B838C4A93779A09
created: 2022-10-11 expires: never usage: SC
trust: ultimate validity: ultimate
ssb rsa3072/07FE974BC493DC08
created: 2022-10-11 expires: never usage: E
[ultimate] (1) Some identity
[ unknown] (2). Import test
gpg> uid 1
...
gpg> deluid
Really remove this user ID? (y/N) y
...
gpg> save

5. 使用以下命令检查密钥的用户身份:

gpg --list-keys 

您看到的输出应类似于以下内容:

$gpg --list-keys 5980f1c63aeb7534f36c3c669b838c4a93779a09
...
pub rsa3072 2022-10-11 [SC]
5980F1C63AEB7534F36C3C669B838C4A93779A09
uid [ultimate] Import test
sub rsa3072 2022-10-11 [E]

如上所示,该密钥现在只关联了一个用户身份,且该身份仅链接到一个 Proton Mail 地址。

6. 使用以下命令从 GnuPG 导出密钥:

gpg --armor --export-secret-keys  > exported-key.asc

7. 您现在可以将新导出的密钥导入 Proton Mail

您的密钥没有加密子密钥

这意味着什么

为确保 Proton Mail 用户能够接收加密电子邮件,Proton 服务要求每个地址密钥都能够加密数据。这就是我们要求导入的密钥至少包含一个可执行加密的子密钥的原因(有些子密钥只能用于签名)。

如何解决此问题

  1. 打开 GnuPG,运行以下命令检查您要导入的密钥的子密钥:
gpg --list-keys 

您看到的输出应类似于以下内容:

$ gpg --list-keys key.import.test@example.proton.me
pub rsa3072 2022-09-21 [SC]
C931E2A00A01EE4604049A4EA9C08446B1B88861
uid [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.me
gpg> addkey
Please 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 card
Your selection? 6
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072)
Requested keysize is 3072 bits
Please 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 years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
Really create? (y/N) y
gpg> save

4. 使用以下命令检查密钥的用户身份:

gpg --list-keys 
gpg --list-keys key.import.test@example.proton.me
pub rsa3072 2022-09-21 [SC]
C931E2A00A01EE4604049A4EA9C08446B1B88861
uid [ultimate] Import key guide
sub rsa3072 2022-10-11 [E]

如上所示,该密钥现在拥有一个具备加密功能的子密钥。

5. 使用以下命令从 GnuPG 导出密钥:

gpg --armor --export-secret-keys  > exported-key.asc

6. 您现在可以将新导出的密钥导入 Proton Mail

您的密钥使用了不受支持的算法

这意味着什么

OpenPGP 密钥可以支持多种不同的加密算法,其中一些算法在 Proton 看来不足以安全地保护您的电子邮件。

Proton 将拒绝使用薄弱或过时算法的密钥,以避免降低其他用户的安全性,并确保接收到的消息可由 Proton Mail 用户解密。

Proton 不支持以下非对称算法:

  • 密钥小于 2048 位的 RSA
  • ElGamal
  • 使用 x25519 及 NIST 的 P-256、P-384 或 P-521 以外曲线的 ECC 密钥
  • DSA

我们还要求导入的密钥声明支持以下功能:AES-256 作为对称加密算法、SHA-256 作为哈希函数,以及 ZLIB 作为压缩函数。

如何解决

  1. 使用以下命令检查每个密钥所使用的算法
gpg --list-keys 

输出将类似于以下内容:

$ gpg --list-keys key.import.test@example.proton.me
sec dsa2048 2022-09-21 [SC] [expires: 2024-09-20]
C931E2A00A01EE4604049A4EA9C08446B1B88861
uid 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: ultimate
ssb elg2048/CEB2A2B7DB363D99
created: 2022-11-04 expires: never usage: E
[ultimate] (1). teststes
gpg> key 1
gpg> delkey
...
gpg> addkey
...
sec rsa3072/BC93CFA50EFCDAF0
created: 2022-11-04 expires: never usage: SC
trust: ultimate validity: ultimate
ssb 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

5. 您现在可以将新导出的密钥导入 Proton Mail