一个精彩的章节就会让你爱上一本书,《改变未来的九大算法》的第四章:“公钥加密——用明信片传输秘密”就是这种情况。下文的主要内容,都是来自书中,稍有修改。我就是忍不住和大家分享这种通俗易懂的讲解。
1
稍微有一些通信常识的人都知道,在现代通信,特别是互联网蓬勃发展的今天,加密通信已经成为构建整个通信系统安全可靠的前提。我们无法承受一次网上购物之后,账上的钱被黑客全部转走的损失。另外就是数字签名的公信力和防抵赖,使得人们不必肉身跨越千里,只为在合同上签一个名字。
对于现在流行的加密解密方法中,公钥/私钥加密无疑是最普遍的一种。它可以让两个素未谋面的用户/机构之间实现安全的通信。关于相关原理讲解的文章有很多,但多数不够通俗易懂,直到我看到这本书的这个章节。
2
文章首先聊的是共享加密,着也是加密算法最开始最自然的想法,就是通信的双方使用同一个密钥进行加密和解密。书中设计了一个简化场景,在一个房间里有三个人——你,阿诺德还有伊芙。你想要秘密地传信息给阿诺德,却不想让伊芙知道。限制是不允许用偷偷摸摸的小把戏,例如小声说话或是传纸条。换句话说,你和阿诺德的所有沟通,伊芙都是可以看到听到的。如果恰巧你和阿诺德是从小长大的,他刚好知道你家的门牌号,那么你可以大声地说:“密钥就是我家的门牌号。”这个门牌号伊芙是不知道,所以阿诺德之间可以基于“门牌号”实现“一定程度”的安全通信。实际上这是一种作弊的方法,有了一个前提假设,就是你和阿诺德小时候就认识,知道一个伊芙不知道的信息。如果你和阿诺德是陌生人,之前生活毫无交集,那该怎么办呢?
3
那么你和阿诺德需要一个能够公开交换密钥的解决方案,被称为迪菲——赫尔曼密钥交换,在本文中被描述为“颜料混合把戏”。
下面是一些假设:
(1)房间中的你们三个人都拥有大量不同的颜料桶,每种颜色所有人都有
(2)每个桶上都清楚地标记颜色,方便具体指导别人如何混合颜色,例如“将一桶‘天蓝色’颜料和六桶‘淡黄褐色’颜料以及五桶‘碧绿色’颜料合在一起”,所有人都可以获得同样的混合色
(3)颜料的种类足够多,导致组合(考虑到还有比重)非常多,所以不可能通过只看颜色就了解到是如何配置出来的,或是基于多次试错发现真正的组合方式
(4)每种颜料的量足够多,不会出现某种颜色用完的情况
(5)你们三人各自占据房间的一个角落并有屏蔽遮挡,你们三人可以在其他人看不见的情况下配置自己的混合颜色
(6)你们之间的沟通,必须是公开的,你不能邀请阿诺德到你的私人区域看混合配方,反之亦然
(7)可以将配置好的混合颜色(分成足够多份)放到房间的公共区域内,这种混合颜色无论是谁都可以获得
下面就是最精彩的部分了!
第一步:你和阿诺德各自选择一种私人颜料。
因为颜料的种类太多,你们几乎不可能会选择同一种,假设你选了淡紫色,而阿诺德选择了深红色。
第二步:选择一种公开颜料
公开颜色只能有一种,可以是你来宣布,或者阿诺德来宣布,总之不能每人选一种。假设公开颜色是雏菊黄,这种颜色是所有人都可见的,包括伊芙。
第三步:各自混合
你和阿诺德各用一桶公开颜料和自己的私人颜料制造一种混合颜料。一般来说,因为当初拟合阿诺德选择的私人颜料不同,因此混合后的颜色也是不同的。
第四步:将自己制作的混合颜色放到公共区域
所有的交换必须是在公共区域进行的,不允许你和阿诺德私下进行颜料交换。至此,你们可能掌握的信息如下
(1)你:自己的私有颜料,公共颜料,自己的“公开-私人混合颜料”(记做A),阿诺德的“公开-私人混合颜料”(记做B)
(2)阿诺德:自己的私有颜料,公共颜料,混合颜料B,混合颜料A
(3)伊芙:公共颜料,混合颜料A,混合颜料B
第五步:将对方的混合颜色与自己的私有颜色混合
最神奇的一步!我们来梳理一下:
(1)你的私有颜料是淡紫色,取回的阿诺德的混合颜色是深红色和雏菊黄的混合颜料,结果就是淡紫色+深红色+雏菊黄
(2)阿诺德的私有颜料是深红色,取回的你的混合颜色是淡紫色和雏菊黄的混合颜料,结果就是淡紫色+深红色+雏菊黄
(3)你们最终获得了相同的混合颜料!
那伊芙呢?伊芙不知道你们任何一方的私有颜料,也无法“分开”任意一种混合颜料并“提取”私人颜色的纯正样本。她可以将你们提交的A和B混合,但是那样得到的是一份深红色加一份淡紫色加两份雏菊黄的混合颜料,多了一份无法提取去除的雏菊黄。
4
当然,在计算机和通讯网的世界,实际的加密和解密都是基于数字的。如果我们先承认一个假设,就是乘法是不可逆的(当然我们都知道除法是乘法的逆运算,但是这里我们先接受这个前提假设),下面是最简单的一种说明。
依然是在房间中,你依然要和阿诺德进行公开的密钥交换,这次将前面的颜料换成数字。
第一步:你和阿诺德各自选择一个私人数字。
假设你选了4,阿诺德选了6.
第二步:选择一个公开数字
你或阿诺德宣布一个公开数字,例如是7,
第三步:各自相乘
你用自己的4乘以公开数字7,得到28;阿诺德用6乘以7得到42.
第四步:将自己计算的结果公布
阿诺德获知你的公共——私人数字是28,你知道阿诺德的公共——私人数字是42。
第五步:将对方混合数字与自己的私人数字相乘
阿诺德得到286=168,你得到424=168,这个168就是你们的共享密钥!
至于伊芙,她能看到三个数字——7(共享数字),28(你的公共——私人数字)和42(阿诺德的公共——私人数字)。我们有一个前提假设是认为乘法不可逆,即为伊芙无法根据上面的数字反推出你和阿诺德各自的私人数字,就像无法从混合颜料中提取出你们各自的私人颜料一样。
5
是的,上面例子中关于“乘法是不可逆的”总归很不自然。接着书中基于“钟算”和“幂函数”又做了一番更贴近实际应用的讲解,有兴趣的读者可以自行去看。
在实际应用中,“钟算”的表盘必须要足够大,例如有几百个数位长,而且钟的大小必须是素数,同时“幂函数”的基数必须是钟大小的本源根,意味着基数的幂最终将循环遍钟上每一个可能的值。
希望通过我上面的介绍,能够激发读者对于这些加密算法的兴趣,让生活中也多一些思考的乐趣。
网友评论