Introductionto Modern Cryptograph 第三章部分課後題答案

Acknowledge
致敬Katz J, Lindell Y. Introduction to modern cryptography[M]. Chapman and Hall/CRC, 2014. 推薦該書正版。

3.1 Prove Proposition 3.6.

看定義Definition 3.4,若函數ff爲可忽略函數,那麼對於任意多項式函數p()p(\cdot),存在一個整數NN,使得整數n>Nn > N滿足f(n)<1/p(n)f(n) < 1 / p(n)。若negl1\mathsf{negl}_1negl2\mathsf{negl}_2爲可忽略函數,那麼分別存在N1N_1N2N_2,對於任意多項式p()p(\cdot),總有n>N1n > N_1滿足negl1(n)<1/p(n)\mathsf{negl}_1(n) < 1 / p(n),且n>N2n > N_2滿足negl2(n)<1/p(n)\mathsf{negl}_2(n) < 1 / p(n)。取N1N_1N2N_2中的較大者NN,有n>Nn > N滿足negl1+negl2<2/p(n)\mathsf{negl}_1 + \mathsf{negl}_2 < 2 / p(n),即可忽略函數加上可忽略函數仍然是可忽略函數。多項式除以多項式依舊是多項式,第二部分同樣易證。


3.3 Prove that Definition 3.8 cannot be satisfied if Π\Pi can encrypt arbitrary-length messages and the adversary is not restricted to output equal-length messages in experiment PrivkA,Πeav(λ)Privk^{eav}_{\mathcal{A}, \Pi}(\lambda).

由於加密算法是公開的,查看代碼,推測Π\Pi僅加密1比特消息時所產生的密文的長度上界p(λ)p(\lambda)(假如加密明文0得到密文01101,加密明文1得到01001100,那麼p(λ)=8p(\lambda) = 8)。根據鴿巢原理,長度上界爲p(λ)p(\lambda)的密文最多容納
21+22++2p(λ)=2(12p(λ))12=2p(λ)+12 2^1+2^2 + \cdot + 2^{p(\lambda)}= \frac{ 2 \cdot (1 - 2^{p(\lambda)})}{1 -2} = 2^{p(\lambda) + 1} - 2
個明文,根據加密算法的正確性,當明文數量超過此上限時,勢必需要使用長度大於p(λ)p(\lambda)的密文。在挑戰遊戲中,當A\mathcal{A}故意設置m0=1|m_0|=1m1=p(λ)+1|m_1|=p(\lambda)+1時,大概率有c0p(λ)|c_0| \leq p(\lambda)c1>p(λ)|c_1| > p(\lambda),易判斷挑戰比特bb的值(當m1|m_1|繼續增大時更加明顯,概率請自行分析)。

通俗一點,若明文0和1被長度上界爲p(λ)p(\lambda)的明文包含,那麼A\mathcal{A}就設置m1>p(λ)|m_1|>p(\lambda),可使得定義3.8不滿足。


3.4 Say Π=(Gen,Enc,Dec)\Pi = (Gen, Enc, Dec) is such that for k{0,1}nk \in \{ 0, 1\}^n, algorithm EnckEnc_k is only defined for messages of length at most (n)\ell(n) (for some polynomial \ell). Construct a scheme satisfying Definition 3.8 even when the adversary is not restricted to output equal-length messages in experiment PrivKA,Πeav(λ)PrivK^{eav}_{\mathcal{A}, \Pi}(\lambda).

有限定消息長度上界就好辦了,回顧題目3.3,假若密文長度上界爲p(λ)p(\lambda),則限定消息長度上界爲p(λ)p(\lambda),這樣A\mathscr{A}就無法挑起攻擊了。這道題思路很直接,既然消息長度不一樣,那麼我們就通過編碼補齊,使其消息長度一樣就行了,回顧計算機網絡的知識,類似的,這裏使用前綴0m110^{\ell - |m| - 1}1來補齊,表示使用m1\ell - |m| - 1個0和1個1,解密時去掉前綴就能得到真正的mm。具體來說,新方案構造如下:

