承接上一篇文章。
1.對稱密碼(Symmetric Ciphers)
首先我們給出密碼(cipher)的定義:
1.1.密碼(Cipher)
定義:密碼包括了三個集合(K,M,C),以及在三個集合上的兩個“有效的”算法(E,D),其中:
K:表示密鑰的集合(即密鑰能取到的值);
M:表示明文的集合;
C:表示密文的集合;
E:加密函數,表示密鑰集合和明文集合到密文集合的映射:E:K×M→C;
D:解密函數,表示密鑰集合和密文集合到明文集合的映射:D:K×C→M。
Mark:
- 密碼定義了五個元素,包括了三個集合和兩個函數,密碼學由此展開。
- “有效的”:在實踐中,可以理解爲能在規定的時間(如1分鐘)內得到結果;在理論中,可以理解爲多項式時間複雜度。
- 一般來說,E是隨機的;D是確定性的。
1.2.對稱密碼
對稱密碼是在密碼(五個元素)的基礎上定義的,多了一個條件:
s.t. ∀m∈M,k∈K:D(k,E(k,m))=m,
即,對明文m加密後,可以重新恢復到明文m(二戰以前的加密都是這樣的)。
2.一次一密(One Time Pad,OTP)
一次一密,即每個明文m都重新生成一個密鑰k。
一個簡單的例子(也是對稱密碼的例子):
K=M=C={0,1}n,
加密函數:c=E(k,m)=k⊕m,(⊕表示異或)
解密函數:D(k,c)=k⊕c.
現在我們來驗證一次一密是對稱密碼:∀m∈M,k∈K,有D(k,c)=D(k,E(k,m))=D(k,k⊕m)=k⊕(k⊕m)=(k⊕k)⊕m=0⊕m=m.
即,上述的例子是對稱密碼。
3.完全保密(Perfect Secrecy)
想要讓加密儘可能地不被破解,那麼一個很基礎的想法是知道了密文c,推斷不出明文m的任何信息。
3.1.定義
香農Shannon在1949年提出的完全保密(perfect secrecy)也是基於這個思想:
定義:如果對於一個密碼有∀ m0,m1∈M,滿足len(m0)=len(m1)且∀ c∈C,滿足Pr[E(k,m0)=c]=Pr[E(k,m1)=c],
其中k是從K均勻抽樣得到(即,k←RK),
則這個密碼是完全保密。
mark:
- 均勻抽樣:表示每個元素都以K1的概率抽取;
- len(m)表示明文m的長度;
- 任意兩個明文m0,m1在同一個密鑰k加密下輸出任意一個密文c的概率相同,即已知密文c不能區分出明文是m0還是m1,即從密文c中學習不到任何明文的知識,即僅僅已經密文的攻擊是無效的(當然還有其他攻擊是有效的)!
一次一密(One Time Pad)中密文的長度是等於明文的,很難用於實際,但是它的思想非常重要!
3.2.一個不幸的消息
香農Shannon證明了如下定理:
定理:完全保密 ⇒∣K∣≥∣M∣.
Mark:如果一個密碼是完全保密的,那麼密文的長度必須要大於等於明文的!這導致了完全保密無法在實際中使用。假設Alice和Bob要通信,在通信之前他們要共享密鑰k,才能”安全“地傳輸信息m,注意他們也必須要“安全”地共享密鑰k。既然已經能“安全”地共享密鑰k了,因爲密鑰k的長度是大於等於明文的,所以他們完全可以通過“安全”共享密鑰的方式“安全”地傳輸明文m,那麼k就沒什麼價值了。
3.3.一個完全保密的例子
第一篇博客提到的定理是一個很好的完全保密的例子。