纠结了一阵子,还是打算啃一啃这门课,不过能啃到哪里我就不清楚了。另外,还是要不时做点笔记什么的。
基本概念:
K:所有可能的密钥(密钥空间)
M:所有可能的明文
C:所有可能的密文
E:加密算法
D:解密算法
因此可以得到:
E(k, m)=c 密钥和明文通过加密算法得到密文
D(k, c)=m 密钥和密文通过加密算法得到明文
对所有 的明文m,密钥k,D(k, E(k, m))=m 即明文通过一个密钥加密之后再经过同一个密钥解密得到的应该和明文完全相同。
当然,有个条件,你不能加密或者解密用了一辈子时间还算不出来,这样这个加密、解密算法就没有任何意义了。
也就是说,我们的加密解密算法要有效率的。
有效率意味着,时间复杂度是一个多项式的复杂度,或者实际应用中,可以定义例如对于1GB的数据我只需要1分钟即可算出来。
而一般加密算法都是随机的,也就是会随机一个密钥然后再进行加密,但是,解密算法就不能是随机的,也就是说对于给定的密钥和密文,得到的结果应该是确定的(废话)。
一个例子: XOR的One Time Pad(OTP)
M = C = {0, 1}^n, 也就是说密文和明文都是一个01串,长度为n。
密钥: 是一个和密文明文长度一样的随机的01串。
加密算法 E(k, m) = k XOR m
解密算法 D(k, m) = k XOR c
这里的XOR表示异或。
其实,该加密算法是一个Good Cipher(不知道中文一般怎么翻译)
那么对于Good Cipher的定义:
通俗的说,也就是说如果攻击者拿到了密文,他并不能得到明文的任何信息(例如替代密码我们可以通过密文的一些字符的出现概率来推算明文,这就不是一个Good Cipher)
如果是比较严格的定义是
,
这里的k服从均匀分布。
也就是说,如果攻击者拿到了密文c,这时候,他完全不知道c对应的明文是m0还是m1,因为,从m0得到和从m1得到的概率是均等的。
那么该OTP为什么是Good Cipher呢?
证明如下:
也就是说,对于任意的m和c,使得E(k,m)=c的概率是满足这个条件的k除以密钥空间的大小|K|(因为k服从均匀分布)
那么对于分子,显然为1,也就是只有1个k能满足E(k,m)=c,而对于分母|K|是定值,因此对于每个明文m来说,P(E(k,m)=c)是定值,因此该OTP是一个Good Cipher。
虽然这个加密算法是一个Good Cipher,但是并不代表这个加密算法能很好的推广使用(因为密钥实在太长了!)
但是,如果一个加密算法是Good Cipher,那么