公鑰密碼學入門基礎:El Gamal加密的安全性證明

主要符號表

符號 含義
xXx \gets \mathcal{X} 從集合X\mathcal{X}中隨機挑選一個元素,將其值賦予xx
x:=yx := y 將元素yy的值賦予xx
x=yx = y 表示元素xx的值與元素yy的值相等

其餘符號,請參考Jonathan Katz,Yehuda Lindell編著的《Introduction to Modern Cryptography》一書。

El Gamal加密方案構造

令算法G\mathcal{G}表示Schnorr羣生成算法,El Gamal加密方案構造具體如下:

  • Gen(1λ)(sk,pk)\mathsf{Gen}(1^\lambda) \to (sk, pk):輸入安全參數1λ1^\lambda,運行(G,q,g)G(1λ)(\mathbb{G}, q, g) \gets \mathcal{G}(1^\lambda),隨機挑選xZqx \gets \mathbb{Z}_q,計算h:=gxh := g^x,設置sk:=<G,q,g,x>sk := \big< \mathbb{G}, q, g, x \big>pk:=<G,q,g,h>pk := \big< \mathbb{G}, q, g, h \big>,輸出密鑰對(sk,pk)(sk, pk)
  • Enc(pk,m)c\mathsf{Enc}(pk, m) \to c:輸入公鑰pk=<G,q,g,h>pk = \big< \mathbb{G}, q, g, h \big>和消息mGm \in \mathbb{G},隨機挑選yZqy \gets \mathbb{Z}_q,計算c1:=gyc_1 := g^yc2:=hymc_2 := h^y \cdot m,設置c:=<c1,c2>c := \big<c_1, c_2 \big>,輸出密文cc
  • Dec(sk,c)m\mathsf{Dec}(sk, c) \to m:輸入私鑰sk=<G,q,g,x>sk = \big< \mathbb{G}, q, g, x \big>和密文c=<c1,c2>c = \big<c_1, c_2 \big>,計算m:=c2/c1xm := c_2 / c_1^x,輸出消息mm

困難性問題假設

若對於任意概率多項式時間算法D\mathscr{D},如下不等式恆成立,則稱與算法G\mathcal{G}相關的DDH問題是困難的,
Pr[D(G,q,g,gx,gy,gz)=1]Pr[D(G,q,g,gx,gy,gxy)=1]negl(λ) \Big| \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^z) = 1] - \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^{xy}) = 1] \Big| \leq \mathsf{negl}(\lambda),
其中x,y,zZqx, y, z \gets \mathbb{Z}_q,而判別器算法D\mathscr{D}的描述是:給它一堆參數(G,q,g,g1=gx,g2=gy,g3)(\mathbb{G}, q, g, g_1 = g^x, g_2 = g^y, g_3),讓它判斷最後一個參數g3g_3gzg^z還是gxyg^{xy},若它猜測最後一個參數是gzg^z則輸出11,否則輸出00

(擴展) 上述式子還有一種等價寫法,
Pr[D wins]12+negl(λ) \mathrm{Pr}[\mathscr{D} ~ \text{wins}] \leq \frac{1}{2} + \mathsf{negl}(\lambda),
表示敵手D\mathscr{D}贏得DDH挑戰遊戲的優勢爲可忽略函數,即與瞎猜無異(敵手D\mathscr{D}瞎猜以0.5概率猜中挑戰比特bb的值,具體參考入門書籍《Introduction to Modern Cryptography》)。

安全性證明

(定理) 若與算法G\mathcal{G}相關的DDH問題是困難的,那麼El Gamal加密滿足CPA不可區分性。

證明. (主要證明思路:反證法,若El Gamal加密不安全,那麼DDH困難問題假設不成立)