假定Π=(Gen,Enc,Dec)\Pi' = (Gen', Enc', Dec')是針對定長消息的加密方案,且滿足竊聽下不可區分性,

  • Gen(1λ)kGen(1^\lambda) \to k:運行kGen(1λ)k \gets Gen'(1^\lambda),直接輸出對稱密鑰kk
  • Enc(k,m)cEnc(k, m) \to c:進行補齊編碼m=0m11mm' = 0^{\ell - |m| - 1}1 || m,計算cEnc(k,m)c' \gets Enc'(k, m'),輸出c:=cc := c'
  • Dec(k,c)mDec(k, c) \to m:計算m:=Dec(k,c)m' := Dec'(k, c),刪除前綴0m110^{\ell - |m| - 1}1得到mm,直接輸出mm

利用規約,易證Π\Pi的安全性(即使A\mathcal{A}可挑選任意長度的明文)。


3.7 Assuming the existence of a pseudorandom function, prove that there exists an encryption scheme that has indistinguishable multiple encryptions in the presence of an eavesdropper (i.e., is secure with respect to Definition 3.18), but is not CPA-secure (i.e., is not secure with respect to Definition 3.21).

我們基於Construction 3.24來構造這麼一個滿足多次加密竊聽不可區分性、卻不滿足CPA安全的加密方案Π\Pi

  • Gen(1λ)kGen(1^\lambda) \to k:輸入安全參數1λ1^\lambda,隨機挑選k1{0,1}λk_1 \gets \{ 0, 1\}^\lambdak2{0,1}λk_2 \gets \{ 0, 1\}^\lambda,設置k=<k1,k2>k = \big<k_1, k_2\big>並輸出。
  • Enc(k,m)cEnc(k, m) \to c:輸入對稱密鑰k=<k1,k2>k = \big<k_1, k_2\big>和消息m{0,1}λm \in \{0, 1\}^\lambda,隨機挑選r{0,1}λr \gets \{0, 1\}^\lambda計算
    c:={1,k2,r,Fk2(r)m, if m=k10,k1,r,Fk2(r)m, otherwise c := \begin{cases} 1, k_2, r, F_{k_2}(r) \oplus m, ~ \text{if} ~ m = k_1 \\ 0, k_1, r, F_{k_2}(r) \oplus m, ~ \text{otherwise} \end{cases}
  • Dec(k,c)mDec(k, c) \to m:輸入k=<k1,k2>k = \big<k_1, k_2\big>c=<c1,c2,c3,c4>c = \big<c_1, c_2, c_3, c_4\big>,計算m:=Fk2(c3)c4m := F_{k_2}(c_3) \oplus c_4並輸出。

易證該方案不滿足CPA安全,敵手A\mathcal{A}的做法如下:隨機挑選m{0,1}λm \gets \{ 0, 1\}^\lambda交給加密諭言機OEnc()\mathcal{O}_{Enc}(\cdot)得到c=<c1,c2,c3,c4>c = \big<c_1, c_2, c_3, c_4\big>,接着自適應設置m=c2m' = c_2交給加密諭言機得到c=<c1,c2,c3,c4>c' = \big<c'_1, c'_2, c'_3, c'_4\big>,此時A\mathcal{A}恢復出密鑰k:=<c2,c2>k := \big<c_2, c'_2\big>k:=<c2,c2>k:= \big<c'_2, c_2 \big>,這裏根據c1=?0c_1 \overset{?}{=} 0做進一步判斷。

但是該方案滿足多次加密竊聽不可區分性,主要證明思路如下:嘗試攻破方案Π\Pi的敵手A\mathcal{A}挑選了兩組消息m0={m00,m01,,m0q(λ)}\bm{m}_0 = \{ m^0_0, m^1_0, \cdots, m^{q(\lambda)}_0 \}以及m1={m10,m11,,m1q(λ)}\bm{m}_1 = \{ m^0_1, m^1_1, \cdots, m^{q(\lambda)}_1 \},它贏得多次加密竊聽不可區分性挑戰遊戲的情形分爲2種:(1)恰巧k1m0m1k_1 \in \bm{m}_0 \cup \bm{m}_1,此時A\mathcal{A}可直接獲取k2k_2,該事件發生的概率爲2q(λ)/2λ2q(\lambda) / 2^\lambda,是可忽略函數;(2)A\mathcal{A}可贏得Construction 3.24的CPA安全挑戰遊戲,該事件發生的概率同樣是可忽略函數(注意0,k10,k_1不泄露任何關於mbm_b的信息,熟知安全性規約的人可以很快地完成該證明,這裏不再詳細擴展)。


3.10 Let GG be a pseudorandom generator and define G(s)G'(s) to be the output of GG truncated to nn bits (where s=n|s| = n). Prove that the function Fk(x)=G(k)xF_k(x) = G'(k) \oplus x is not pseudorandom.

分辨器D\mathcal{D}挑選兩個不同的輸入xxxx'提交給諭言機,得到yyyy',通過判斷xx=?yyx \oplus x' \overset{?}{=} y \oplus y'來判斷是否是隨機數生成器。當O\mathcal{O}是隨機數生成器時,xx=yyx \oplus x' = y \oplus y'的概率爲1/2λ1 / 2^\lambda;當O\mathcal{O}Fk()F_k(\cdot)時,xx=yyx \oplus x' = y \oplus y'的概率爲1。


3.14 Let FF be a pseudorandom permutation, and define a fixed-length encryption scheme (Gen,Enc,Dec)(Gen, Enc, Dec) as follows: On input m{0,1}n/2m \in \{0, 1\}^{n/2} and key k{0,1}nk \in \{0, 1\}^n, algorithm EncEnc chooses a random string r{0,1}n/2r \gets \{0, 1\}^{n/2} of length n/2n/2 and computes c:=Fk(rm)c := F_k(r || m). Show how to decrypt, and prove that this scheme is CPA-secure for messages of length n/2n/2. (If you are looking for a real challenge, prove that this scheme is CCA-secure if FF is a strong pseudorandom permutation.) What are the advantages and disadvantages of this construction as compared to Construction 3.24?

假設FF是一個高效的、帶密鑰的置換函數,那麼存在概率多項式時間算法可以分別計算Fk(x)F_k(x)的值,以及Fk1(y)F_k^{-1}(y)的值。上述題目加密方案具體設計如下:

  • Gen(1λ)kGen(1^\lambda) \to k:輸入安全參數1λ1^\lambda,隨機挑選k{0,1}λk \gets \{0, 1\}^\lambda並輸出。
  • Enc(k,m)cEnc(k, m) \to c:輸入密鑰kk和消息m{0,1}λ/2m \in \{ 0, 1\}^{\lambda / 2},隨機挑選r{0,1}λ/2r \gets \{ 0, 1\}^{\lambda / 2},計算c:=Fk(rm)c := F_k(r || m)並輸出。
  • Dec(k,c)mDec(k ,c) \to m:輸入密鑰kk和密文cc,進行置換求逆得到x:=Fk1(c)x := F^{-1}_k(c),丟棄前λ/2\lambda / 2比特得到消息mm

(定理)FF是僞隨機置換,則上述方案滿足CPA安全性。

證明. 記上述加密方案爲Π\Pi,若它不滿足CPA安全性,那麼存在一個針對該方案的敵手A\mathcal{A},它以可觀概率ε(λ)\varepsilon(\lambda)贏得上述方案對應的CPA挑戰遊戲。

現引入一個證明用的加密方案Π~=(Gen~,Enc~,Dec~)\widetilde{\Pi} = (\widetilde{Gen}, \widetilde{Enc}, \widetilde{Dec}),構造如下:

  • Gen~(1λ)k\widetilde{Gen}(1^\lambda) \to k:輸入安全參數1λ1^\lambda,隨機挑選k{0,1}λk \gets \{0, 1\}^\lambda並輸出。
  • Enc~(k,m)c\widetilde{Enc}(k, m) \to c:輸入密鑰kk和消息m{0,1}λ/2m \in \{ 0, 1\}^{\lambda / 2},隨機挑選r{0,1}λ/2r \gets \{ 0, 1\}^{\lambda / 2},計算c:=f(rm)c := f(r || m)並輸出,其中ff是隨機挑選的置換函數。
  • Dec~(k,c)m\widetilde{Dec}(k, c) \to m:無解密算法(解密者不知道加密者隨機挑選了哪一條置換函數ff,故也不知道f1f^{-1}的編碼)。

ff是隨機挑選的置換函數時,密文cc無異於是隨機挑選的比特串,將cc交給A\mathcal{A},它贏得Π~\widetilde{\Pi}對應的CPA挑戰遊戲的概率爲1/21 / 2

注意到ε(λ)\varepsilon(\lambda)1/21/2的差別,可編寫如下辨別器D\mathcal{D}用於區分僞隨機置換FkF_k和真隨機置換ff

  1. A\mathcal{A}提交mm給加密諭言機時,隨機挑選r{0,1}λ/2r \gets \{0, 1\}^{\lambda/2},將mrm || r提交給自身的諭言機OFk/f\mathcal{O}_{F_k / f},得到cc並返回給A\mathcal{A}
  2. A\mathcal{A}提交m0,m1m_0, m_1時,隨機挑選一比特b{0,1}b \gets \{0, 1\},隨機挑選r{0,1}λ/2r \gets \{0, 1\}^{\lambda / 2},將rmbr || m_b提交給自身的挑戰者CFk/f\mathcal{C}_{F_k / f},得到挑戰密文cc並返回給A\mathcal{A}
  3. A\mathcal{A}繼續交互。最終,A\mathcal{A}提交猜測比特bb',若b=bb = b',則向CFk/f\mathcal{C}_{F_k / f}輸出11;否則,則向CFk/f\mathcal{C}_{F_k / f}輸出00

注意,Π\Pi的密文與Π~\widetilde{\Pi}的密文計算不可區分(否則,意味着A\mathcal{A}可以直接判斷Fk/fF_k / f,這與FkF_k的定義矛盾),概率多項式時間算法A\mathcal{A}拿到挑戰密文後照常工作並輸出猜測比特bb'(若A\mathcal{A}意識到這是非Π\Pi密文,有可能拒絕輸出猜測比特bb')。當OFk/f\mathcal{O}_{F_k / f}對應FkF_k時,A\mathcal{A}的視圖是Π\Pi;當OFk/f\mathcal{O}_{F_k / f}對應ff時,A\mathcal{A}的視圖是Π~\widetilde{\Pi},有
12ε(λ)>negl(λ) \Big| \frac{1}{2} - \varepsilon(\lambda) \Big| > negl(\lambda),
這與FkF_k的定義矛盾,故關於Π\Pi是非CPA安全的假設不成立。

