密码学的关键是破译

恺撒到Enigma,这两千年里密码学的拉锯战打得火热。看《模仿游戏》里“卷福”摆弄的那台机器,艾伦·图灵也跟着火了一把。国产谍战片里翻电文、查字典、瞬间解译的画面,总能让人肾上腺素飙升。不过要明白,密码学的关键不在解码,而是破译:编密码的人想把信息变得跟天书一样难读,解密码的人则要用新法子把它变成战场上的胜败手。 想搞懂密码学得先搞清楚“为什么要加密”。作为数学密码学之父,香农定下了两条铁律:保密和真实。比如说三个人闲聊,甲和乙想私下说点悄悄话不想让丙听见,最直接的办法就是换个说法或编个暗号,这就是密码学最早的样子。 恺撒搞的那个“字母移位表”,其实是整个密码学历史的开端。古罗马的名将恺撒为了不让敌军截获消息,把26个罗马字母往后移了几个位置。比如单词“FOREST”,移个3位就成了“YGKTLZ”。电影里那种乱七八糟的电报码也就是它的升级版——只要多收几条电报,按字母出现的次数排一排,就能轻松破解。《跳舞的小人》里福尔摩斯用的就是这一招,把跳舞的小人译成了德文情报。 单表代换被破了之后,人们又想出了新招——让一个字母对应好几个密码符号,让破解者再也抓不住频率规律。比如那个表示“是”的字以前是0287,一出现就暴露了。现在换成每次随机挑0287、1675或者8276中的一个来用。加密就是数学函数F,解密就是它的逆函数F⁻¹;目的就是不能通过已知的明文和密文推出新的密文内容。 到了二战前德国海军用Enigma机加密指令的时候,波兰和英国数学家的工作可不是去截获消息而是想办法读懂每天那成千上万条密文。Enigma机的恐怖之处在于三个转子、连接板还有每天轮换的组合方式,组合起来有10¹⁴这么大的选择空间——三个转子26³是17576种排列方式;转子方向有6种变化;连接板还能交换6对字母;再加上每天换一套组合。要靠人工来穷举简直是天方夜谭。图灵小组每天只有18个小时的时间窗口。 这时候图灵带领团队造了个叫“克里斯托弗”的机器(其实是Bomb)。核心思路就是先缩小范围再用机器穷举:先利用德军公文里常出现的固定词比如“天气”、“希特勒万岁”做“锚点”,排除掉跟这些词不符合的转子组合;剩下的候选集就交给机器来穷举。速度一下子就提上去了。最后Bomb在一小时内筛选出了上百万个有效的密钥组。Enigma机被破译了,二战也因此提前两年结束。 下一次咱们再接着聊矩阵计算和数论是怎么联手打造出RSA算法的。