你是你与你说的是你说的•非对称加密

32 4~5 min

先玩个游戏吧。打开你的计算器,在心中随便想一个五位数,把它乘上2359,得到了一个新数字,取它的后五位。现在,这个五位数与原来的五位数毫不相干,可你只要把它告诉🐢,🐢就能得出你原来的数字是什么。

让我们亲手试一试:把这个新五位数乘上12039,咦,后五位正是你所想的五位数。

这是魔术吗,不,这其实是模数。

就在刚刚,你进行了一次非对称加密,这也是现代网络安全的基石。

对称加密与非对称加密

你知道凯撒密码吗,例如🐢想要加密“114514”(称作明文),只需要在每一位加上一个数字,如2,得到了“336736”(称作密文)。现在,如果🐢把它发给了🍄,🍄只要知道🐢使用的数字2,便可以轻松解密。在这里,我们把2叫做密钥。而加密者与解密者使用的密钥相同,就叫对称加密。

但如果用它发布文本,就会出现问题——密钥可以被反推。在英文中,e的出现概率最大,找到新出现最大概率的字母,密钥就可以被猜出。这,就叫概率分析法。

或者,在一开始,🐢必须把密钥发给🍄,如果一队麻匪在路上偷走了密钥,之后的所有信息便都不安全。(🐢:麻匪,任何时候都要剿,不剿不行!)这就叫不安全信道。

非对称加密完美解决了这个问题。在非对称加密中,有两个不同的密钥,一个称为私钥,另一个称为公钥。在文章开头的例子里,2359被称为公钥,所有人都可以得到他,12039为私钥,被保存在🐢手里。这就像一个信箱,所有人都可以投入信件,但只有主人才拥有钥匙。

现在让我们重新发送一次信息。🍄生成了一对密钥(即一公钥:9,一私钥:1888889)。之后,🍄将公钥发给所有人。现在假设🐢还是要向🍄发送“114514”,那么只要按照开头的游戏,计算后得到密文“030626”并加上电子签名发给🍄。🍄也按计算规则还原就好。

现在,哪怕麻匪拿到了“9”和“30626”也没有用,这就是非对称加密。

但是这种方法显然并不适合真正应用。

聪明的你肯定已经发现了,这一切加密都依靠着9×188889=1700001。尾数的那一串零就是关键。麻匪只要用1000001加上n个1000000并除以9找到整除的结果便猜出了私钥。所以,在现在常用的RSA算法中,密钥对的生成依赖于活板门单向函数(例如哈希函数)。正如名字一样,这是一类正向好算逆推极难的函数。(🐢:就像答案和数学考试卷)

具体实现我们会再开一期。