要證明CCA安全,就需要開放解密諭言機,注意強僞隨機置換的定義,
Pr[DFk(),Fk1()(1λ)=1]Pr[Df(),f1()(1λ)=1]negl(λ) \Big| Pr [\mathcal{D}^{F_k(\cdot), F^{-1}_k(\cdot)}(1^\lambda) = 1] - Pr [\mathcal{D}^{f(\cdot), f^{-1}(\cdot)}(1^\lambda) = 1] \Big| \leq negl(\lambda),
而置換是one-to-one,不難編碼出解密諭言機,這裏不再擴展。


3.16 Consider a variant of CBC-mode encryption where the sender simply increments the IVIV by 11 each time a message is encrypted (rather than choosing IVIV at random each time). Show that the resulting scheme is not CPA-secure.

這裏假設IVIV初始值爲00000000(易擴展至任意初始值),A\mathcal{A}在問詢加密諭言機階段挑選m=0000m = 0000,那麼IVm=0000IV \oplus m = 0000,得到c=Fk(0)c = F_k(0),接着,IV=0001IV = 0001A\mathcal{A}刻意挑選m0=0001m_0 = 0001m1=0000m_1 = 0000,得到挑戰密文cbc_b,若c=cbc = c_b則輸出b=0b' = 0,否則輸出b=1b' = 1,從而以百分百概率贏得CPA挑戰遊戲(這裏方案證明不過去是因爲Fk(r)F_k(r)中的rr以概率1重複了)。


