伴随着人类的通信史,如何安全的传递信息一直是一个非常重要的议题。在网络发达的今天,通信安全更是诸多服务赖以开展的基础。而目前主流的安全通信手段的核心部分,就是非对称加密算法。与需要采用相同密码加解密的对称加密算法不同,非对称加密算法实现了无需在将密码明文传输的情况下,通过公开密钥中公钥部分,就可以实现加密信息的传递。可以说非对称加密算法,构成了现代通信安全的基石(当然需要实现安全通信还需要防止中间人攻击,证书体系被引入用于解决这个问题)。目前主流的非对称加密算法为 RSA 算法,关于其更多的知识请看RSA算法原理

这篇文章简单介绍两个自由软件项目,用于实现非对称加密信息传递体系的 GPG 与基于点对点网络的去中心通信软件 Tox 。

GPG

GPG (GnuPG)是自由软件基金会主导开发的自由软件,用于代替商业化的 PGP 软件进行非对称加密、签名等工作,实现安全的信息传递,自其诞生以来得到了广泛的应用。

安装GPG

在macOS下可以使用homebrew很方便的安装gpg

brew install gpg

生成密钥环

使用--full-gen-key参数来生成密钥环:

gpg --full-gen-key

建议使用 2048 位以上的 RSA and RSA 。为了避免后期折腾,可以考虑将有效期设为无限。

这时候我们就获得了一个密钥环,其中包括两对公私钥,分别为主钥和从钥。主钥用于签名和验证,从钥用于加密和解密。

你可以选择将公钥上传至服务器:

gpg --keyserver keys.gnupg.net --send-keys <key ID>

不同的 GPG 服务器之间通过交换机制互相同步,最终所有GPG服务器中都会存在你的公钥。

当然公钥的上传是没有任何身份验证机制的,任何人都可以以你的名义上传公钥,这时候就需要你公布公钥的指纹,供下载者进行核对。

你可以点击这里下载我的公钥,来对我签名发布的文件进行校验,或是向我发送加密信息。下载时请注意浏览器安全提示,确认目前的 https 完整,以保证文件分发安全。

你也可以在任何 GPG 服务器中搜索 zrstea 来获得我的公钥。如 https://pgp.mit.edu/

使用 gpg --import filename 来导入,并检查指纹。

或是直接使用命令行搜索并导入:

gpg --keyserver hkp://pgp.mit.edu --search-keys zrstea

导入公钥后,指纹可以使用以下命令获得:

gpg --fingerprint <用户ID>

这里是我的公钥指纹 60F1 98DC 55F4 527E AE06 A491 4E8A 53BB 43EB BE2B

当持有对方公钥时,可以利用公钥加密文件发送给对方,该文件只能私钥持有者可以解密:

gpg --recipient [用户ID] --output filename.en.txt --encrypt filename.txt

解密命令:

gpg --decrypt demo.en.txt --output demo.de.txt

还可以进行签名和验证等操作,详请参见参考文章。

Reference

1 GPG入门教程 - 阮一峰的网络日志
2 使用GPG签名Git提交和标签

Tox

Tox 是使用 GPLv3 协议发布的一款即时通信软件,基于去中心的 P2P 网络,采用非对称加密手段进行身份鉴权,实现端到端加密,不需要任何中心服务器,任何中间人也无法窃听通信内容。该项目的目标是为所有人提供安全而方便的通信方式。

下载客户端

在 Tox 项目官网 可以下载相应平台的客户端。

生成身份并使用

在客户端中按照提示建立自己的用户档案,软件会生成一个 Tox ID 。将 Tox ID 分享给需要通信的人,他通过该 Tox ID 即可找到你,建立好友关系,建立完毕后即可进行安全通信。注意,因为没有中心服务器的原因,任何时候进行通信的双方必须同时在线,且正常接入了网络建立了连接,这往往需要等待一段时间。

下面附上我的 Tox ID ,欢迎添加:

D8D03A18FA48EE8191AC1D115B757AC18387F8D36EB1B8E7B2A263F2E8D5A60A5627391806BA

或者扫描二维码: