总有一天,我们会遇见自己的男朋友、女朋友。爱情之神秘,正如密码之鬼魅,捉摸不透,惹人心醉。 诚如 Bruce Schneier 在《应用密码学》的开篇说道:
不如我们就来借着恋爱的故事,讲讲这隐藏和安全的门道。 古典密码,古典而有趣女生翻开课本,发现有人在自己的书里夹了一张纸条。上面写着:
这似乎是一种十分冷门的小语种。然而借助翻译工具,女生几乎尝试了所有支持的语言,却依然寻找不到它的含义。 事实上,这种名为「凯撒密码」的加密方式在古罗马就被恺撒大帝用于军事上的信息传送——它是一种名副其实的「古典」密码了。 凯撒密码的加密方式很简单。首先,你需要在心中想一个 1 - 25 之间的整数,然后按照英文字母表的顺序,给句子中的每一个字母「加上」你所想的那个数。 比如,我们要加密「LOVE」这个词语,那么步骤是这样的:
这种古典加密的方式,在互联网上有许多工具可以帮助计算——如果你会编程,甚至可以用几行代码自己写一个。我在酷安上找到了一个名为 RSCipher 的应用,可以用它来进行简单的计算: 显然,凯撒密码的解法和加密的方式是相反的。加密可以「增加」,那么解密就直接「减少」一位位尝试,最多尝试 25 次,就可以找到正确的答案了。 回到前面的女生收到的纸条,借助这个手机应用的「向前偏移一位」按钮依次尝试: 点击 6 次后发现了一个有含义的句子:
My heart is, and always will be, yours. 真甜。真好。 同一个密码,同一份心意古典密码只可怡情,它十分容易破解,完全扛不住现代计算机的狂轰乱炸。像前面说的凯撒密码,最多只需要 25 次就可以解出密码,在计算机面前连一秒钟都不需要。 基于强大的数学原理和计算技术,科学家们构筑起了更加稳健的现代密码学。使用「同一个密码」进行加解密的对称加密就是其中十分典型的一种。 今年情人节,男生出差了,不能跟女生一起度过。不过,女生收到了男生送来的一个上锁的盒子,里面藏着今年情人节的小礼物。而这个盒子经过了好几个朋友依次传递送达,却没有任何一个朋友能够知道里面的小礼物究竟是什么。 为什么呢?因为只有女生才知道密码呀!早在男生出差之前,他就已经和女生讨论决定,用他们的纪念日「20200202」作为礼物的密码。 就像 Bruce Schneier 所说的那样,保险箱可以由你随意研究,甚至你可以在淘宝上买到同款保险箱,但是不知道密码,任何其他人都不可以解开这个箱子。 在日常使用电脑的过程中,这种加解密使用「同一个密码」的加密方式我们经常遇到。你一定收到过加密的压缩包吧!压缩包的 加密方式 是公开的,但是只有拥有正确的密码,才能解开压缩包,读取到里面的视频或文件。 公开投递,钥匙却在我手里窈窕淑女,君子好逑。男生爱上了一个女生,却还没有勇气表白。和所有其他的追求者们一样,男生还不可能跟女生有提前约定的密码。 这天,男生写了一封长长的信件来倾诉他的情意。为了不让自己的小秘密被其他同学知道,男生把信件投到了女生家门口的信箱。而这个信箱的钥匙,只有女生才有;这封信件,也就只有女生才可以读到。 敲黑板,都是知识点。 男生和女生不需要提前约定密码。女生的信箱用来加密,所有追求者都知道她的信箱,都可以投递信件,称为公钥。女生的钥匙用来解密,只有女生自己可以打开信箱,称为私钥。 借助知名的不对称密码工具 GPG(GnuPG,The GNU Privacy Guard),我们可以模拟这一整个收到情书的过程。你可以在 官网下载 到 Windows 和 macOS 的客户端。 在表白之前,男生一定对女生有所了解。无论是女生亲口说了自己家的信箱地址,还是男生从班主任老师那儿打听到的信息,总之,男生会拿到一个类似下面的文件,也就是公钥。这个文件完全公开,无需保密。——如果你好奇这个密钥文件是如何生成的,看到上图中的「新建密钥对」了吗?点击试试,你就可以得到一个公钥和一个私钥。 于是,男生把它导入到自己的 GPG 密钥库中。 迫不及待地,男生使用这个公钥对自己的小情书进行加密。与此相对应的,是男生把信件投入了女生的信箱。 此时,只有女生可以使用钥匙来查看这封信,任何其他人却没办法看到这封信了。甚至连男生自己都不可能再打开信箱阅读信件内容了,除非他提前另外抄了一份。 根据「输出」中的配置,最后会产生一个 女生作为密钥对的主人,不但拥有公钥,当然还拥有私钥。 收到了这个加密后的文件,女生可以使用 GPG 解密。 保存之后,就会得到信件的原文。 哟,这份爱情,充满了独立的自我,却又温婉可人。 数字签名,比签名更可靠前面使用 GPG 的过程中,男生拥有女生公开的公钥,使用公钥加密。女生拥有自己的私钥,使用私钥解密。 如果反过来呢? 女生读了男生的信,怦然心动,愿属以一生。于是她决定向全世界宣布这份爱情。但是,如何让大家相信,「我爱上了他」,真的是女生所说,而非男生杜撰呢?对,让女生签个名就好了。 公钥是公开的,而私钥是秘密的。让女生使用只有她能够使用的私钥来签个名,就可以证明确实是她本人在发布文件了。和现实生活中的「签名」一样,数字签名同样可以用来证明「她确实说了这句话」。 于是,女生用私钥对这个文件进行签名。 签名得到的是一个 如何使用 GPG 来验证文件的正确性呢?同样的,首先男生需要向值得信任的熟人要来女生的公钥文件,导入 GPG 后,进行一次验证操作,GPG 工具会自动核对签名是否有效。 祝贺这个男生,也祝福他们可以永远幸福。 当然,也祝福你,亲爱的读者。祝福你拥有一份美好的爱情,和一个美好的人生。 |
|