Vernam密码(或称One-time pad),是满足perfect secrecy(完美安全)的加密方式。
Shannon对perfect secrecy的定义如下:
For every probability destribution over M and K , every plain-text m_0,m_1 \in M and every cipher text c \in C , the following holds:
Pr[C=c|M=m_0]=Pr[C=c|M=m_1] □
这个定义讲的是:从攻击者的角度来看,给定明文空间中的任意两个明文m_0,m_1,和密文空间中的任意一个密文c,c由m_0加密而来的概率,和c由m_1加密而来的概率是相等的。
简单来说,就是攻击者如果截获了一个密文c,这个密文所对应的明文可能是明文空间中的任意一个明文。所以攻击者单凭密文c是绝对无法破解出对应的明文,因为他们的概率是相等的。(任一密文,都可能由任一明文,通过任一密钥加密而得到的)。所以One-time pad是绝对安全,无法被攻破的!
举个例子,如果将一篇文章编码成一个长度为n的比特串,与一个作为密钥的长度为n的比特串异或进行加密,得到了一个长度为n的比特串密文。假设一个拥有无限算力(computational unbounded)的攻击者,想通过穷举密钥并与密文比特串异或进行破解,他能得到的是所有可以用n比特串所表示的文章,但他不知道究竟是哪篇文章才是被加密了的那篇文章!
所以任何满足perfect secrecy的加密系统是无法被破解的。
但任何满足perfect secrecy的加密系统都受制于以下两个前提:
1密钥空间的大小要至少等于明文空间的大小(密钥长度至少等于明文长度)。
2.一个密钥只能用于一次加密。
只要这两个前提中有一个不被满足,那么这个加密系统是不满足perfect secrecy的!(证明略,可以参考Inroduction to modern cryptography)
所以这导致了满足perfect secrecy的加密系统是impractical的。(密钥太长,而且只能用一次)