Back

Retrieving Private key from ProtonMail

ProtonMail 是一个注重隐私保护并且提供端到端加密(PGP)的邮件服务提供商。在创建账户的时候会自动帮你生成一对PGP密钥,发送使用该公钥加密的消息会被在网页端自动解密,比较实用。但是在网页客户端上只能找到公钥的下载地址,并不提供私钥的下载地址。

ProtonMail 的网页端在 Github 上开源的,这给导出私钥提供了可能。下面是具体过程。

导出私钥

  1. 如果登录了,请登出;
  2. 打开浏览器的开发者工具,切换到Network标签页,下面以Chrome为例子;
  3. 在网页上输入用户名和密码,提交登录;
  4. 在开发者工具中可以看到一个 auth 的回应,点击,可以看到具体内容;
  5. 在 PrivateKey 这一项中就可以找到私钥。

 

有了私钥就可以解密PGP加密的消息了吗?事情并没有这么简单,这个私钥是有密码的。

获取私钥密码

还是刚刚 auth 的响应中有一个 KeySalt 值,通过他可以获取到密码。

复制 KeySalt 的值备用。在开发者工具中,切换到 Console 标签页,一次输入以下 JavaScript 代码:

salt = "KeySalt的值";
saltBin = pmcrypto.binaryStringToArray(pmcrypto.decode_base64(salt));

bcrypt = (str, salt, cb) => dcodeIO.bcrypt.hash(str, salt, cb);

bcrypt(
  mailboxPassword,
  '$2y$10$' + dcodeIO.bcrypt.encodeBase64(saltBin, 16),
  (err, hash) => console.log(hash.slice(29))
);

最后输出的就是私钥的密码了。导入到GPG中就可以加密/解密消息了。

感兴趣的可以去我的网站的Contact中留言联系我,你发送的留言会通过我的PGP公钥进行加密。

Licenced under CC BY-NC-SA 4.0