怎样传送密信?

战争的时候各个部队要协同作战,请求支援,通报战况,这些都离不开传递消息。但是战场上的情况错综复杂,如果传送情报的人员被敌方抓住了怎么办?古代的人也很聪明的,他们发明了简单的办法把信息加密,除了发送和接收信息的将军之外,其他人就是得到了书信也看不懂上面写了什么。

今天爸爸先和你们一起做一个模仿古代将军送密信的工具。我们先准备一条长纸条。再找一个圆柱形的物品。把纸条缠绕在圆柱体上。然后在上面写信,每写一个字母,移到相邻的下一个纸条上继续写(见图),写完以后把纸条拿下来,展开以后便成了乱七八糟的字母。假如爸爸是一个将军,哥哥是另一个战场的将军,现在阿妹你是信使,拿去给哥哥的路上假装被妈妈截走了,看妈妈能不能看懂?(Congress shall make no law respecting an establishment of religion, or prohibiting the free exer, 宪法第一修正案)

除非接收密信的人和我们有一个同样直径的瓶子,从纸条上很难猜到原来的文字。哥哥和阿妹尝试了把纸条缠到一根擀面杖上,都找不到一个有意义的词,只有一个和CIGAR(雪茄)有点像。实际上,通信双方可以用更复杂一点,不规则的东西来缠绕纸条,这样要破解它就更难了。哥哥和阿妹说,二战时德军发明了谜式密码机,也是非常难破解的。

现在爸爸大概说一下加密的演化。和古代的把字符打乱的方法不一样,现代的加密要把字符做变换。最简单的例子是这样,我们把字母移动一定位置,比如右移3位,所有的A都写成D, B写成E,X写成A,Z写成C。这样就生成了加密的文本。知道加密规则的人可以很容易把文本解密。

上面例子里的方法有两个明显的问题,一是位移的可能性不多,容易被猜出来。二是字母是一一对应的,根据单词出现的频率,也有可能被猜出其对应关系。那么我们来看一个更好的办法,比如我们把书信变换成一个数字,A是1,B是2,依次类推。然后我们乘上一个秘密的数字,把它变为另一串数字。需要解密时对方根据约定的秘密乘数做一个除法,就把原来信息还原了。这个办法消除了字母之间一一对应的关系和增加了秘密数字的选择范围。

这些方法都是对称加密,加密解密使用同一个秘密数字叫密钥。这个密钥要预先约定好,或通过其它安全途径传输给对方。一旦丢失的话秘密就不存在了。我们现在用的加密则是非对称加密。一个密钥通过算法变为两个部分,公钥和私钥,加密的人只需要公钥,解密的人还需要私钥。因为私钥是接受方自己留着的,不需要给任何人的,所以安全性很高。