本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得加粗的重点),欢迎斧正,QQ:2570101165
上一章讲了古典密码,用很少的计算量就能攻破。
这章讲另一个极端——完美保密(perfectly secret),将从这个概念的定义和其应该满足的条件入手。
这章内容不是现代密码学!!!因为它只有1.4三个原则中的定义和证明,并没有依赖假设。虽然更简单但却因此有了局限性
改颜色方法1
改 颜 色 方 法 2 \color{blue} 改颜色方法2 改颜色方法2
改颜色方法3
本章使用 包含随机选择算法的概率实验 来定义安全性并分析方案,所以本节先讨论一下适用于密码学应用的随机生成问题
在整本书中,我们将简单地假设各方都能获得无限的、独立的、无偏的随机比特。本节就是讨论实际操作时,这些随机比特怎么生成。
例如:投掷一枚均匀的硬币(fair coin)
缺点:不方便,规模小
“uniform”我的理解是均匀、等概、足够随机
分清楚高熵和均匀的区别!!!
一个真实硬币(正面概率: p p p 反面概率: 1 − p 1-p 1−p)抛一千次得到的数据具有高熵,但是并不uniform
上述问题解决办法(高熵->uniform)
一个想法:把正正和反反定义为第三态,即三进制。“第三态”出现的概率会大于其它两种,会不会和这个世界的量子层面的规律重合?这样做还能把将近一半废弃的数据重新利用起来
应该使用为加密而设计的随机数生成器,而不是不适合密码学应用的“通用”随机数生成器。例如:C语言stdlib.h库中的rand()函数不符合密码学安全要求(随机化种子一样,产生的随机数就一样,因此是一种伪随机)
5.6.4将继续涉及如何把高熵数据转化为uniform的比特串
只能要求截获比周期短的一段时不会泄露更多信息,这样的序列称为伪随机序列
流密码中经常用,这儿仅作为联系与补充
游程
例如00110111,前两个数字00,称为0的2游程;接着是11,是1的2游程;再下来是0的1游程和1的3游程
GF(2)上周期为 T T T的序列 { a i } \left\{a_i\right\} {ai}的自相关函数定义
R ( τ ) = 1 T ∑ k = 1 T ( − 1 ) a k ( − 1 ) a k + τ , 0 ≤ τ ≤ T − 1 R(\tau)=\frac{1}{T}\sum_{k=1}^T(-1)^{a_k}(-1)^{a_{k+\tau}},\quad 0\leq\tau\leq T-1 R(τ)=T1k=1∑T(−1)ak(−1)ak+τ,0≤τ≤T−1
定义中的和式表示序列 { a i } \left\{a_i\right\} {ai}与 { a i + τ } \left\{a_{i+\tau}\right\} {ai+τ}(序列 { a i } \left\{a_i\right\} {ai}向后平移 τ \tau τ位得到)在一个周期内对应位相同的位数与对应位不同的位数之差。当 τ = 0 \tau=0 τ=0时, R ( τ ) = 1 R(\tau)=1 R(τ)=1;当 τ ≠ 0 \tau\neq0 τ=0时,称 R ( τ ) R(\tau) R(τ)为异相自相关函数
在序列的一个周期内,0与1的个数相差最多为1
在序列的一个周期内,长为1的游程占游程总数的 1 2 \frac{1}{2} 21,长为2的游程占游程总数的 1 2 2 \frac{1}{2^2} 221,…,长为 i i i的游程占游程总数的 1 2 i \frac{1}{2^i} 2i1,…,且在等长的游程中0的游程个数和1的游程个数相等
异自相关函数是一个常数
公设(1)说明 { a i } \left\{a_i\right\} {ai}中0与1出现的概率基本上相同
公设(2)说明0与1在序列中每一位置出现的概率相同
公设(3)意味着通过对序列与其平移后的序列做比较,不能给出任何信息
在一个周期内,0与1出现的次数分别为 2 n − 1 − 1 2^{n-1}-1 2n−1−1和 2 n − 1 2^{n-1} 2n−1
在一个周期内,总游程数为 2 n − 1 2^{n-1} 2n−1;对 1 ≤ i ≤ n − 2 1\leq i\leq n-2 1≤i≤n−2,长为 i i i的游程有 2 n − i − 1 2^{n-i-1} 2n−i−1个,且0、1游程各半;长为 n − 1 n-1 n−1的0游程一个,长为 n n n的1游程一个
{ a i } \left\{a_i\right\} {ai}的自相关函数为(证明略)
R ( τ ) = { 1 , τ = 0 − 1 2 n − 1 − 1 , 0 < τ ≤ 2 n − 2 R(\tau)= \begin{cases} 1,\qquad\qquad\tau=0\\\\ -\frac{1}{2^{n-1}-1},\quad 0<\tau\leq2^n-2 \end{cases} R(τ)=⎩⎪⎨⎪⎧1,τ=0−2n−1−11,0<τ≤2n−2
一个加密方案包含三个算法( G e n , E n c , D e c \mathrm{Gen,Enc,Dec} Gen,Enc,Dec)和一个有限的消息空间 M \mathcal{M} M( ∣ M ∣ > 1 \lvert\mathcal{M}\rvert>1 ∣M∣>1)
G e n \mathrm{Gen} Gen是个概率(probabilistic)算法,它生成的全部密钥 k k k构成的(有限)集合称为密钥空间 K \mathcal{K} K
E n c \mathrm{Enc} Enc也是一个概率算法(所以 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)在多次运行时可能会输出不同的密文 c c c),我们用 c ← E n c k ( m ) c\leftarrow\mathrm{Enc}_k(m) c←Enck(m)表示这个过程(如果 E n c \mathrm{Enc} Enc是确定性的,我们可以用 c : = E n c k ( m ) c:=\mathrm{Enc}_k(m) c:=Enck(m)来强调), m ∈ M , k ∈ K m\in\mathcal{M},k\in\mathcal{K} m∈M,k∈K
有一说一我没想到合适的例子(学长提示,很多用到随机数的公钥加密会用到,例如Elgamal加密算法)
以后我们也可以用 x ← S x\leftarrow S x←S 来表示从集合 S S S中均匀挑选 x x x(uniform selection)
我们把 E n c k ( m ) \mathrm{Enc}_k(m) Enck(m)的所有输出 c c c构成的集合称为 C \mathcal{C} C
D e c \mathrm{Dec} Dec是一个不失一般性的确定性算法,完美正确性(perfect
correctness)要求每次解密都百分百正确,即 m : = D e c k ( c ) m:=\mathrm{Dec}_k(c) m:=Deck(c), c ∈ C , k ∈ K , m ∈ M c\in\mathcal{C},k\in\mathcal{K},m\in\mathcal{M} c∈C,k∈K,m∈M
我认为这儿在强调解密的不二性
K , M , C \mathcal{K},\mathcal{M},\mathcal{C} K,M,C的分布
背景:攻击者知道 m m m的概率分布 + 知道加密方案 + 仅不知道密钥 + 唯密文攻击
P r [ M = m ∣ C = c ] = P r [ M = m ] P r [ C = c ] > 0 (2.1) \mathrm{Pr}[M=m\mid C=c]=\mathrm{Pr}[M=m]\qquad \mathrm{Pr}[C=c]>0 \tag{2.1} Pr[M=m∣C=c]=Pr[M=m]Pr[C=c]>0(2.1)
一个方案若满足等式2.1,则该方案是完美保密的
解释:消息m被发送的先验概率(priori probability),与 以密文c被观察到为前提而推出消息m被发送 的后验概率(posteriori probability)相同
即,密文不会透露任何关于底层明文的信息
P r [ E n c K ( m ) = c ] = P r [ E n c K ( m ′ ) = c ] (2.2) \mathrm{Pr}[\mathrm{Enc}_K(m)=c]=\mathrm{Pr[\mathrm{Enc}_K(m')=c]} \tag{2.2} Pr[EncK(m)=c]=Pr[EncK(m′)=c](2.2)
一个方案对任意 m , m ′ ∈ M c ∈ C m,m'\in\mathcal{M}\ \ \ c\in\mathcal{C} m,m′∈M c∈C都满足等式2.2,则该方案是完美保密的
解释:密文的概率分布不依赖于明文
假设 P r [ M = m ] > 0 P r [ C = c ] > 0 \mathrm{Pr}[M=m]>0\quad\mathrm{Pr}[C=c]>0 Pr[M=m]>0Pr[C=c]>0,则有
P r [ C = c ∣ M = m ] = P r [ E n c K ( M ) = c ∣ M = m ] = P r [ E n c K ( m ) = c ] \mathrm{Pr}[C=c\mid M=m]=\mathrm{Pr}[\mathrm{Enc}_K(M)=c\mid M=m]=\mathrm{Pr}[\mathrm{Enc}_K(m)=c] Pr[C=c∣M=m]=Pr[EncK(M)=c∣M=m]=Pr[EncK(m)=c]
第一个等号:根据随机变量 C C C的定义;第二个等号:我们的前提条件就是 M = m M=m M=m,即明文已知
设:
δ c = def P r [ E n c K ( m ) = c ] = P r [ C = c ∣ M = m ] = P r [ E n c K ( m ′ ) = c ] = P r [ C = c ∣ M = m ′ ] \begin{aligned} \delta_c &\overset{\text{def}}=\mathrm{Pr}[\mathrm{Enc}_K(m)=c]=\mathrm{Pr}[C=c\mid M=m]\\ &=\mathrm{Pr}[\mathrm{Enc}_K(m')=c]=\mathrm{Pr}[C=c\mid M=m'] \end{aligned} δc=defPr[EncK(m)=c]=Pr[C=c∣M=m]=Pr[EncK(m′)=c]=Pr[C=c∣M=m′]
则:
P r [ M = m ∣ C = c ] = P r [ C = c ∣ M = m ] ⋅ P r [ M = m ] P r [ C = c ] = P r [ C = c ∣ M = m ] ⋅ P r [ M = m ] ∑ m ′ ∈ M P r [ C = c ∣ M = m ′ ] ⋅ P r [ M = m ′ ] = δ c ⋅ P r [ M = m ] ∑ m ′ ∈ M δ c ⋅ P r [ M = m ′ ] = P r [ M = m ] ∑ m ′ ∈ M P r [ M = m ′ ] = P r [ M = m ] ′ ′ \begin{aligned} \mathrm{Pr}[M=m\mid C=c] &=\frac{\mathrm{Pr}[C=c\mid M=m]\cdot \mathrm{Pr}[M=m]}{\mathrm{Pr}[C=c]}\\ &=\frac{\mathrm{Pr}[C=c\mid M=m]\cdot \mathrm{Pr}[M=m]}{\sum_{m'\in\mathcal{M}}\mathrm{Pr}[C=c\mid M=m']\cdot \mathrm{Pr}[M=m']}\\ &=\frac{\delta_c\cdot\mathrm{Pr}[M=m]}{\sum_{m'\in\mathcal{M}}\delta_c\cdot\mathrm{Pr}[M=m']}\\ &=\frac{\mathrm{Pr}[M=m]}{\sum_{m'\in\mathcal{M}}\mathrm{Pr}[M=m']}\ =\ \mathrm{Pr}[M=m] \end{aligned}'' Pr[M=m∣C=c]=Pr[C=c]Pr[C=c∣M=m]⋅Pr[M=m]=∑m′∈MPr[C=c∣M=m′]⋅Pr[M=m′]Pr[C=c∣M=m]⋅Pr[M=m]=∑m′∈Mδc⋅Pr[M=m′]δc⋅Pr[M=m]=∑m′∈MPr[M=m′]Pr[M=m] = Pr[M=m]′′
前者从理论出发,后者从实验实践角度出发
Π = ( G e n , E n c , D e c ) \Pi=(\mathrm{Gen,Enc,Dec}) Π=(Gen,Enc,Dec)是带有消息空间 M \mathcal{M} M的加密方案, A \mathcal{A} A是敌人(形式上只是一个(有状态的)算法),eav我盲猜是eavesdrop
A \mathcal{A} A输出一对消息$m_0,m_1\in $ M \mathcal{M} M
G e n \mathrm{Gen} Gen生成一个密钥 k k k,再选择一个统一均匀的比特 b ∈ { 0 , 1 } b\in\left\{0,1\right\} b∈{0,1}。计算密文 c ← E n c k ( m b ) c\leftarrow\mathrm{Enc}_k(m_b) c←Enck(mb)并交给 A \mathcal{A} A。将 c c c称为挑战密文(challenge ciphertext)。
A \mathcal{A} A输出一个比特 b ′ b' b′
① b ′ = b , o u t p u t = 1 ①b'=b,output=1 ①b′=b,output=1;
② b ′ ≠ b , o u t p u t = 0 b'\neq b,output=0 b′=b,output=0;
③ o u t p u t = 1 , P r i v K A , Π e a v = 1 ③output=1,\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=1 ③output=1,PrivKA,Πeav=1,即 A \mathcal{A} A攻击成功
是 Π \Pi Π不是 ∏ \prod ∏
当 Π \Pi Π对所有攻击者 A \mathcal{A} A,都能保证满足下式,则称该方案是完美不可区分(perfectly indistinguishable)
P r i v K A , Π e a v = 1 2 (2.3) \mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=\frac{1}{2} \tag{2.3} PrivKA,Πeav=21(2.3)
一个只会选一边的傻子都能猜对一半,而我们目的就是把所有人尽量变成傻子
当且仅当加密方案 Π \Pi Π是完美不可区分时,该方案是完美保密的
前提:假设消息空间是两个字符的字符串,密钥长度在 { 1 , 2 } \left\{1,2\right\} {1,2}中均匀等概选择
A \mathcal{A} A执行以下操作
输出明文 m 0 = a a , m 1 = a b m_0=aa,m_1=ab m0=aa,m1=ab
得到挑战明文 c = c 1 c 2 c=c_1c_2 c=c1c2, c 1 = c 2 c_1=c_2 c1=c2时,输出0; c 1 ≠ c 2 c_1\neq c_2 c1=c2时,输出1
这儿的 c 1 c_1 c1和 c 2 c_2 c2表示单个字符
这儿的输出是 A \mathcal{A} A的输出,不是实验的输出
攻击成功率的通用算法
P r [ P r i v K A , Π e a v = 1 ] = 1 2 ⋅ P r [ P r i v K A , Π e a v = 1 ∣ b = 0 ] + 1 2 ⋅ P r [ P r i v K A , Π e a v = 1 ∣ b = 1 ] = 1 2 ⋅ P r [ A o u t p u t s 0 ∣ b = 0 ] + 1 2 ⋅ P r [ A o u t p u t s 1 ∣ b = 1 ] (2.4) \begin{aligned} &\mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=1]\\ &=\frac{1}{2}\cdot\mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=1\mid b=0]+\frac{1}{2}\cdot\mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=1\mid b=1]\\ &=\frac{1}{2}\cdot\mathrm{Pr}[\mathcal{A}\ \mathrm{outputs\ 0}\mid b=0]+\frac{1}{2}\cdot\mathrm{Pr}[\mathcal{A}\ \mathrm{outputs\ 1}\mid b=1] \end{aligned} \tag{2.4} Pr[PrivKA,Πeav=1]=21⋅Pr[PrivKA,Πeav=1∣b=0]+21⋅Pr[PrivKA,Πeav=1∣b=1]=21⋅Pr[A outputs 0∣b=0]+21⋅Pr[A outputs 1∣b=1](2.4)
对于该例子本身
P r [ A o u t p u t s 0 ∣ b = 0 ] = 1 2 + 1 2 ⋅ 1 26 ≈ 0.52 \mathrm{Pr}[\mathcal{A}\ \mathrm{outputs\ 0}\mid b=0]=\frac{1}{2}+\frac{1}{2}\cdot\frac{1}{26}\approx 0.52 Pr[A outputs 0∣b=0]=21+21⋅261≈0.52
①密钥长度为1
②密钥长度为2,且密钥两个字符相同
P r [ A o u t p u t s 1 ∣ b = 1 ] = 1 − P r [ A o u t p u t s 0 ∣ b = 1 ] = 1 − 1 2 ⋅ 1 26 ≈ 0.98 \mathrm{Pr}[\mathcal{A}\ \mathrm{outputs\ 1}\mid b=1]=1-\mathrm{Pr}[\mathcal{A}\ \mathrm{outputs\ 0}\mid b=1]=1-\frac{1}{2}\cdot\frac{1}{26}\approx 0.98 Pr[A outputs 1∣b=1]=1−Pr[A outputs 0∣b=1]=1−21⋅261≈0.98
明文选 a b ab ab,密文两个字符还能相同,仅当密钥长度为2且密钥的后一个字符比前一个字符大1(例如: b a , c b , d c ba,cb,dc ba,cb,dc等)
P r [ P r i v K A , Π e a v = 1 ] = 1 2 ⋅ ( 1 2 + 1 2 ⋅ 1 26 + 1 − 1 2 ⋅ 1 26 ) = 0.75 > 1 2 \mathrm{Pr}[\mathrm{PrivK}^\mathrm{eav}_{\mathcal{A},\Pi}=1]=\frac{1}{2}\cdot\Big(\frac{1}{2}+\frac{1}{2}\cdot\frac{1}{26}+1-\frac{1}{2}\cdot\frac{1}{26}\Big)=0.75>\frac{1}{2} Pr[PrivKA,Πeav=1]=21⋅(21+21⋅261+1−21⋅261)=0.75>21
这个“一次(one-time)”我的理解:1. 一次性;2. 每个明密文对和一个密钥字符对应,即每个密钥字符用一次
确定整数 l > 0 \mathscr{l}>0 l>0, M , K , C = { 0 , 1 } l \mathcal{M,K,C}=\left\{0,1\right\}^{\mathscr{l}} M,K,C={0,1}l(长度为 l \mathscr{l} l的二进制字符串)
例如 { 0 , 1 } 3 = { 000 , 001 , 010 , 011 , 100 , 101 , 110 , 111 } \left\{0,1\right\}^3=\left\{000,001,010,011,100,101,110,111\right\} {0,1}3={000,001,010,011,100,101,110,111}
G e n \mathrm{Gen} Gen:从 { 0 , 1 } l \left\{0,1\right\}^{\mathscr{l}} {0,1}l(共 2 l 2^{\mathscr{l}} 2l个比特串)中均匀地随机选择一个作为密钥,每个比特串被选择的概率均为 2 − l 2^{-\mathscr{l}} 2−l
E n c : c : = k ⊕ m \mathrm{Enc}:\ c:=k\oplus m Enc: c:=k⊕m
D e c : m : = k ⊕ c \mathrm{Dec}:\ m:=k\oplus c Dec: m:=k⊕c
" ⊕ \oplus ⊕’'表示逐位异或(exclusive-or(XOR)),与二进制加减法等价( 1 ⊕ 1 = 0 , 1 ⊕ 0 = 1 , 0 ⊕ 1 = 1 , 0 ⊕ 0 = 0 1\oplus1=0,1\oplus0=1,0\oplus1=1,0\oplus0=0 1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0)
即 D e c k ( E n c k ( m ) ) = k ⊕ k ⊕ m = m \mathrm{Dec}_k(\mathrm{Enc}_k(m))=k\oplus k\oplus m=m Deck(Enck(m))=k⊕k⊕m=m
The one-time pad encryption scheme is perfectly secret.
P r [ C = c ∣ M = m ′ ] = P r [ E n c K ( m ′ ) = c ] = P r [ m ′ ⊕ K = c ] = P r [ K = m ′ ⊕ c ] = 2 − l \begin{aligned} \mathrm{Pr}[C=c\mid M=m']=\mathrm{Pr}[\mathrm{Enc}_K(m')=c]&=\mathrm{Pr}[m'\oplus K=c]\\ &=\mathrm{Pr}[K=m'\oplus c]\\ &=2^{-\mathscr{l}} \end{aligned} Pr[C=c∣M=m′]=Pr[EncK(m′)=c]=Pr[m′⊕K=c]=Pr[K=m′⊕c]=2−l
P r [ C = c ] = ∑ m ′ ∈ M P r [ C = c ∣ M = m ′ ] ⋅ P r [ M = m ′ ] = 2 − l ⋅ ∑ m ′ ∈ M P r [ M = m ′ ] = 2 − l P r [ M = m ′ ] ≠ 0 \begin{aligned} \mathrm{Pr}[C=c]&=\sum_{m'\in\mathcal{M}}\mathrm{Pr}[C=c\mid M=m']\cdot\mathrm{Pr}[M=m']\\ &=2^{-\mathscr{l}}\cdot\sum_{m'\in\mathcal{M}}\mathrm{Pr}[M=m']\\ &=2^{-\mathscr{l}}\qquad \qquad \qquad \quad \quad \mathrm{Pr}[M=m']\neq0 \end{aligned} Pr[C=c]=m′∈M∑Pr[C=c∣M=m′]⋅Pr[M=m′]=2−l⋅m′∈M∑Pr[M=m′]=2−lPr[M=m′]=0
举个我理解的 P r [ M = m ′ ] = 0 \mathrm{Pr}[M=m']=0 Pr[M=m′]=0的例子: l = 3 , m ′ = 1010 \mathscr{l}=3,m'=1010 l=3,m′=1010
上世纪中期很多国家机关用这个方案,冷战时苏联和美国通信时就用过(red phone),一堆特工带着一个放着密钥的黑箱子,物 理 转 移
这个男人可能就干过这事儿
缺点1:消息长度与时效性之间的冲突
消息一长,就很难预测长度(上限),密钥就难确定。确定一个新的密钥很浪费时间,传输也是个问题。
缺点2:只有使用第一次时才绝对安全,用了两次就会出现下面这种情况:
c ⊕ c ′ = ( m ⊕ k ) ⊕ ( m ′ ⊕ k ) = m ⊕ m ′ c\oplus c'=(m\oplus k)\oplus(m'\oplus k)=m\oplus m' c⊕c′=(m⊕k)⊕(m′⊕k)=m⊕m′
该结果就是两条消息的不同之处,很有可能会泄露一些信息,至少绝对不算完美保密了。苏联当年就是因为这个在英国和美国面前裸奔了几十年(VENONA 计划)
有缺点不代表one-time pad无效!!
如果 Π \Pi Π是完美保密方案,则 ∣ K ∣ ≥ ∣ M ∣ \lvert\mathcal{K}|\geq|\mathcal{M}\rvert ∣K∣≥∣M∣
任何完全保密的加密方案都必须有一个密钥空间,这个密钥空间至少与消息空间一样大。
反证法,假设 ∣ K ∣ < ∣ M ∣ \lvert\mathcal{K}|<|\mathcal{M}\rvert ∣K∣<∣M∣
M ( c ) = def { m ∣ m = D e c k ( c ) f o r s o m e k ∈ K } \mathcal{M}(c)\overset{\text{def}}=\left\{m\mid m=\mathrm{Dec}_k(c)\ \mathrm{for\ some\ }k\in\mathcal{K}\right\} M(c)=def{m∣m=Deck(c) for some k∈K}
P r [ M = m ′ ∣ C = c ] = 0 ≠ P r [ M = m ′ ] \mathrm{Pr}[M=m'\mid C=c]=0\neq\mathrm{Pr}[M=m'] Pr[M=m′∣C=c]=0=Pr[M=m′]
所以不是完美保密
书上原话:Recall that we may assume D e c \mathrm{Dec} Dec is deterministic.
我认为这儿是再次强调解密的不二性
表明one-time pad的缺点并不是特定于该方案,而是完全保密的固有限制。(长度与次数都是)
上述证明过程已经显示出完美保密的固有局限性,因此以后出现任何宣称自己用短密钥实现完美保密的均按神经病处理(理解妄想成打破密码学的能量守恒定律)
虽然one-time pad是完美保密,但两者并不是完全等价的
如果所有密钥的长度都相同,并且消息空间由长度固定的所有字符串组成,这意味着密钥至少与消息一样长。(one-time pad的密钥长度是最优解)
第4点马上再次提到
老师提到密钥空间大一般只是说防止暴力攻击,没提到这是完美保密的条件之一
加密其实就是打乱明密文映射的一个过程(如下)
移位密码(m和c代表单个字母)
密钥长度为1(26进制),密钥空间大小为26
注意区分“space”和“length”之间的区别,下同
所以只有在加密一个字母(26进制)时,移位密码是完美保密的
单表代换密码(m和c代表单个字母)
密钥空间为 26 ! ≈ 2 88 26!\approx2^{88} 26!≈288,理论上很安全,那为什么实际不安全呢?
因为没做到 the probability distribution of the ciphertext does not depend on the plaintext(P29倒数第10行),即密文不uniform
当然移位密码也没做到
此处建议回忆一下对该两种密码的攻击方式
至于多表代换密码(m和c代表单个字母)
可能会出现下面这种情况
设密钥长度为 l K l_K lK,则密钥空间大小为 2 6 l K 26^{l_K} 26lK;明文长度为 l M l_M lM,明文空间大小为 2 6 l M 26^{l_M} 26lM
所以 l K ≥ l M l_K\geq l_M lK≥lM时,Vigenère密码是完美保密的(结合上面第2点)
我觉得为one-time pad申请专利的Vernam(弗纳姆)就是个白嫖Vigenère的坏蛋(个人偏见)
那如果 ∣ K ∣ > ∣ M ∣ \lvert\mathcal{K}|>|\mathcal{M}\rvert ∣K∣>∣M∣呢?
可能会发生这种情况(m和c代表明密文本身)
即两个密钥加密某个明文得到一摸一样的结果(殊途同归),攻击者是不是会多条破解密文的道路?(更直观的说:以前必须找到 k 1 k_1 k1才行,现在找到 k 1 , k 2 k_1,k_2 k1,k2甚至 k 3 k_3 k3中的一个就能成功破解)是不是变得不安全了?
应该不是,举个例子
综上,一个密钥对应着一种随机的明密文映射关系。如果密钥比消息少的话,肯定会有部分映射关系可以排除,即减少了错误路线的数量
而攻击者一可以减少工作量,二可以从排除的路线中推导出一些额外信息,这些信息可能足以攻破该系统
香农就是这位大兄弟(苹果我放的)
前提: ∣ M ∣ = ∣ K ∣ = ∣ C ∣ \vert\mathcal{M}\vert=\vert\mathcal{K}\vert=\vert\mathcal{C}\vert ∣M∣=∣K∣=∣C∣
理解这个“=”:看做完美保密的“最优解”(至少做到了不浪费)
条件
一个密钥唯一对应着一种随机的明密文映射关系,也意味着任何密文都可能是加密任何可能明文的结果
示例如下图:
下面这个我原来举的例子(m和c代表明密文本身)是错的!!(至少对一次一密钥来说)
因为不同的密钥却有一组一样的明密文映射关系:e.g.: m 1 − > c 4 ( k 2 , k n ) m_1\ ->c_4\ (k_2,k_n) m1 −>c4 (k2,kn)
假设 E n c \mathrm{Enc} Enc是一个确定性算法(可以证明这样不失一般性)
理所当然地没太理解
满足条件1,2—> perfectly secret
P r [ C = c ∣ M = m ] = P r [ K = k ] = 1 / ∣ K ∣ f o r E n c k ( m ) = c \mathrm{Pr}[C=c\mid M=m]=\mathrm{Pr}[K=k]=1/\vert\mathcal{K}\vert\qquad for\quad\mathrm{Enc}_k(m)=c Pr[C=c∣M=m]=Pr[K=k]=1/∣K∣forEnck(m)=c
条件2保证 k k k是唯一密钥,条件1保证最后一个等号成立
所以
P r [ C = c ] = ∑ m ∈ M P r [ E n c K ( m ) = c ] ⋅ P r [ M = m ] = 1 / ∣ K ∣ \mathrm{Pr}[C=c]=\sum_{m\in\mathcal{M}} \mathrm{Pr}[\mathrm{Enc}_K(m)=c]\cdot\mathrm{Pr}[M=m]=1/\vert\mathcal{K}\vert Pr[C=c]=m∈M∑Pr[EncK(m)=c]⋅Pr[M=m]=1/∣K∣
注意是大写 K K K(下同),所以 P r [ E n c K ( m ) = c ] = 1 / ∣ K ∣ \mathrm{Pr}[\mathrm{Enc}_K(m)=c]=1/\vert\mathcal{K}\vert Pr[EncK(m)=c]=1/∣K∣
该式子对于呈任何分布的 M \mathcal{M} M都成立
对于任何 P r [ M = m ] ≠ 0 \mathrm{Pr}[M=m]\neq0 Pr[M=m]=0
P r [ M = m ∣ C = c ] = P r [ C = c ∣ M = m ] ⋅ P r [ M = m ] P r [ C = c ] = P r [ E n c K ( m ) = c ] ⋅ P r [ M = m ] P r [ C = c ] = ∣ K ∣ − 1 ⋅ P r [ M = m ] ∣ K ∣ − 1 = P r [ M = m ] \begin{aligned} \mathrm{Pr}[M=m\mid C=c] &=\frac{\mathrm{Pr}[C=c\mid M=m]\cdot \mathrm{Pr}[M=m]}{\mathrm{Pr}[C=c]}\\ &=\frac{\mathrm{Pr}[\mathrm{Enc}_K(m)=c]\cdot \mathrm{Pr}[M=m]}{\mathrm{Pr}[C=c]}\\ &=\frac{\vert\mathcal{K}\vert^{-1}\cdot \mathrm{Pr}[M=m]}{\vert\mathcal{K}\vert^{-1}}=\mathrm{Pr}[M=m] \end{aligned} Pr[M=m∣C=c]=Pr[C=c]Pr[C=c∣M=m]⋅Pr[M=m]=Pr[C=c]Pr[EncK(m)=c]⋅Pr[M=m]=∣K∣−1∣K∣−1⋅Pr[M=m]=Pr[M=m]
注意理解 P r [ C = c ∣ M = m ] = P r [ E n c K ( m ) = c ] \mathrm{Pr}[C=c\mid M=m]=\mathrm{Pr}[\mathrm{Enc}_K(m)=c] Pr[C=c∣M=m]=Pr[EncK(m)=c],这儿的 M = m M=m M=m可不是给定的条件,因为 m m m是任取的(arbitrary)
所以该方案是完美保密的
perfectly secret—>条件1,2成立(在 ∣ M ∣ = ∣ K ∣ = ∣ C ∣ \vert\mathcal{M}\vert=\vert\mathcal{K}\vert=\vert\mathcal{C}\vert ∣M∣=∣K∣=∣C∣ 的前提下)
对于任意 c ∈ C c\in\mathcal{C} c∈C,一定存在信息 m ∗ ∈ M m^*\in M m∗∈M满足 P r [ E n c K ( m ∗ ) = c ] ≠ 0 \mathrm{Pr}[\mathrm{Enc}_K(m^*)=c]\neq0 Pr[EncK(m∗)=c]=0
引理1暗含着对于所有 m ∈ M m\in M m∈M, P r [ E n c K ( m ) = c ] ≠ 0 \mathrm{Pr}[\mathrm{Enc}_K(m)=c]\neq0 Pr[EncK(m)=c]=0。换言之,令 M = { m 1 , m 2 , . . . } \mathcal{M}=\left\{m_1,m_2,...\right\} M={m1,m2,...},则对于每个 m i ∈ M m_i\in\mathcal{M} mi∈M,都有一个非空集 K i ⊂ K \mathcal{K}_i\subset\mathcal{K} Ki⊂K,当且仅当 k ∈ K i k\in\mathcal{K}_i k∈Ki时, E n c k ( m i ) = c \mathrm{Enc}_k(m_i)=c Enck(mi)=c
当 i ≠ j i\neq j i=j时, K i \mathcal{K}_i Ki和 K j \mathcal{K}_j Kj是不相交的,否则正确性会不成立
一旦相交,就会变成一个密钥解密一个密文,得到两个不同明文的结果,和 D e c \mathrm{Dec} Dec是确定性算法这一事实相悖
又因为 ∣ K ∣ = ∣ M ∣ \vert\mathcal{K}\vert=\vert\mathcal{M}\vert ∣K∣=∣M∣,所以每个 K i \mathcal{K}_i Ki里面只有一个元素 k i k_i ki,条件2证毕。
根据引理1,易知:对于任意 m i , m j ∈ M m_i,m_j\in\mathcal{M} mi,mj∈M,可得
P r [ K = k i ] = P r [ E n c K ( m i ) = c ] = P r [ E n c K ( m j ) = c ] = P r [ K = k j ] \mathrm{Pr}[K=k_i]=\mathrm{Pr}[\mathrm{Enc}_K(m_i)=c]=\mathrm{Pr}[\mathrm{Enc}_K(m_j)=c]=\mathrm{Pr}[K=k_j] Pr[K=ki]=Pr[EncK(mi)=c]=Pr[EncK(mj)=c]=Pr[K=kj]
又因为 1 ≤ i , j ≤ ∣ M ∣ = ∣ K ∣ 1\leq i,j\leq\vert\mathcal{M}\vert=\vert\mathcal{K}\vert 1≤i,j≤∣M∣=∣K∣,且当 i ≠ j i\neq j i=j时, k i ≠ k j k_i\neq k_j ki=kj,这意味着每个密钥出现概率相同,即均为 1 / ∣ K ∣ 1/\vert\mathcal{K}\vert 1/∣K∣。条件1证毕。
香农定理对于判断一个给定的系统是不是完美保密是很有帮助的
条件1很容易检查
条件2无需计算任何概率就可以被证明(或反驳)(与直接使用定义1相反)。
所以我们设计方案的工作本质上就是尽可能让方案uniform来满足这两个条件?
该定理只适用于 ∣ M ∣ = ∣ K ∣ = ∣ C ∣ \vert\mathcal{M}\vert=\vert\mathcal{K}\vert=\vert\mathcal{C}\vert ∣M∣=∣K∣=∣C∣
毕竟是大前提
appendix 附录
justify 证明合法,是...的正当理由
unbiased 无偏置的,无偏见的,公正的
entropy 熵
sophisticated 见多识广的,老练的,复杂巧妙的
chip 芯片
dedicated 专用的
specification 详述
notation 符号
conditional probability 条件概率
prominent 卓越的,显著的,突出的
courier 送快递的人,情报员
notwithstanding 尽管如此
portion 部分;加大份量
inherent 固有的
optimal 最佳的
radically 根本地,彻底地
blatantly 公然地
in its own right 凭借自身能力,独立地
undetectably 不可检测地
random tape Tape is a basic concept from Turing machines.The random tape is the tape with random bits on it.
概率图灵机
我认为把random tape理解成一串真随机比特就行了
方法一:设 M , K , C = { 0 , 1 } 3 , c = 000 \mathcal{M,K,C}=\left\{0,1\right\}^3,c=000 M,K,C={0,1}3,c=000,则
P r [ C = 000 ∣ M = 111 ] = ( P r [ E n c k = 000 ( 111 ) = 000 ] + P r [ E n c k = 001 ( 111 ) = 000 ] + P r [ E n c k = 010 ( 111 ) = 000 ] + P r [ E n c k = 011 ( 111 ) = 000 ] + P r [ E n c k = 100 ( 111 ) = 000 ] + P r [ E n c k = 101 ( 111 ) = 000 ] + P r [ E n c k = 110 ( 111 ) = 000 ] + P r [ E n c k = 111 ( 111 ) = 000 ] ) / ∣ K ∣ = 1 8 \begin{aligned} \mathrm{Pr}[C=000\mid M=111]=( &\mathrm{Pr}[\mathrm{Enc}_{k=000}(111)=000]+\mathrm{Pr}[\mathrm{Enc}_{k=001}(111)=000]+\\ &\mathrm{Pr}[\mathrm{Enc}_{k=010}(111)=000]+\mathrm{Pr}[\mathrm{Enc}_{k=011}(111)=000]+\\ &\mathrm{Pr}[\mathrm{Enc}_{k=100}(111)=000]+\mathrm{Pr}[\mathrm{Enc}_{k=101}(111)=000]+\\ &\mathrm{Pr}[\mathrm{Enc}_{k=110}(111)=000]+\mathrm{Pr}[\mathrm{Enc}_{k=111}(111)=000])/\vert\mathcal{K}\vert\\ =\frac{1}{8} \end{aligned} Pr[C=000∣M=111]=(=81Pr[Enck=000(111)=000]+Pr[Enck=001(111)=000]+Pr[Enck=010(111)=000]+Pr[Enck=011(111)=000]+Pr[Enck=100(111)=000]+Pr[Enck=101(111)=000]+Pr[Enck=110(111)=000]+Pr[Enck=111(111)=000])/∣K∣
同理,任取 m ∈ M , m ∈ M , P r [ C = c ∣ M = m ] = 1 8 m\in\mathcal{M},m\in\mathcal{M},\mathrm{Pr}[C=c\mid M=m]=\frac{1}{8} m∈M,m∈M,Pr[C=c∣M=m]=81
同理,令 M , K , C = { 0 , 1 } l , P r [ C = c ∣ M = m ] = 1 2 l \mathcal{M,K,C}=\left\{0,1\right\}^{\mathscr{l}},\mathrm{Pr}[C=c\mid M=m]=\frac{1}{2^{\mathscr{l}}} M,K,C={0,1}l,Pr[C=c∣M=m]=2l1
方法二:假设 ∣ M ∣ = ∣ K ∣ = ∣ C ∣ \vert\mathcal{M}\vert=\vert\mathcal{K}\vert=\vert\mathcal{C}\vert ∣M∣=∣K∣=∣C∣,令 K = { k 1 , k 2 , . . . k ∣ K ∣ } \mathcal{K}=\left\{k_1,k_2,...k_{\vert\mathcal{K}\vert}\right\} K={k1,k2,...k∣K∣},设 E n c k i ( m ) = c i , i ∈ ( 1 , ∣ K ∣ ) , m ∈ M \mathrm{Enc}_{k_i}(m)=c_i,i\in(1,\vert\mathcal{K}\vert),m\in\mathcal{M} Encki(m)=ci,i∈(1,∣K∣),m∈M
P r [ C = c ∣ M = m ] = P r [ E n c K ( m ) = c ] = ∑ k i ∈ K P r [ E n c k i ( m ) = c ] ∣ K ∣ = ∑ k i ∈ K ∑ j = 1 ∣ K ∣ P r [ E n c k i ( m ) = c j ] ∣ K ∣ ⋅ ∣ K ∣ = ∑ k i ∈ K P r [ E n c k i ( m ) = c i ] ∣ K ∣ ⋅ ∣ K ∣ ( P r [ E n c k i ( m ) = c j ] = 0 f o r j ≠ i ) = ∣ K ∣ ∣ K ∣ ⋅ ∣ K ∣ = 1 ∣ K ∣ \begin{aligned} \mathrm{Pr}[C=c\mid M=m] &=\mathrm{Pr}[\mathrm{Enc}_K(m)=c]\\ &=\sum_{k_i\in\mathcal{K}}\frac{\mathrm{Pr}[\mathrm{Enc}_{k_i}(m)=c]}{\vert\mathcal{K}\vert}\\ &=\sum_{k_i\in\mathcal{K}}\frac{\sum_{j=1}^{\vert\mathcal{K}\vert}\mathrm{Pr}[\mathrm{Enc}_{k_i}(m)=c_j]}{\vert\mathcal{K}\vert\cdot\vert\mathcal{K}\vert}\\ &=\sum_{k_i\in\mathcal{K}}\frac{\mathrm{Pr}[\mathrm{Enc}_{k_i}(m)=c_i]}{\vert\mathcal{K}\vert\cdot\vert\mathcal{K}\vert}\qquad\ \ \ \ (\mathrm{Pr}[\mathrm{Enc}_{k_i}(m)=c_j]=0\ for\ j\neq i)\\ &=\frac{\vert\mathcal{K}\vert}{\vert\mathcal{K}\vert\cdot\vert\mathcal{K}\vert}=\frac{1}{\vert\mathcal{K}\vert} \end{aligned} Pr[C=c∣M=m]=Pr[EncK(m)=c]=ki∈K∑∣K∣Pr[Encki(m)=c]=ki∈K∑∣K∣⋅∣K∣∑j=1∣K∣Pr[Encki(m)=cj]=ki∈K∑∣K∣⋅∣K∣Pr[Encki(m)=ci] (Pr[Encki(m)=cj]=0 for j=i)=∣K∣⋅∣K∣∣K∣=∣K∣1
由此可见 G e n \mathrm{Gen} Gen算法从密钥空间均匀随机地选取不同密钥并不改变 P r [ C = c ∣ M = m ] \mathrm{Pr}[C=c\mid M=m] Pr[C=c∣M=m]的值
TODO(我连Enc确定是什么意思都没理解)
设明文是1比特,密文是2比特,密钥是3比特,且满足下列算法
c 0 = m 0 ⊕ k 0 c 1 = ( k 2 ∧ k 1 ) ⊕ m 0 ⊕ k 0 c_0=m_0\oplus k_0\\ c_1=(k_2\wedge k_1)\oplus m_0\oplus k_0 c0=m0⊕k0c1=(k2∧k1)⊕m0⊕k0
如下图表格
0 | 1 | |
---|---|---|
(0,0,0) | (0,0) | (1,1) |
(0,0,1) | (0,0) | (1,1) |
(0,1,0) | (0,0) | (1,1) |
(0,1,1) | (0,1) | (1,0) |
(1,0,0) | (1,1) | (0,0) |
(1,0,1) | (1,1) | (0,0) |
(1,1,0) | (1,1) | (0,0) |
(1,1,1) | (1,0) | (0,1) |
\begin{table}
\begin{tabular}{r|c|c}
& $0$ & $1$ \\
\hline
$(0,0,0)$ & $(0,0)$ & $(1,1)$ \\
$(0,0,1)$ & $(0,0)$ & $(1,1)$ \\
$(0,1,0)$ & $(0,0)$ & $(1,1)$ \\
$(0,1,1)$ & $(0,1)$ & $(1,0)$ \\
$(1,0,0)$ & $(1,1)$ & $(0,0)$ \\
$(1,0,1)$ & $(1,1)$ & $(0,0)$ \\
$(1,1,0)$ & $(1,1)$ & $(0,0)$ \\
$(1,1,1)$ & $(1,0)$ & $(0,1)$
\end{tabular}
\end{table}
实名举报Typora(暂时)画不了LaTeX表格
P [ M = 0 ∣ C = ( 0 , 0 ) ] = P [ M = 0 ] ⋅ ( P [ K = ( 0 , 0 , 0 ) + P [ K = ( 0 , 0 , 1 ) + P [ K = ( 0 , 1 , 0 ) ] ) P [ C = ( 0 , 0 ) ] = P [ M = 0 ] ⋅ 3 8 6 16 = P [ M = 0 ] P [ M = 0 ∣ C = ( 0 , 1 ) ] = P [ M = 0 ] ⋅ P [ K = ( 0 , 1 , 1 ) P [ C = ( 0 , 1 ) ] = P [ M = 0 ] ⋅ 1 8 2 16 = P [ M = 0 ] . . . e t c . \begin{aligned} P[M=0\mid C=(0,0)]&=\frac{P[M=0]\cdot(P[K=(0,0,0)+P[K=(0,0,1)+P[K=(0,1,0)])}{P[C=(0,0)]}\\ &=\frac{P[M=0]\cdot\frac{3}{8}}{\frac{6}{16}}=P[M=0]\\ P[M=0\mid C=(0,1)]&=\frac{P[M=0]\cdot P[K=(0,1,1)}{P[C=(0,1)]}\\ &=\frac{P[M=0]\cdot\frac{1}{8}}{\frac{2}{16}}=P[M=0]\\ .\\.\\.\\ etc. \end{aligned} P[M=0∣C=(0,0)]P[M=0∣C=(0,1)]...etc.=P[C=(0,0)]P[M=0]⋅(P[K=(0,0,0)+P[K=(0,0,1)+P[K=(0,1,0)])=166P[M=0]⋅83=P[M=0]=P[C=(0,1)]P[M=0]⋅P[K=(0,1,1)=162P[M=0]⋅81=P[M=0]
但是 3 8 = P [ C = ( 0 , 0 ) ] ≠ P [ C = ( 0 , 1 ) ] = 1 8 \frac{3}{8}=P[C=(0,0)]\neq P[C=(0,1)]=\frac{1}{8} 83=P[C=(0,0)]=P[C=(0,1)]=81
所以任取 c 0 , c 1 ∈ C c_0,c_1\in C c0,c1∈C,不能得到 P r [ C = c 0 ] = P r [ C = c 1 ] \mathrm{Pr}[C=c_0]=\mathrm{Pr}[C=c_1] Pr[C=c0]=Pr[C=c1]
TODO