给孩子描述非对称加密算法
在荒岛上睡觉时做了一个梦,女儿问我什么是 RSA(一种非对称算法),我解释了一半就醒了,但觉得有意思,回来记录一下。
药方子配方是私密的,但药的效果是公开的,这是一种天然的非对称算法,人们已经用了几千年。一个医生一套方子,只有他自己能配制,把病吃好了大家都知道是谁的功,若吃死了,医生难逃干系,这就是不可抵赖。
对于加密解密,按照中医 or 前希波克拉底的希腊医学(我本人极端反对中医,但又不得不用此作诠释),人生病是缺了某些东西,拿掉一些 “药方子配比元素” 就是病灶,这算是私钥加密(签名),喂补药剂后痊愈,这算是公钥解密(验签)
医生是 “私钥” 拥有者,配药需要方子,而服药的病人却不需要知道方子配比,只需要成药即可。
我觉得这种解释比手写签名和印章的类比更直观,毕竟不是每个人都有识别签名以及印章真伪的能力,但药效却是有目共睹的。
我再用沙子解释。
私钥:红色沙子 11 粒,黄色沙子 23 粒,绿色沙子 35 粒,白色沙子 17 粒。
公钥:将上述 “红色沙子 1119 粒,黄色沙子 22913 粒,绿色沙子 325 粒,白色沙子 1097 粒” 混合在一起。
私钥加密(签名):在一堆彩色沙堆中拿掉 “私钥” 指示的 “红色沙子 11 粒,黄色沙子 23 粒,绿色沙子 35 粒,白色沙子 17 粒” 。
公钥解密(验签):将混合在一起的沙堆(公钥)混入分别拿掉各颜色沙粒的沙堆。
公钥加密(数字信封):将混合在一起的沙堆(公钥)混入既有的彩色沙堆。
私钥解密:在已经混入 “公钥” 的沙堆中分别捡拾出 “私钥” 指示的各颜色数量的沙粒。
…
我们发现,“私钥” 的配方(相当于药方子)只有自己拥有,而将 “私钥” 混合在一起的公钥却可以公开(相当于成药),想从混合沙堆中分别检拾出各个颜色沙粒的数量需要分别对各个颜色的沙粒数数,非常麻烦,但将它们混合在一起却非常简单。
女儿 argue 从一堆彩色沙堆中按照方子(私钥)分别拿掉不同颜色对应数量的沙粒也很麻烦,我的解释是至少不要你自己动脑子计算,你只需要机械劳作即可,另外的解释是,我这个只是梦里的一个例子,如果真想知道内中原理,就去学学 RSA 吧(这倒是我的原意)。
这就是我们生活的现代网络世界的安全保障的基石,我们之所以可以放心使用网络彼此信赖,正如我们信赖医生开药,我们信赖老字号卤味一样,我们信赖那些私密的方子配制好的成品。
整个假期的两天都在荒岛(周末我会写游记)上,没有网络信号,整个岛上没有一辆汽车,只有两辆电瓶三轮,只有一个小卖部且需要现金支付,每天只有上午 10 点到 12 点,下午 5 点到晚上 10 点有发电机发电,其它时间停电,没有派出所,没有医院,全村只有不到 20 人,每天只有一班船进岛离岛。没有网络,所携带的电脑,ipad,手机全成了砖头(整个岛只有一个移动信号塔,必须跑到码头或山顶才有微弱信号),于是就有了时间思考网络信任的基石,所思必所梦,大概就是本文的缘起。
你用一种方式将信息变成别的,再用另一种方式将信息还原,这就是非对称加密算法,我们已经用了几千年。z-f 不会告诉你操作的细节,但你依然要信任它的结果。
DH 算法的对称操作不是自然的,彼此对等交换信息并不自然。安全信任关系必然会演化成一个体系,PKI 才是自然的,而这个管理中心就是 CA,需要闭环,必然要有权威参与。完全对等的分布式去中心化,只能是理想,但凡理想都是不可能实现的,不信你看,就连 Linux kernel 社区也在慢慢污染,被几个权威中心控制,至于 blockchain,不也是被算力强大的经理控制了吗。
这是一个真正梦境里的解释,在没有电的夜晚在星空月光下写下本文,回沪后发出。
浙江温州皮鞋湿,下雨进水不会胖。