信息安全,是个很古老的话题,但是也是个最容易被忽视的部分。作为普通人,我们经常可以看到某某网站数据库资料被窃取,某某网站存在巨大漏洞导致用户资料泄露。作为 IT 从业者,我们自己亲手写的代码甚至可能会有严重的安全漏洞。安全问题,层出不穷,我们今天来聊聊如何安全的传输我们的密码。
场景
在项目交接过程中,澳洲的一位同事需要和我交接这个项目。我拿到项目代码后,在运行项目工程的过程中,发现配置文件中写了很多密码的占位符。看来这位同事安全意识挺强,关键的密码都没有存在代码中,看起来是直接从环境变量中读取的。
当我通过 Google Hangouts 找那位同事寻求密码时,她告诉我通过 Hangouts 直接发送密码不太安全。于是我决定使用 GPG 来加密我们之间的文本信息。
关于 GPG 加密
GPG 全称 GNU Privacy Guard,属于一种用户加密、数字签名以及生成非对称密钥对的软件。更多信息,可以参考维基百科。
我们下面用到的 GPG 加密,使用非对称加密的方式来加密信息的。

引用这段最经典的密码学场景:
- Bob 使用 GPG 软件生成了自己的私钥和公钥。然后将自己的公钥发送给 Alice;
- Alice 将收到的公钥导入到自己的电脑上,然后用这个公钥加密了一段密文,发送给 Bob;(即使在发送过程中被黑客 Jerry 截胡,Jerry 看到的也只是一段密文)
- Bob 拿到密文后,使用自己的私钥解密了 Alice 发送的信息,看到了 “Hello Bob” 这段文字;
使用 GPG Suite 加密和解密
上述谈到了这段密码学场景,可是实际情况下,作为 Bob 的我如何真的从 Alice 那里获取一段密文呢?
1. 在 Mac 上安装 GPG Suite
Bob 现在啥公钥和私钥都没有,那么首先需要安装 GPG Suite 生成公钥和私钥,开始下载 GPG Suite:https://gpgtools.org。安装完成后,打开软件 GPG Keychain。


注意,如果密钥强度过低,在生成密钥对的时候, GPG Keychain 会有相关提示,所以最好设置一个复杂度比较高的密码。这里的 email 应该输入 Bob 工作邮箱,代表了 Bob 的身份。后文 Alice 在生成加密文件的时候回用到这个邮箱。
2. Bob 导出公钥并发送给 Alice

点击Export,最下面有个复选框 Include secret key in exported file,注意不要勾选。因为 Bob 只需要将公钥发送给 Alice 即可。私钥应该妥善保存,不要与他人分享。
Bob 就这样,通过邮件附件的形式,将这个公钥发送给 Alice 了。
3. Alice 导入公钥并开始加密
Alice 的电脑上也安装了 GPG Suite,所以在接收到 Bob 的公钥后,直接点击Import,选择公钥文件,即导入了 Bob 的公钥。可以从 Type 的值看出这个密钥是公钥还是私钥,以及密钥的所有者。

Bob 的公钥导入成功后,Alice 把所有的密码写到了 secretfile.txt 中。然后开始打开 terminal 加密:
gpg --output encrypted.gpg --encrypt --recipient bob@gmail.com secretfile.txt
--output: 指定输出文件的路径,这里是 encrypted.gpg;
--recipient: 指定收件人,通过收件人直接到 GPG Keychain 中找到 Bob 的公钥;
加密完成后,在当前目录可以看到加密后的文件encrypted.gpg。于是 Alice 将这个加密后的文件发送给了 Bob。
4. Bob 接收到加密文件并开始解密
直接在命令行中输入:
gpg --output secretfile.txt --decrypt encrypted.gpg
输入完成后,按照提示输入该键值对的密码,完成后可以看到 secretfile.txt 中的文本内容。
使用 FlowCrypt 加密你的 Gmail
上面的过程描述了 Bob 和 Alice 如何传输了一个密钥文件。但是随着 Bob 和 Alice 越来越多的信息往来,他们希望自己 Gmail 的所有邮件信息都可以默认进行加密,手工的来进行加密虽然是可行的,但是还是稍显麻烦。
于是,FlowCrypt 这 Chrome 插件被 Bob 和 Alice 发现了。按照提示进行设置之后,Bob 和 Alice 对自己的 Gmail 邮箱进行了集成。最后,他们之间开始直接使用邮件进行方便而安全的密钥传输。