ProtonMail 是一个注重隐私保护并且提供端到端加密(PGP)的邮件服务提供商。在创建账户的时候会自动帮你生成一对PGP密钥,发送使用该公钥加密的消息会被在网页端自动解密,比较实用。但是在网页客户端上只能找到公钥的下载地址,并不提供私钥的下载地址。
ProtonMail 的网页端在 Github 上开源的,这给导出私钥提供了可能。下面是具体过程。
导出私钥
- 如果登录了,请登出;
- 打开浏览器的开发者工具,切换到Network标签页,下面以Chrome为例子;
- 在网页上输入用户名和密码,提交登录;
- 在开发者工具中可以看到一个 auth 的回应,点击,可以看到具体内容;
- 在 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公钥进行加密。