3.21 Let Π1=(Gen1,Enc1,Dec1)\Pi_1 = (Gen_1, Enc_1, Dec_1) and Π2=(Gen2,Enc2,Dec2)\Pi_2 = (Gen_2, Enc_2, Dec_2) be two encryption schemes for which it is known that at least one is CPA-secure. The problem is that you don’t know which one is CPA-secure and which one may not be. Show how to construct an encryption scheme Π\Pi that is guaranteed to be CPA-secure as long as at least one of Π1\Pi_1 or Π2\Pi_2 is CPA-secure. Try to provide a full proof of your answer.

加密方案Π\Pi構造如下:

  • Gen(1λ)kGen(1^\lambda) \to k:運行k1Gen1(1λ)k_1 \gets Gen_1(1^\lambda)k2Gen2(1λ)k_2 \gets Gen_2(1^\lambda),設置k:=(k1,k2)k := (k_1, k_2)並輸出。
  • Enc(k,m)cEnc(k, m) \to c:計算cEnc1(k1,m)c' \gets Enc_1(k_1, m),再計算cEnc2(k2,c)c \gets Enc_2(k_2, c')並輸出。
  • Dec(k,c)mDec(k, c) \to m:計算m:=Dec1(k1,Dec2(k2,c))m := Dec_1(k_1, Dec_2(k_2, c))並輸出。

