Coursera - Dan Boneh - Cryptography 1 - Week 1 - Stream Ciphers 1 学习笔记【3】

承接上一篇文章

1.对称密码(Symmetric Ciphers)

首先我们给出密码(cipher)的定义:

1.1.密码(Cipher)

定义:密码包括了三个集合 ( K , M , C ) (\mathcal{K},\mathcal{M},\mathcal{C}) ,以及在三个集合上的两个“有效的”算法 ( E , D ) (E,D) ,其中:
K \mathcal{K} :表示密钥的集合(即密钥能取到的值);
M \mathcal{M} :表示明文的集合;
C \mathcal{C} :表示密文的集合;
E E :加密函数,表示密钥集合和明文集合到密文集合的映射: E : K × M C E:\mathcal{K}\times\mathcal{M}\rightarrow\mathcal{C} ;
D D :解密函数,表示密钥集合和密文集合到明文集合的映射: D : K × C M D:\mathcal{K}\times\mathcal{C}\rightarrow\mathcal{M}

Mark

  1. 密码定义了五个元素,包括了三个集合和两个函数,密码学由此展开。
  2. “有效的”:在实践中,可以理解为能在规定的时间(如1分钟)内得到结果;在理论中,可以理解为多项式时间复杂度。
  3. 一般来说, E E 随机的; D D 是确定性的。

1.2.对称密码

对称密码是在密码(五个元素)的基础上定义的,多了一个条件:
s . t .   m M , k K : D ( k , E ( k , m ) ) = m , s.t.\ \forall m\in\mathcal{M},k\in\mathcal{K}:D(k,E(k,m))=m,
即,对明文 m m 加密后,可以重新恢复到明文 m m (二战以前的加密都是这样的)。

2.一次一密(One Time Pad,OTP)

一次一密,即每个明文 m m 都重新生成一个密钥 k k
一个简单的例子(也是对称密码的例子):
K = M = C = { 0 , 1 } n , \mathcal{K}=\mathcal{M}=\mathcal{C}=\{0, 1\}^{n},
加密函数: c = E ( k , m ) = k m c=E(k,m)=k\oplus m ,( \oplus 表示异或)
解密函数: D ( k , c ) = k c . D(k,c)=k\oplus c.

现在我们来验证一次一密是对称密码: m M , k K \forall m\in\mathcal{M},k\in\mathcal{K} ,有 D ( k , c ) = D ( k , E ( k , m ) ) = D ( k , k m ) = k ( k m ) = ( k k ) m = 0 m = m . D(k,c)=D(k,E(k,m))=D(k,k\oplus m)=k\oplus(k\oplus m)=(k\oplus k)\oplus m=0\oplus m=m.
即,上述的例子是对称密码。

3.完全保密(Perfect Secrecy)

想要让加密尽可能地不被破解,那么一个很基础的想法是知道了密文 c c ,推断不出明文 m m 的任何信息。

3.1.定义

香农Shannon在1949年提出的完全保密(perfect secrecy)也是基于这个思想:

定义:如果对于一个密码有   m 0 , m 1 M \forall\ m_0,m_1\in\mathcal{M} ,满足 l e n ( m 0 ) = l e n ( m 1 ) len(m_0)=len(m_1)   c C \forall\ c\in\mathcal{C} ,满足 P r [ E ( k , m 0 ) = c ] = P r [ E ( k , m 1 ) = c ] , Pr[E(k,m_0)=c]=Pr[E(k,m_1)=c],
其中 k k 是从 K \mathcal{K} 均匀抽样得到(即, k R K k\stackrel{R}{\leftarrow}\mathcal{K} ),
则这个密码是完全保密

mark

  1. 均匀抽样:表示每个元素都以 1 K \frac{1}{\mathcal{K}} 的概率抽取;
  2. l e n ( m ) len(m) 表示明文 m m 的长度;
  3. 任意两个明文 m 0 , m 1 m_0,m_1 在同一个密钥 k k 加密下输出任意一个密文 c c 的概率相同,即已知密文 c c 不能区分出明文是 m 0 m_0 还是 m 1 m_1 ,即从密文 c c 中学习不到任何明文的知识,即仅仅已经密文的攻击是无效的(当然还有其他攻击是有效的)!

一次一密(One Time Pad)中密文的长度是等于明文的,很难用于实际,但是它的思想非常重要!

3.2.一个不幸的消息

香农Shannon证明了如下定理:

定理:完全保密 K M . \Rightarrow |\mathcal{K}|\geq|\mathcal{M}|.

Mark:如果一个密码是完全保密的,那么密文的长度必须要大于等于明文的!这导致了完全保密无法在实际中使用。假设Alice和Bob要通信,在通信之前他们要共享密钥 k k ,才能”安全“地传输信息 m m ,注意他们也必须要“安全”地共享密钥 k k 。既然已经能“安全”地共享密钥 k k 了,因为密钥 k k 的长度是大于等于明文的,所以他们完全可以通过“安全”共享密钥的方式“安全”地传输明文 m m ,那么 k k 就没什么价值了。

3.3.一个完全保密的例子

第一篇博客提到的定理是一个很好的完全保密的例子。

发布了84 篇原创文章 · 获赞 92 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/MustImproved/article/details/105461352