83版电影《火烧圆明园》中有个桥段:八国联军已经把刺刀戳进了北京城,慈禧带着儿子坐轿子跑路,但她并不知道有大臣密谋要对她下手。
小皇帝的亲叔叔奕訢知道情况,想和慈禧说悄悄话,却不能明讲,但他硬是冲进群臣的送行队伍,众目睽睽之下给慈禧递上了如图1-1所示的奏折:
图1-1
慈禧打开一看,奏折平淡无奇,无非是琐事庶务。但套上一张挖了洞的纸再看,意思就完全变了:
“当心肃顺、端华、戴桓”——这是恭亲王奕訢真正想告诉慈禧的(见图1-2)。
肃顺、端华、戴桓三人是老皇帝驾崩前任命的辅政大臣,后来我们的历史书上记载了这些人的命运:被慈禧一锅端。信息就是这么重要,奕訢和慈禧用当时“最先进”的加密解密技术巩固了权力。
图1-2
一百多年以后,读着历史书的小学生们也没闲着,他们更新了加密技术——火星文(见图1-3),用来在上课时传递信息,即使被老师抓包,这样的文字也让人一头雾水。
图1-3
现在恭喜你,只用了半分钟的时间就了解了百年对称加密史。
恭亲王奕訢想告诉慈禧:“当心肃顺、端华、戴桓”。但他不能明写,否则被肃顺等人知道,小命难保。于是只能“加密”——把短信(原文)写成一篇正儿八经的奏折(密文)。
和肃顺他们一样,慈禧拿到奏折第一眼看不出原意,要想知道,得过“解密”这关,“解密”就是把那张洞洞纸蒙在奏折上,原文含义瞬间了然。
现在你明白了,奕訢写完奏折后,加密就是取下洞洞纸,解密就是盖上洞洞纸,两者互为逆操作。
同样的思路,在小学生的火星文里,加密是把中文变成火星文,解密是把火星文变成中文,两者互为逆操作。
简单地说,加密是把原文按一定规则变成面目全非的密文,即使别人看到密文也没关系,因为他不知道意思。而发送方早已与接收方约定了转换规则,接收方能懂。接收方收到密文,把规则倒着用在密文上就能解密,原文立等可取。
加解密互为逆操作的加密方式,就是对称加密。
加密是很厉害的,但它有什么软肋呢?其实你一定想到了:如果肃顺拿到洞洞纸、如果小学老师学过火星文,那密文就会被破解,信息传输就宣告失败。
一百年来,人们一直在研究解密的方法,而且也有成功解密的时候。例如,英国计算机科学之父图灵破解了德国军队的加密系统,让德国的军事机密完全暴露在盟军的眼皮子底下,对第二次世界大战的胜利起到了重要作用。
那有没有加密方法能够阻止破解呢?答案是“非对称加密”。
非对称加密比慈禧的对称加密晚出现八十年,有了计算机网络,人们有了安全传输文件的需求,才能点燃研究的火焰。
这一把火直接烧出了“非对称加密”——一种更安全的加密技术。与对称加密不同,非对称加密不支持逆推,就算我知道了你的密文和加密方法,我也无法知道你的原文。这是怎么回事?
假设现在你想通过网络传递“good”这个单词给你的朋友彤彤,你有两个目标:
1)让彤彤收到“good”这条消息。
2)不让其他人知道你发给了彤彤“good”这条消息。
为了完成上述两个目标,你和彤彤需要这么做:
彤彤把字符串"publicKey"公开在网上,这是她的公钥,你想对她说什么悄悄话就用这把公钥加密吧!你可能觉得奇怪:用公开的字符串加密,难道不会被别人截取破解吗?
答案是不会,因为在非对称加密中,用公钥加密,无法用原公钥解密,解密只能用私钥,私钥是一串和公钥完全不同的字符串,而且只有彤彤自己掌握,她的公钥是通过她的私钥算出来的,所以你放心地用公钥加密吧!
这就好比用一把钥匙锁住的门,居然只能被另一把完全不同的钥匙打开,这的确违反常识,但却是非对称加密的核心:用公钥加密的原文,用原公钥无法解密,只能用对应的私钥解。
还有一点,通过私钥可以计算出公钥,但通过公钥无法推导出私钥。因此你现在知道了,私钥是爸爸,公钥是儿子,爸爸可以生出很多儿子,但反之并不成立。
我们用 F 表示加密算法,你可以把 F 想象成一个黑箱,黑箱就像函数 F ( x )= y 一样,把 x 塞进去,就出来个 y 。不用管中间的计算步骤,你只要知道 F 是数学天才们搞出来的就可以了。
F 足够的复杂,因而能为你提供足够的安全。
你把原文(good)送进加密函数 F 里,用彤彤的公钥(publicKey)加密后,密文(CipherText)就马上从黑箱的另一头出来了,即:
F ( good, publicKey) = CipherText
也就是说,通过publicKey加密,good变成了CipherText的样子在网络里跑,如果CipherText被晗晗截获,他能破解出来你想对彤彤说的话吗?
答案是“不能”。虽然公钥和算法都公开了,但晗晗不能逆推出原文,因为只有彤彤手里的私钥才能解密,而晗晗不知道。
彤彤接收到密文CipherText,用公开的解密函数 f 和只有自己知道的私钥privateKey就能解开密文的原文good,即:
f (CipherText, privateKey ) = good
good,彤彤现在终于知道你是个好人了。
但真正的私钥可没有这么简单,这么简单的私钥一秒钟就能被电脑猜到,现实里的它们一般是如图1-4所示的这个样子:
图1-4
稍微有点长,但是公钥和私钥总是成对出现,公钥由私钥生成。公钥公开发布在网上,供信息发送者加密原文,私钥被紧紧抓在信息接收者自己手里,用来解密发送者的密文。
非对称加密深深影响着这个时代。
如果非对称加密早30年出现,被德军使用,英国人再厉害,也不可能知晓德国人内部在讲些什么。
而如果今天还没出现非对称加密技术,至少微信支付、支付宝和手机银行都不会存在,并且网络里将没有任何安全性可言,因为任意一个人都可以随时冒充别人。
但是,它却不失时机地出现了。于是,这个世界变成一个在技术的支持下可以尽情说悄悄话的时代,即使有人偷听,也不用担心,因为偷听的人不懂,但你懂,而且会用。