記El Gamal加密方案爲Π\Pi,若Π\Pi不滿足CPA不可區分性,那麼存在一個概率多項式時間算法A\mathscr{A},它自身有一套編碼規則,對於Π\Pi環境下的(pk,<c1,c2>)(pk, \big<c_1, c_2\big>),以可觀的概率ε(λ)\varepsilon(\lambda)贏得挑戰遊戲,而對於亂碼輸入(pk,<c1,c2>)(pk, \big<c_1, c_2\big>),該編碼規則會失效(這一點類似機器學習裏的特定領域算法,參考No Free Lunch定理),有
Pr[PubKA,Πeva(λ)=1]=ε(λ) \mathrm{Pr}[\mathrm{PubK}^{\mathsf{eva}}_{\mathscr{A}, \Pi}(\lambda) = 1] = \varepsilon(\lambda)。

現引入一個證明用的加密方案Π~\widetilde{\Pi},它構造如下:

  • Gen(1λ)(sk,pk)\mathsf{Gen}(1^\lambda) \to (sk, pk):輸入安全參數1λ1^\lambda,運行(G,q,g)G(1λ)(\mathbb{G}, q, g) \gets \mathcal{G}(1^\lambda),隨機挑選xZqx \gets \mathbb{Z}_q,計算h:=gxh := g^x,設置sk:=<G,q,g,x>sk := \big< \mathbb{G}, q, g, x \big>pk:=<G,q,g,h>pk := \big< \mathbb{G}, q, g, h \big>,輸出密鑰對(sk,pk)(sk, pk)
  • Enc(pk,m)c\mathsf{Enc}(pk, m) \to c:輸入公鑰pk=<G,q,g,h>pk = \big< \mathbb{G}, q, g, h \big>和消息mGm \in \mathbb{G},隨機挑選yZqy \gets \mathbb{Z}_qzZqz \gets \mathbb{Z}_q,計算c1:=gyc_1 := g^yc2:=gzmc_2 := g^z \cdot m,設置c:=<c1,c2>c := \big<c_1, c_2\big>,輸出密文cc
  • Dec(sk,c)m\mathsf{Dec}(sk, c) \to m:無解密算法。

假設A~\widetilde{\mathscr{A}}是專門針對Π~\widetilde{\Pi}的敵手,現在分析它在Π~\widetilde{\Pi}對應的CPA挑戰遊戲中的優勢。留意到Π~\widetilde{\Pi}中的密文cc無異於是完全隨機挑選的,跟mm一點關聯都沒有,即使是持有私鑰sksk的人也無法解密密文cc,那麼A~\widetilde{\mathscr{A}}贏得Π~\widetilde{\Pi}對應的CPA挑戰遊戲的優勢爲0,即
Pr[PubKA~,Π~eva(λ)=1]=12 \mathrm{Pr}[\mathrm{PubK}^{\mathsf{eva}}_{\widetilde{\mathscr{A}}, \widetilde{\Pi}}(\lambda) = 1] = \frac{1}{2}。
從以上分析可進一步得知,任意概率多項式時間算法(包括A\mathscr{A})贏得Π~\widetilde{\Pi}對應的CPA挑戰遊戲的概率也爲0.5。注意,其它算法贏得挑戰遊戲的優勢小於或等於A~\widetilde{\mathscr{A}},這一點類似機器學習的特定領域,敵手訪問諭言機的過程可以看成是一種參數訓練。那麼,有如下式子成立
Pr[PubKA,Π~eva(λ)=1]=12 \mathrm{Pr}[\mathrm{PubK}^{\mathsf{eva}}_{\mathscr{A}, \widetilde{\Pi}}(\lambda) = 1] = \frac{1}{2}。

前面假設A\mathscr{A}以可觀概率ε(λ)\varepsilon(\lambda)贏得Π\Pi對應的CPA挑戰遊戲,留意到ε(λ)\varepsilon(\lambda)12\frac{1}{2}的不同,我們可以編碼出一個判別器D\mathscr{D}用於解決DDH問題,即:若ε(λ)\varepsilon(\lambda)12\frac{1}{2}明顯不同,則DDH問題失效。

算法D\mathscr{D}工作如下:

輸入(G,q,g,g1,g2,g3)(\mathbb{G}, q, g, g_1, g_2, g_3),設置pk:=<G,q,g,g1>pk := \big<\mathbb{G}, q, g, g_1\big>,運行A(pk)\mathscr{A}(pk)得到兩個消息m0,m1m_0, m_1,隨機挑選一個比特b{0,1}b \gets \{0, 1\},設置c1:=g2c_1 := g_2c2:=g3mbc_2 := g_3 \cdot m_b,將c=<c1,c2>c = \big<c_1, c_2\big>交給A\mathscr{A}以得到一個比特bb',若b=bb = b',則D\mathscr{D}輸出11,否則,輸出00

