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