易知,Pr[A wins]Pr[A wins(Π1 is CPA-secure)]+Pr[A wins(Π2 is CPA-secure)]Pr[\mathcal{A} ~ \text{wins}] \leq Pr[\mathcal{A} ~ \text{wins} \land (\Pi_1 ~ \text{is CPA-secure})] + Pr[\mathcal{A} ~ \text{wins} \land (\Pi_2 ~ \text{is CPA-secure})],熟知規約的人能夠很快地寫出安全性證明,這裏不再擴展。


3.22 Show that the CBC, OFB, and counter modes of encryption do not yield CCA-secure encryption schemes (regardless of F).

書中已經給出解釋:

Specifically, any encryption scheme that allows ciphertexts to be manipulated in any logical way cannot be CCA-secure.

直覺上,這些方案不能達到CPA安全是因爲解密諭言機造不出來(規約時無法使用邏輯方式模擬出解密算法)。這裏詳細分析爲何這些方案不能達到CPA安全:

在CBC模式中,A\mathcal{A}提交m0=0λm_0 = 0^\lambdam1=1λm_1 = 1^\lambda從而得到cbc_b,翻轉cbc_bIVIV最後1比特得到cc',將cc'提交給解密諭言機,得到的mm'要麼是0λ110^{\lambda-1} || 1要麼是1λ101^{\lambda-1} || 0

在OFB和CTR模式中,A\mathcal{A}則翻轉cb(1)c_b^{(1)}的最後1比特。

回顧題目3.14的加密方案,它能夠達到CCA安全,注意翻轉cc的1比特,所解密出來的明文會發生巨大變化,與原明文沒有任何“邏輯”關係。在第四章中,則是通過引入消息鑑別碼(HMAC)來阻止敵手manipulates the ciphertexts in a logical way,從而使得方案達到CCA安全。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章