對於D\mathscr{D}得到的參數,分爲以下兩種情況:

情況1. 此時g1=gxg_1 = g^xg2=gyg_2 = g^yg3=gzg_3 = g^z,此時A\mathscr{A}的視圖爲Π~\widetilde{\Pi},算法D\mathscr{D}輸出11的概率爲A\mathscr{A}贏得Π~\widetilde{\Pi}的CPA挑戰遊戲的概率,即
Pr[D(G,q,g,gx,gy,gz)=1]=Pr[PubKA,Π~eva(λ)=1]=12 \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^z) = 1] = \mathrm{Pr}[\mathrm{PubK}^{\mathsf{eva}}_{\mathscr{A}, \widetilde{\Pi}}(\lambda) = 1] = \frac{1}{2}。

情況2. 此時g1=gxg_1 = g^xg2=gyg_2 = g^yg3=gxyg_3 = g^{xy},此時A\mathscr{A}的視圖爲Π\Pi,算法D\mathscr{D}輸出11的概率爲A\mathscr{A}贏得Π\Pi的CPA挑戰遊戲的概率,即
Pr[D(G,q,g,gx,gy,gxy)=1]=Pr[PubKA,Π~eva(λ)=1]=ε(λ) \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^{xy}) = 1] = \mathrm{Pr}[\mathrm{PubK}^{\mathsf{eva}}_{\mathscr{A}, \widetilde{\Pi}}(\lambda) = 1] = \varepsilon(\lambda)。


Pr[D(G,q,g,gx,gy,gz)=1]Pr[D(G,q,g,gx,gy,gxy)=1]=12ε(λ), \Big| \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^z) = 1] - \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^{xy}) = 1] \Big| = \Big| \frac{1}{2} - \varepsilon(\lambda) \Big|,

A\mathscr{A}以可觀概率贏得Π\Pi對應的CPA挑戰遊戲,意味着
ε(λ)>12+negl(λ) \varepsilon(\lambda) > \frac{1}{2} + \mathsf{negl}(\lambda),

這使得
Pr[D(G,q,g,gx,gy,gz)=1]Pr[D(G,q,g,gx,gy,gxy)=1]>negl(λ) \Big| \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^z) = 1] - \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^{xy}) = 1] \Big| > \mathsf{negl}(\lambda),

與DDH困難問題假設相矛盾,故ε(λ)12+negl(λ)\varepsilon(\lambda) \leq \frac{1}{2} + \mathsf{negl}(\lambda)

上述證明過程中還存在一個問題,A\mathscr{A}是針對Π\Pi的算法,那麼在情況1中它有沒有可能意識到挑戰密文的不同之處,從而拒絕輸出bb'呢?這樣D\mathscr{D}輸出的就是無效符號\perp。我們知道,安全性規約證明過程中必須給A\mathscr{A}正確地模擬出方案的真實環境,這樣A\mathscr{A}纔會老老實實地工作。接下來證明情況1中的挑戰密文和情況2中的挑戰密文,對於敵手來說不可區分。

假設情況1A\mathscr{A}能夠意識到密文的不同之處從而拒絕輸出,即D\mathscr{D}最終收到的是一個無效符號\perp,那麼D\mathscr{D}接下來直接輸出11,表示它判斷g3g_3gzg^z,此時
Pr[D(G,q,g,gx,gy,gz)=1]Pr[D(G,q,g,gx,gy,gxy)=1]>negl(λ) \Big| \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^z) = 1] - \mathrm{Pr}[\mathscr{D}(\mathbb{G}, q, g, g^x, g^y, g^{xy}) = 1] \Big| > \mathsf{negl}(\lambda),
與定理矛盾,故A\mathscr{A}情況1中依舊會照常輸出比特bb'

El Gamal加密的實現

具體參考Python密碼庫:charm-crypto

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