密码由加密算法 E(经常是一个随机算法) 和解密算法 D(是确定算法) 组成。定义为一个三元组 (K, M, E),全体可能的密钥(密钥空间)记为 K ,全体可能的明文空间记为 M ,全体可能的密文空间记为 E。E:K×M→E
;D:K×E→M
。
一致性方程:∀m∈M,k∈K,D(k,E(k,m)) = m。
Vernam密码(一次性密码本OTP):它的明文空间与其密文空间一样,是全体 n 位二进制字符串的集合,M=E={0,1}ⁿ
,K={0,1}ⁿ
,密钥key=(与明文等长的随机字符串)
。
c: = E(k,m) = k⊕m
;m: = D(k,c) = k⊕c
。
D(k,E(k,m)) = D(k,k⊕m) = k⊕k⊕m = m
。
给定明文 M 和密文 C 很容易求出密钥 K ,C = M⊕K,C⊕M = M⊕K⊕M,K=M⊕C
,同时可以得出,只有一个密钥 K ,能够满足 E(K,M) = C。
关于应用:Alice和Bob想要通信,必须传递一个和明文等长的密钥,这和直接安全传递明文没有区别,实际中很难应用。
关于安全:Shannon(香农)定义的安全想法是,如果得到了密文,从中无法得出一点关于明文的信息。
密码完美安全(perfect secrecy):假设有加密算法 E 和解密算法 D ,定义在三元组 (K,M,C) 上,满足如下条件:
对 M 中任意两个长度相同的明文 m0 和 m1 ,对 C 中的任意密文,满足 Pr[E(k,m0) = c] = Pr[E(k,m1) = c]
的概率关系,且密钥分布是均匀的。
对于完美安全的密码,任何唯密攻击都无效,一次性密码本有完美安全,但完美安全并不意味着一次性密码本在实际应用中是安全的。
Shannon证明了完美安全,还证明,如果一个密码是完美安全的,其全体密钥数 不少于其能处理的明文数,意味着 密钥长度必须不小于明文长度。