> 一次一密(One-Time Pad,OTP)
由美国某工程师于 1917 年提出,这玩意一开始出来的时候都没人鸟它,直到大概 25 年之后,香农挖坟挖到它,顺便用他创立的学科证明了这玩意确实某种意义上是无敌的。
都说万物皆数,信息也能表示成数字,而数字最简单的表示形式就是二进制,我们就把这个由 0 和 1 组成的字符串看作 m(Message)。加密函数和解密函数如果是同一个函数就简单了,加密的正确性要求这个函数是一个自身是自身的逆的函数,“异或”这个运算就很不错。既然是异或,那么就要密钥长度和明文一样。可以表示成:Enc_k(m)=k^m ,Dec_k(m)=k^m. 只要双方提前交换好密钥,将要发送的信息每个比特异或上对应位置的密钥发送出去,接收方再用密文异或上密钥就得到了明文。
你说你忘了异或是什么?很简单,异或就是一种“半加法”,1 异或 1 是 0(进位了),其他情况则和普通的加法一样。很明显 a 异或两次 b 的结果一定是 a,因为 2b 的最低位一定是 0。所以异或满足可逆的性质。
如此,我们就整出了“最安全的加密”——一次一密。它有多安全呢?很遗憾,我们此时还不知道安全的定义,发明它的人也不知道,直到二战快结束的时候香农提出了他的想法。我们暂时按下不表,此时我们只需要知道这个是一个“近乎完美”并且“没啥卵用”的加密方法就行了,因为二战要来了,密码学开始作为真正的焦点人物登上历史舞台。我们计算机的祖师爷图灵,马上要出场了。