记得有人这么说:
我们作为一个普通人,钱没有国家机器多,武力没有国家机器强大——但是在密码学上,可能是第一次个人能够与这种巨大的机器平起平坐。
互联网每时每刻都充斥着各种各样的信息,我们说出的每一句话,点的每一个赞,都相当于是说给了每一个人听,在这里,我们的每一句话都可以传播的很远,我们的每一个动作,潜在地都会被任何人看到。这是和我们平时生活所不同的。我们的生活是看得见摸得着的,是可以感知和控制的。你说话大声,听到的人就多,反之,说的小,那听到的人就少。你能够看得到和你说话的人的表情,能够听到他们的声音。可是网络不同,很多人还把它以现实来对待——说一个著名的梗(互联网的虚拟性):
你根本不知道在网络的另一端,和你聊天的其实是一只狗。
隐私
互联网上该如何保护自己的隐私?近几年人们终于开始意识到这个问题,可惜大部分的人还是会讲:“I have nothing to hide”——这不是掩饰什么——只是让你的生活和以前一样罢了,让你说的话,和你现实生活中一样——只让需要看到的人看到。
可是这么简单的一个需求,在互联网上却成了最难的命题——这在于互联网的另一个特性:资源共享。
所以说,在网上,默认来讲一切都是公开的,数据都是公开的!任何人只要愿意,就可以轻易地浏览你在往上做的一切。
——你愿意每天都不穿衣服出门吗?
密码学
所以说,我们有必要用一些手段来保护自己。你所说的话——不一定是秘密,但我们也不愿意让它被所有人听到。现实中你的声音会由于能量的散失最终消散于虚无,即便被人听到,也会随着时间而被忘记。互联网中,这些都是信息,信息会被永久地保存。
你的键盘会忠实地记录你的一切。
你知道最近几年吵得火热的云存储吗?你知道高可用是它的重要特性之一吗?好吧,这是个专业的术语,不过没关系,很简单,意思就是高度可用罢了。在以前,我们把文档存到网上,就是存到了远端的某一个服务器上。一旦你删除或者服务器下线,你的文档就永远的消失了。
现在,你把文档传到网上,则进入了一堆服务器组成的集群里,甚至,可能是世界各地的服务器集群组合起来的集群——谁也不知道你的文档物理上存在了哪块硬盘里——或者说,其实哪块硬盘里都有你的这个文档的副本——因为不论哪个服务器坏掉了或者下线了,你的文档终究还是可以被访问得到——即使你删除了——你怎么就那么确信真的删除了呢?其实只是把你对自己文档的访问权限给关闭了罢了。
所以说,我们有必要运用密码学手段,退而求其次,让不可销毁的文档在今后都只能被指定的人来阅读。
对称加密
我们说加密,那加密到底是怎么个回事呢?直接来说的话,就是用一把“锁”,把你的文档锁起来,然后把钥匙发给你允许打开的人。
当然,我们使用一些特殊的数学公式来计算那些零和一,得到的结果就是钥匙,在这里,我们的专业叫法是——密钥。
关于这个是叫它“月”还是“要”,看你心情吧,反正是个多音字:)
说起加密,我就不得不提 Alice 和 Bob 这一对儿,哈哈——他俩是谁呢?恩,就像是英语课里的李明和韩梅梅吧~
你看,我们的Bob 给 Alice 发了一封邮件说“Hello Alice!”,可他又不想让全世界的人都知道这个事儿对吧?我已他就把邮件的内容加密,所以其他人看到的就是乱码了。然后 Alice 收到了邮件,用和 Bob 约定好的钥匙进行解密,然后她就得到了“Hello Alice!”的内容——整个过程里,只有 Alice 和 Bob 能知道邮件里的真正内容,而其他人,比如邮件的转发者,以及偷取到邮件的人,就看不到了。
你知道吗?你每天都在发送的邮件,其实是根本没有一丝加密手段的,任何人都可以轻松拿到你的邮件内容副本。你更不可能删除邮件,你以为它们都被删除了,其实服务器管理员可以轻易查找你的账号下所有邮件!他们只是被标记为“删除”并且不再给你显示而已!
可是这里有个问题,那如果有人获取了我的密钥就也可以解开我的邮件了吗?嗯, Bob 肯定也想到了这个事情,如果两人线下见面还好说,直接拷贝密钥就好了——可是如果是距离比较远,就要从网上来传密钥,这样就不安全了不是吗?于是,就有了另外一种加密的办法:
公钥(非对称)加密
在 Bob 升级了算法之后,我们的数学公式有两个解了——一个只能计算加密的内容出来,而另一个只能对加密的内容解密。这样,我们只需把只能加密的密钥分发出去就好啦,别人就算得到了公钥,他也只能加密而无法解密!
你看,Bob 通知 Alice 说他要给 Alice 发邮件啦,所有坏人都眯起了眼。然后 Alice 发给了 Bob 一个公钥,所有的坏人也得到了它。Bob 用公钥加密邮件发给了 Alice ,这个过程中无数人得到了这封邮件的副本,他们有得到的密钥去解密邮件——失败了。
Alice 用自己保留的私钥对邮件解密,哈哈,内容只有她自己知道。
注意,我们对信息的偷盗与现实生活中的偷盗也是不同的。你有一百块钱,我偷走了它,你的钱就没有了;而对于信息,尤其是电子信息,我偷到了,你的信息还在——你甚至根本不知道它被偷了!这也是社会工程学的目的,这里我们先讲技术手段。
那么,这种技术到底叫什么呢?
PGP(Pretty Good Privacy)
这个加密一开始是开源的后来因为它太牛逼所以导致了一系列的事情,所以它在后来把整个软件开源并且在1996年成立了公司。现在,我们普遍用 PGP 来称呼这家公司而不是加密了。
但是,由于这个加密实在是太重要了,它早已风靡世界,所以人们开始考虑开发一个能和它兼容并且免费的解决方案。
但这样太混乱了,最终,PGP 向 IETF 提交了PGP 5 的标准,然后 IETF 的人一琢磨,觉得不错,就搞了个 OpenPGP 这个标准出来。这样,大家就都可以开发软件来完美兼容 PGP 啦。
GnuPG(GNU Privacy Guard)
所以,自由软件基金会就开发了这个 GPG 出来,它完全基于 OpenPGP 标准,与 PGP 通用而且它免费!
这里我们就说说,如何在 Mac 上
保护你的隐私
GPGTools
说起来,如果直接使用 GnuPG 其实也可以,不过它没有图形界面,使用命令行我觉得对于已然高手的你来说也一定不是什么难事——可是,这样毕竟麻烦——毕竟,与 GUI 有关的东西,我们还是用 GUI 工具来解决才更合适。
所以,我们这里用一个专门为 OS X 封装的管理工具 GPGTools,它可以帮助你以图形的方式使用 GnuPG,还能帮你搞定升级等问题,一键安装哟~
好了,我们现在了来下载它:https://gpgtools.org
这是一个 OSX 适用的加密套件,里边包含了:
- 苹果自带邮件 app 的 GPG 插件——我推荐你使用ThunderBird邮件客户端而不是自带的,这个更好使,对 GPG 的支持也更好一些;
- 一个图形端的 GPG 管理工具;
- 给你的电脑安装 GPG 服务,这样你就可以在几乎任何软件里使用它;
- 当然还有 GnuPG 命令行,所以你也可以直接使用它。
配置
我们打开 GPG Keychain 这个应用,然后打开它,这个就是我们的管理图形端。
点击左上角的新建来新建一个密钥:
这里它会自动从你的邮件里读取添加的邮箱,如果没有,那么你需要自己写进去。第一行当然就是你的名字了。然后是密码,这个密码是用来保护你的私钥的!当你需要解密文档的时候,就要用到私钥对吧?用私钥的时候就会提示你先给私钥解密!
然后是那个“上传公钥”,它是什么意思呢?其实就是说它会自动把你的公钥上传到公钥服务器——毕竟,密钥这个东西已经有 4096 位长度,你直接公开可能还挺麻烦,这样就可以通过邮件地址直接搜索到了!现在你就可以试试在里边搜索我的邮箱:)
对于高级设置,无所谓,因为默认就是最强的了。不过你的密钥有个保质期,过期了就作废了,避免它会被一直用下去~默认来说是五年。
然后就生成吧,生成的过程可能有点长啊,它需要计算大量的随机数字,这时候你就动动鼠标浏览下网页,这样是可以帮助它计算的快一些的(理论上,并且更加随机)。
一旦完成,你的密钥就 Ready to use 了!
进阶配置
编辑 ~/.gnupg/gpg.conf ,在文件末尾(如果没有就创建文件)把已经存在的行注释掉,然后添加下边的内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
auto-key-locate keyserver keyserver hkps://hkps.pool.sks-keyservers.net keyserver-options no-honor-keyserver-url keyserver-options ca-cert-file=/etc/sks-keyservers.netCA.pem keyserver-options no-honor-keyserver-url keyserver-options debug keyserver-options verbose personal-cipher-preferences AES256 AES192 AES CAST5 personal-digest-preferences SHA512 SHA384 SHA256 SHA224 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed cert-digest-algo SHA512 s2k-digest-algo SHA512 charset utf-8 fixed-list-mode no-comments no-emit-version keyid-format 0xlong list-options show-uid-validity verify-options show-uid-validity with-fingerprint |
最后,使用如下命令来给 Keyserver 添加证书好让它使用 Https 请求证书:
1 2 |
$ curl -O https://sks-keyservers.net/sks-keyservers.netCA.pem $ sudo mv sks-keyservers.netCA.pem /etc |
使用
首先去 系统偏好设置 → 键盘→ 快捷键 → 服务 里把关于 OpenPGP 的所有选项都勾选。
然后,你就可以试试看,到这个页面,选中所有的乱码内容,包括 —–BEGIN PGP PUBLIC KEY BLOCK—– 和 —–END PGP PUBLIC KEY BLOCK—– 这上下的两行注释哦!然后点击右键,选择最下方的 服务 然后在弹出的二级菜单中选择 OpenPGP: Import Key from Selection
如果一切顺利,你应该看到类似如下的对话框:
或者,你也可以到 GPG 钥匙串里直接搜索我的邮箱地址 lomyr.jo@gmail.com ,如果你看到多个结果,就尽量导入那个最新的即可。
这下,你就可以给我发加密内容啦!怎么加密呢?
在任意位置写下你想说的话,然后选择它们,点右键选择在新窗口加密即可!
在弹出的窗口里选择你要用哪个公钥加密——一般来说,你要让谁看,就加密给谁啦!自己测试就选自己,然后一个可复制的窗口就出来了,你只需要复制里边的加密内容然后发送即可!(比如说 QQ~比如说邮件~)
同样的,选中你看到的加密信息,然后选择解密,就能够解密啦~前提是你得确定这是发给你的——即用了你的公钥加密的内容~否则可解不开啦!
另外,如果你是在 TextWrangler 这类编辑器里加密解密的话,你可能找不到右键里的服务了——没关系,在菜单栏的 TextWrangler 这个菜单里,有 Services 这个菜单,里边就是啦!
最后,我们再来说说邮件,毕竟,这个是最常用的东西。对于邮件,这里我拿 ThunderBird 做为例子,我们点击菜单“ 工具(T)–>附加组件(A) ”,从“获取附加组件”中搜索 Enigmail,选择“ 添加至 Thunderbird(A)… ”,来安装 ThunderBird 下的Enigmail 插件,它提供了 OpenPGP 的支持。其实 ThunderBird 自带的安全里边也有 PGP 的支持,只不过用起来不方便罢了。我们使用这个插件,更舒心。
然后在安装向导里边直接设置即可。如果你有多个邮箱并且生成了多个密钥,那么你需要进入邮箱的设置里的 OpenPGP安全 中选中“使用这个标识的电子邮件地址标示 OpenPGP 密钥”。
现在,你就可以在编写新邮件的时候尝试使用加密啦!如果必要,你也可以勾选“附送我的公钥”;另外,如果你的收件人没有公钥而你又强制加密,插件就会提示你并帮你自动从公钥服务器上下载一个……当然,如果还是没找到……那就只好取消强制加密才能发出去啦!
如果你收到了一封加密的邮件,只需要在页面内点击解密,然后输入你私钥的密码即可~
是不是很方便?
试一试
最后,你配置好了服务,学会了加密,并且还添加了我的公钥——现在你可以尝试来给我发送一封加密邮件啦!我是绝对会回复你的哟~
还有,记得用我的公钥加密,可别弄错了我就解不开啦,还有,记得附送你的公钥以便我回复你:)
lomyr.jo@gmail.com 落格博客。
参考文献
- GnuPG 与邮件加密
- Cryptography
- Pretty Good Privacy
- GPGTools
- The best PGP tutorial for Mac OS X, ever
- OpenPGP PGP GPG Difference
- The GNU Privacy Guard
本文由 落格博客 原创撰写:落格博客 » 加密解密——让你的信息更安全
转载请保留出处和原文链接:https://www.logcg.com/archives/1471.html
Comments