本文將系統性地總結密碼學中常見的安全模型定義。在閱讀本文前,可以瞭解如下預備知識:
- 現代密碼學是一門怎樣的學科?
- 資料的機密性、完整性與實體的抗否性是什麼意思?
- 完美安全和語義安全的含義是什麼?
資料的機密性、完整性和實體的抗否性是一個資訊保安系統所要保障的主要目標,也是一個密碼演算法所應滿足的基本指標。而在現代密碼學與可證明安全的語義下,機密性等含義有著更加嚴格和完善的定義。
例如,如果描述一個加密演算法實現了資料機密性,那麼就需要證明這個演算法輸出的密文與那些隨機字串看起來是不可區分的, 由此敵手就不能從密文中獲得任何有關明文和金鑰的資訊。本文就將圍繞著安全系統的這幾個主要目標,總結下密碼學標準定義中的若干安全模型。
不可區分性
縱觀整個安全性定義的發展,資料機密性是人們一直以來的核心訴求。從夏農的完美安全(Perfect Secrecy)到語義安全(Semantic Security),人們都希望一個加密演算法的輸出應足夠隨機,以使得其不會洩露關於明文和金鑰的任何資訊。
為了規範這些“感覺”,前人提出了“不可區分性” (Indistinguishibilty, IND)這一概念來描述演算法的機密性。然而,一個演算法達成不可區分性時所處於的安全模型可能是不同的。因此,我們在討論一個加密演算法的不可區分性強度時,需要明確其面對的安全模型。下面我們就介紹幾種在加密演算法中常見的IND安全模型。
注意?:在密碼理論領域的論文中,安全模型通常對應的是Game、Experiment、Image、Procedure等概念。為與論文的表述保持一致,本文會使用Game這個詞來指代安全模型。
IND-CPA
不多廢話,下圖就是IND-CPA的示意圖。
IND為不可區分,而CPA的含義是Chosen Plaintext Attack。那麼IND-CPA所表示的含義為,在敵手能自行選擇明文,並查詢對應密文這一模型中,我們的加密演算法是否還能實現密文不可區分。在這一Game中,敵手可以查詢任意一條明文訊息對應的密文, 這需要我們開放自己演算法的加密功能給敵手,即敵手擁有“access to the encryption oracle”的能力。
而結合到上圖,IND-CPA這一Game的步驟如下:
- Game中擁有一具有多項式資源的敵手$\mathcal{A}$ 和一個能自由呼叫加密演算法oracle $E$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加密演算法的金鑰
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交明文 $m$, $\mathcal{C}$ 計算 $m$ 對應的密文 $c$
- 重複步驟 3 $q$ 次 (即敵手查詢 $q$ 次不同訊息的密文)
- $\mathcal{A}$ 提交明文 $m_{0}$ 與 $m_{1} $ 給 $\mathcal{C}$
- $\mathcal{C}$ 以拋硬幣(flip a coin)的形式隨機選擇一個位元 $b\stackrel{\$}{\leftarrow} \{0,1\}$, $\mathcal{C}$ 加密返回挑戰密文 $c_{b}$
- 敵手根據 $c_{b}$ 輸出自己的猜測位元 $b^{*}$ (即敵手猜測 $\mathcal{C}$ 是加密的 $m_{0}$ 還是 $m_{1}$ )
可以看出,IND-CPA實際上是想表達“如果密文足夠隨機的話,密文是不會洩露任何關於明文資訊”這一深層含義。對於IND-CPA的敵手 $\mathcal{A}$,要贏得這個Game的概率為:
$$ \mathrm{Pr}[\mathcal{A}\ \mathrm{wins}] = \mathrm{Pr}[b^{*}=b] = \frac{1}{2} + \mathrm{Adv}_{E}^{\mathrm{IND-CPA}}(\mathcal{A}) $$其中,我們將 $\mathrm{Adv}_{E}^{\mathrm{IND-CPA}}(\mathcal{A})$ 稱作 $\mathcal{A}$ 面對 $E$ 時在IND-CPA Game中獲勝的優勢。一個安全的加密演算法至少要能達到IND-CPA的安全性。而在這個模型中,我們只關心了演算法的加密功能和密文字身的隨機性,而實際中的敵手也有可能訪問解密演算法來實現一些攻擊。因此,我們需要一種更強的安全模型來保護我們的解密演算法和密文。
IND-CCA
與CPA類似,CCA的含義為Chosen Ciphertext Attack,即選擇密文攻擊。那麼在IND-CCA模型中,敵手的能力將是允許訪問解密演算法的Oracle $D$,即敵手可以自行構造密文並提交給 $\mathcal{C}$,$\mathcal{C}$ 執行解密演算法返回解密結果。而最終敵手的目標與IND-CPA還是相同的,即攻破加密的不可區分性,其示意圖如下所示
綜上,IND-CCA這一Game的步驟如下
- Game中擁有一具有多項式資源的敵手$\mathcal{A}$ 和一個能自由呼叫加解密oracle $E,D$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加解密演算法的金鑰
- $\mathcal{A}$向 $\mathcal{C}$ 提交任意明文 $m$, $\mathcal{C}$ 計算對應的密文 $c$
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交任意密文 $c$, $\mathcal{C}$ 計算對應的明文 $m$
- 重複步驟3 $q$ 次, 步驟4 $q^{'}$ 次 (即敵手查詢 $q$ 次不同訊息的密文, 查詢$q^{'}$ 次不同密文的解密結果)
- $\mathcal{A}$ 提交明文 $m_{0}$ 與 $m_{1} $ 給 $\mathcal{C}$
- $\mathcal{C}$ 以拋硬幣(flip a coin)的形式隨機選擇一個位元 $b\stackrel{\$}{\leftarrow} \{0,1\}$, $\mathcal{C}$ 加密返回挑戰密文 $c_{b}$
- $\mathcal{A}$ 根據 $c_{b}$ 輸出自己的猜測位元 $b^{*}$ (即敵手猜測 $\mathcal{C}$ 是加密的 $m_{0}$ 還是 $m_{1}$ )
在此模型中,由於敵手沒有金鑰, 因此它很難生成合法的密文。因此,$\mathcal{A}$每次提交的密文大概率會解密出一些無意義的結果,但開放解密Oracle的目的在於,讓敵手能在擁有並篡改密文的條件下,依然做到對演算法明文的保護。因為一個加密演算法如果僅能支援CPA安全性,那麼中間人敵手可能會截獲密文並對其進行鍼對性的篡改,從而使這種篡改也被施加到了解密後的明文中,進而敵手能通過篡改後的明文來攻破加密的不可區分性。
因此,我們希望一個演算法還能實現對其輸出密文的保護,使得敵手無法通過修改密文來觀測解密演算法的行為,IND-CCA就是由這一需求應運而生的。類似地,IND-CCA中敵手的優勢可寫作:
$$ \mathrm{Pr}[\mathcal{A}\ \mathrm{wins}] = \mathrm{Pr}[b^{*}=b] = \frac{1}{2} + \mathrm{Adv}_{E,D}^{\mathrm{IND-CCA}}(\mathcal{A}) $$
IND-CCA2
與上面的IND-CCA相比,IND-CCA2只多了一個步驟,如下所示。
其步驟總結如下:
- Game中擁有一具有多項式資源的敵手$\mathcal{A}$ 和一個能自由呼叫加解密oracle $E,D$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加解密演算法的金鑰
- $\mathcal{A}$向 $\mathcal{C}$ 提交任意明文 $m$, $\mathcal{C}$ 計算對應的密文 $c$
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交任意密文 $c$, $\mathcal{C}$ 計算對應的明文 $m$
- 重複步驟3 $q$ 次, 步驟4 $q^{'}$ 次 (即敵手查詢 $q$ 次不同訊息的密文, 查詢$q^{'}$ 次不同密文的解密結果)
- $\mathcal{A}$ 提交明文 $m_{0}$ 與 $m_{1} $ 給 $\mathcal{C}$
- $\mathcal{C}$ 以拋硬幣(flip a coin)的形式隨機選擇一個位元 $b\stackrel{\$}{\leftarrow} \{0,1\}$, $\mathcal{C}$ 加密返回挑戰密文 $c_{b}$
- $\mathcal{A}$ 在收到挑戰密文 $c_{b}$ 後, 還可以向 $\mathcal{C}$ 提交若干次解密查詢
- $\mathcal{A}$自己的猜測位元 $b^{*}$ (即敵手猜測 $\mathcal{C}$ 是加密的 $m_{0}$ 還是 $m_{1}$ )
可以看到在第8步時, CCA2允許敵手在提交了自己的挑戰明文後,依然能進行若干次解密查詢。與CCA(或說CCA1)相比,CCA2令敵手通過最開始的若干次解密查詢進行學習與觀察後,即使收到了挑戰密文 $c_{b}$,還能繼續進行學習。
這個能力讓敵手可根據 $c_{b}$ 繼續去構造和猜測,而且CCA2中 $\mathcal{C}$ 提供的 Oracle 相當於永久開放給敵手[1],而CCA1在敵手最初查詢後 Oracle 就不允許再訪問了,因此CCA2這一定義是比CCA1更強的安全模型。
小結?:目前我們已介紹了三種安全模型IND-CPA、IND-CCA、IND-CCA2,這其中的敵手目的都是為了區分 $m_{b}$ 對應的密文。三者的安全要求逐漸提高,IND-CCA2也是目前標準定義下對安全性要求最高的模型,當前學術界一般認為一個新的公鑰加密演算法都應達到IND-CCA2的要求。
LOR-CPA
與IND-CPA相比,我們首先可以看到這個安全性定義的目標發生了變換,即從IND(不可區分性)變成了LOR(Left Or Right, 即左或右),但本質依舊不變。這一Game的具體示意圖如下所示。
可以看到,在LOR-CPA中,那個隨機的bit $b$ 一開始就選擇好了,即 $\mathcal{C}$ 每次加密的其實都是左邊或右邊的明文。基本步驟如下所示:
- Game中擁有一具有多項式資源的敵手$\mathcal{A}$ 和一個能自由呼叫加密演算法oracle $E$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加密演算法的金鑰
- $\mathcal{A}$ 提交明文 $m_{0}$ 與 $m_{1} $ 給 $\mathcal{C}$
- $\mathcal{C}$ 以拋硬幣(flip a coin)的形式隨機選擇一個位元 $b\stackrel{\$}{\leftarrow} \{0,1\}$ ,計算 $m_{b}$ 對應的密文 $c_{b}$
- 重複步驟 3 $q$ 次 (即敵手和挑戰者實現 $q$ 次對左邊或右邊訊息的加密)
- 敵手輸出自己的猜測位元 $b^{*}$
在這一安全模型中,敵手的目標是猜測$\mathcal{C}$加密的是左右哪邊的明文。因此,與IND-CPA相比,LOR-CPA這個Game本身其實是相當於IND-CPA的最後敵手應答挑戰密文的那一次query。誠然在LOR-CPA中,敵手其實也可以重複多次進行 $m_{0}$ 與 $m_{1} $ 的查詢,但那一隨機bit始終是固定的。
而在安全強度方面,LOR-CPA比IND-CPA是要稍弱一些的[2],因為LOR-CPA並不包含有若干次的任意明文的詢問學習過程,雖然它不像IND-CPA那般成為了衡量加密演算法安全性的“至上公理”[3],但還是值得我們去記住和分析的。
ROR-CPA
此處的ROR意為Real or Random, 該Game的示意圖如下所示。
在ROR-CPA中,挑戰者要麼加密敵手所提供的輸入,或者加密一個和敵手輸入等長的隨機字串。而敵手的目標是決定$\mathcal{C}$加密的是真正的明文輸入 (Real), 還是一個隨機的輸入(random),這一Game的基本步驟如下所示:
- Game中擁有一具有多項式資源的敵手$\mathcal{A}$ 和一個能自由呼叫加密演算法oracle $E$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加密演算法的金鑰
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交明文 $m$
- $\mathcal{C}$ 以拋硬幣(flip a coin)的形式隨機選擇一個位元 $b\stackrel{\$}{\leftarrow} \{0,1\}$, 令 $m_{b}=m$ ($b=0$) 或 $m_{b}\stackrel{\$}{\leftarrow}\{0,1\}^{n}$ ($b=1$);
- $\mathcal{C}$ 計算並返回 $m_{b}$ 對應的密文 $c_{b}$
- 重複步驟 3-5 $q$ 次 (即敵手和挑戰者實現 $q$ 次對左邊或右邊訊息的加密)
- 敵手輸出自己的猜測位元 $b^{*}$
ROR-CPA在安全性強度上是與LOR-CPA等價的。在介紹完ROR-CPA後,我們在不可區分性這一小節中的經典安全定義都總結完了,下面將會給大家介紹兩個出現在很多實際Cyber Attack中的安全定義。
Known Plaintext Attack
本文一上來就為大家介紹了IND-CPA這個經典模型,而很多教材會先為讀者介紹兩個模型,即 Known Plaintext Attack 與 Ciphertext Only Attack。而在理解了IND-CPA及上述安全模型後,這兩個安全定義就非常好理解了。
KPA的中文是"已知明文攻擊", 但其真正含義是敵手在可以獲取一個加密演算法的明文及對應密文之後,試圖還原該演算法的金鑰。因此,KPA的安全定義更適用於一些主動的半侵入式攻擊,即攻擊者能實際獲取並執行承載有這個密碼演算法的裝置,比如智慧卡,密碼晶片等。
這樣一來,敵手的目標就是希望通過不斷呼叫這個裝置裡的密碼演算法,從而獲取非常多的演算法明密文對,進而嘗試還原裝置中的金鑰,達到攻破甚至複製這一裝置的最終目標。KPA這個安全定義常見於密碼演算法的能量側通道分析中。
Ciphertext Only Attack
同理,COA就表示唯密文攻擊,即敵手僅能以中間人的狀態截獲一些演算法的密文,他無法呼叫這個演算法,即僅能通過眼前拿到的這一堆密文中,嘗試得到與明文或者金鑰有關的資訊。
可以看到,唯密文攻擊是幾個定義中敵手能力最弱的了,敵手無法自行構造與選擇要加密或解密的明密文,也無法自由地呼叫這個演算法。KPA與COA這兩種有些另類的安全模型通常會出現在一些系統安全的問題中,如一些網路攻擊,物理攻擊等。在密碼理論領域中,前文介紹的幾類模型是更為常用的。
資料完整性
INT-CTXT
談到資料完整性,我們主要考慮的是訊息(明文, PlainText)完整性或演算法輸出(密文,CiphtText)的完整性。因此,INT(Integrity)可以理解為,敵手無法偽造一段密文或某段合法密文對應的明文,使其在接收方看來是由傳送方生成且傳輸過程中未受到任何篡改的。
因此,INT-CTXT這一Game的主要步驟為:
- Game中擁有一具有多項式資源的敵手 $\mathcal{A}$ 和一個能自由呼叫加密演算法oracle $E$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$K\stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為加密演算法的金鑰
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交明文 $m$, $\mathcal{C}$ 計算 $m$ 對應的密文 $c$
- 重複步驟 3 $q$ 次 (即敵手查詢 $q$ 次不同訊息的密文)
- $\mathcal{A}$ 提交一密文 $c^{*}$ 給 $\mathcal{C}$
- $\mathcal{C}$ 對 $c^{*}$ 執行解密操作, 返回解密後的訊息 $m^{*}$;
其示意圖如下圖所示:
這一安全模型中,敵手可以多次訪問加密Oracle,而最終進行挑戰時,需提交一個密文 $c^{*}$, 其目的是使 $c^{*}$ 能正常通過解密演算法得到一個明文 $m^{*}$。如果 $m^{*}$ 非空 (即真的完成了解密過程)且 $c^{*}$ 沒有在查詢階段出現過,那麼就稱 $\mathcal{A}$ 贏得這個Game。此時大家就會想到,豈不是任何一個對稱加解密演算法都做不到INT-CTXT嗎?
沒錯,一個不加任何防護的對稱密碼演算法,如AES,就是不能做到INT-CTXT安全性,因為任何人可以隨便拿一條資料輸入到解密演算法裡,只要資料的格式是正確的,雖然解密輸出的內容可能是一些雜亂的無意義字元,但依然是有效的明文。
因此,如果要達到INT-CTXT安全性,就必須對原有演算法輸出的密文加以防護,例如增加一訊息認證演算法(MAC)等。看到這裡,可能很多讀者會聯想這一安全性與上文中IND-CCA的聯絡。其實,當一個演算法同時具備IND-CPA與INT-CTXT安全性時,該演算法就有潛力是IND-CCA安全的;這一結論通常被用於認證加密演算法的安全性證明中。
INT-PTXT
與密文完整性相對應,PTXT指的是明文的完整性,而這一Game的步驟與INT-CTXT完全相同。唯一的區別在於,INT-PTXT中的敵手 $\mathcal{A}$ 獲勝的條件是:解密後的 $m^{*}$ 非空且 $m^{*}$ 沒有在之前的查詢過程中提交過。注意INT-CTXT要求的則是 $c^{*}$ 沒有出現過。
通常, INT-CTXT中這一安全性是稍強於INT-PTXT的,即對於一個方案而言,如果是INT-CTXT安全的,那麼也一定是INT-PTXT安全的。這也不難理解,因為在解密演算法為確定的、無碰撞的條件下,如果一個明文 $m^{*}$ 沒有提交過,那麼加密後的密文必然也沒有出現過;否則如果密文 $c^{*}$ 出現過的話,由加解密置換的唯一性可知 $c^{*}$ 對應的明文必然也出現過。因此一般情況下,我們希望能夠證明某個演算法是INT-CTXT安全的。
? 在資料完整性中,有些讀者可能會想到密碼學雜湊函式的三個安全性質: 單向性、弱碰撞性、強碰撞性;而本文主要聚焦一個密碼演算法資料完整性的通用模型,雜湊函式可以作為一種實現上述資料完整性的工具。
抗否性與身份認證
介紹完了資料完整性後,我們該介紹最後一部分常見的安全需求與安全模型了,即抗否性(Non-repudiation),或稱抗抵賴性。這一需求是指某一方計算出的資料是與它身份繫結的,沒有其他人能像這一方本人一樣計算出一樣的資料。因此,數字簽名、身份認證等演算法或協議需要對這一性質加以描述。下面將介紹幾個最常見的安全模型。
EUF-CMA
這一模型中的CMA指Chosen Message Attack,即選擇訊息攻擊,本質上與CPA其實是一樣的,只不過在數字簽名等演算法中,用訊息一詞要比明文更加貼切。CMA和CPA都是形容敵手能自由地向演算法提交輸入並獲得的相應輸出這一能力。
EUF則是指存在性不可偽造,即 Existential UnForgeability,指的是對於訊息認證、數字簽名等演算法而言,當敵手通過查詢獲得了 $q$ 個簽名後, 他無法再獲得第 $q + 1$ 個簽名。這一Game的示意圖如下所示。
可以看到,其基本形式依然和前文的模型保持相似,在查詢階段,敵手 $\mathcal{A}$ 可不斷與一實現了簽名Oracle的 $\mathcal{C}$ 互動,來獲得所提交訊息 $m$的簽名 $\sigma$。在進行 $q$ 次互動後,敵手將輸出一對 $(m^{*}, \sigma^{*} )$。這一Game的主要步驟為:
- Game中擁有一具有多項式資源的敵手 $\mathcal{A}$ 和一個能自由呼叫簽名演算法oracle $E$ 的挑戰者$\mathcal{C}$。
- $\mathcal{C}$ 隨機選取$\mathsf{sk} \stackrel{\$}{\leftarrow} \{0,1\}^{n}$,作為簽名演算法的私鑰
- $\mathcal{A}$ 向 $\mathcal{C}$ 提交訊息 $m$, $\mathcal{C}$ 得到 $m$ 對應的簽名 $\sigma $
- 重複步驟 3 $q$ 次 (即敵手查詢 $q$ 次不同訊息的簽名)
- $\mathcal{A}$ 輸出一對 $(m^{*}, \sigma^{*})$;
- $\mathcal{C}$ 對 $\sigma^{*}$ 進行驗證,並返回驗證結果;
若最後敵手輸出的 $m^{*}$ 未曾被查詢過,且 $\sigma^{*}$ 能通過驗證,就可認為敵手挑戰成功。這一結果即為“簽名的偽造”,此處敵手的優勢可寫為:
$$ \mathrm{Adv}_{S}^{\mathrm{EUF-CMA}}(\mathcal{A}) = \mathrm{Pr}[\mathcal{A}\ \mathrm{forges}\ (m^{*}, \sigma^{*})] $$
SUF-CMA
在EUF-CMA中,E表示的是Existential,而此處的SUF的S則表示Strong,即強不可偽造性,這一Game的基本模型如下圖所示。
與EUF-CMA相比,SUF-CMA唯一的不同之處在於敵手最終輸出偽造的簽名對 $(m^{*}, \sigma^{*} )$ 時,不僅要求 $m^{*}$ 是未曾查詢過的,也要求籤名 $\sigma^{*}$ 是未曾出現過的。因此,EUF-CMA這一Game中的敵手只需要尋找到 $m$ 關於 $\sigma$ 的一個碰撞即可,而在SUF-CMA中,敵手的任務並不是要找碰撞,而是要從根本上偽造出一個簽名訊息對。
EUF-CMA中的敵手最差也可以使用生日攻擊去暴力地尋找碰撞,而SUF-CMA中的敵手則是應真正生成去另外一對 $(m^{*}, \sigma^{*} )$。因此,SUF-CMA是比EUF-CMA安全性更強的安全模型。這兩個模型通常用於訊息認證、數字簽名演算法的安全性定義上,以說明其簽名的不可偽造性,從而使實體是不可抵賴。
Impersonation
這一部分要說明的安全模型與本文前面所介紹的都有所不同,對於一個身份認證協議而言,impersonation表示敵手最終能假冒某個合法使用者的身份通過認證。這一概念最開始是為了描述Fiat-Shamir Protocol 以及 Shnorr Identification Protocol的安全性。
然而,身份認證協議是多種多樣的,這一安全模型也不像上面的 EUF-CMA 等具有統一的定義方式。不過,Impersonation的基本過程依然可以總結為“查詢-挑戰”兩個階段, 即敵手先根據協議開放的某個Oracle進行查詢,之後生成認證資料“試圖”通過協議的檢查,完成身份的認證。
小結?: 到此為止,幾個經典的安全模型均介紹完畢。下面本文將介紹量子計算機模型下的安全模型,與這些經典安全模型相比,它們的互動方式與計算方法均有所不同。
量子安全模型
量子計算與量子查詢
為介紹量子計算機下的安全模型, 需要了解下載量子計算機中的演算法有何不同。而量子計算機離不開量子力學,我們最熟悉的關於量子力學的理論莫過於薛定諤的貓。量子的世界本質上是用態( $\psi$ )來描述的,例如,放著貓的盒子如果看作一個量子世界的話, 薛定諤的貓死了其實就是一個態(純態),而薛定諤的貓既生又死也是一個態,只不過是一個疊加態(混態)。那麼,量子計算機究竟強大在何處呢?
量子計算機與量子演算法的基本操作物件是量子位元(qubit),而在量子世界中,一個量子位元可以既是0也是1,即處於0-1疊加態。這樣一來,量子計算機中的一個8 qbit暫存器,在某一時刻可最多表示 $2^{8}$ 條資料!但經典計算機中的8 bit暫存器某一時刻只能存1個資料。因此,對8 qbit暫存器裡的資料運算一次,能最多得到 $2^{8} $種結果,這與經典計算機相比會是指數級別的算力提升。這也就是為什麼密碼學家們對於量子計算機的出現如此恐慌了。那麼,我們的安全模型在量子計算下該如何表示呢?
首先,需要明確量子安全模型中敵我的能力與目標。在量子安全模型中, 敵手和挑戰者是都具備量子計算能力的, 而挑戰者中的密碼演算法已經被實現或抽象為了一個quantum accessable oracle。注意演算法本身是可執行於經典計算機上的, 只不過為了方便,我們人為抽象它為一個量子oracle。此時這個演算法在面對一個8 qbit的輸入資料疊加態時,能直接對其操作並返回對應的輸出資料疊加態。即,演算法的功能不變,但支援了對疊加態量子資料的操作。
由此,在量子計算下,敵手 $\mathcal{A}$ 發起的一次針對加密演算法的量子查詢可以表示如下[4]:$$ \sum_{m, c} \psi_{m, c}|m, c\rangle \quad \longrightarrow \quad \sum_{m, c} \psi_{m, c}|m, c \oplus \operatorname{Enc}(k, m)\rangle $$ 這個式子第一眼看上去可能完全不知道在做什麼,不要急我們一一解釋。式子中的左半邊到右半邊, 表示這一次量子查詢前後敵手 $\mathcal{A}$ 的狀態變化。而式子左右兩端的求和式, 分別表示兩個量子疊加態 (一個量子計算機的當前狀態可用一個疊加態來表示)。因此,這個式子實際就表示一次敵手的量子計算機狀態的轉換。
而敵我雙方量子計算機所執行的運算, 本質就是在讀寫兩個量子暫存器中的資料: 一個輸入明文量子暫存器 QM 和一個輸出密文量子暫存器 QC 。對於敵手 $\mathcal{A}$, 他在查詢時會往QM中"疊加"入大量的明文訊息, QC則置空;對於挑戰者 $\mathcal{C}$, 則會讀取 QM 中傳過來的明文疊加態, 進行加密演算法的運算後, 得到密文的疊加態並寫入 QC 中,返回給敵手。
那回歸到式子本身, $ \sum_{m, c} \psi_{m, c}|m, c\rangle $其實就表示將若干個明文態疊加起來變成一個疊加態, 即查詢前的量子暫存器的內容。$ \sum_{m, c} \psi_{m, c}|m, c \oplus \operatorname{Enc}(k, m)\rangle$ 則表示挑戰者計算後, 往QC中疊加了密文後的新疊加態。式子中的 $\psi$ 表示某個量子態的表徵值。
因此, 量子查詢用一句話概括就是: 對於QM, QC這兩個量子暫存器而言, $\mathcal{A}$ 往QM裡疊加訊息並提交給挑戰者, $\mathcal{C}$ 計算後往QC裡疊加密文並返回給敵手。這一過程的示意圖如下:
IND-qCPA
那麼在明確量子查詢的含義後, IND-qCPA的過程其實就明瞭了. 這一Game的示意圖如下所示:
可以看到, 在敵手的查詢部分, 就是採用的我們上面介紹的量子查詢; 然而, 在最終的挑戰環節, 敵手和挑戰者依然採用的是經典模型。這是因為如果敵手如果最終的挑戰也是以量子暫存器的方式進行的話, Boneh等曾證明了敵手總能正確猜測出來那個bit $b$。
因此, 我們不得不妥協一下, 讓敵手可以執行量子查詢, 但是不能執行量子挑戰。除此以外, IND-CPA與IND-CCA是如何理解的, IND-qCPA與IND-qCCA 我們還可以怎麼去理解。
EUF-qCMA
而對於量子簽名查詢, 和加密類似, 核心的框架依然沒變, 只是套用了量子查詢這種形式下。這一Game的示意圖如下所示:
同理, 如果用式X的方式寫出簽名方案下的量子狀態轉移式, 應該寫作[5]: $$ \sum_{m, \sigma} \psi_{m, \sigma}|m, \sigma\rangle \quad \longrightarrow \quad \sum_{m, \sigma} \psi_{m, \sigma}|m, \sigma \oplus \operatorname{Sign}(k, m)\rangle $$ 此處的簽名挑戰同樣是在經典計算機而非量子計算機下執行的。
可能很多讀者此時心中有個疑問❓:量子查詢與量子安全模型和經典模型似乎也沒什麼不同嘛!那為什麼量子安全模型普遍認為是更強的安全性要求呢?
還記得本節開始時提到,一個量子暫存器中蘊含了指數量級的資料,但是攻擊者在觀測這個量子暫存器時,會發生疊加態的坍縮,即雖然有那麼多資料,但攻擊者每次依然只能獲得一個值。
然而,他可以藉助高效的量子搜尋演算法迅速地找到自己想要的那個值。Grover演算法[6]、Shor演算法、Simon演算法、Deutsch–Jozsa 演算法等就是能在量子疊加態資料中,以較低的複雜度進行查詢的量子演算法。量子安全模型中的敵手也可以使用這些演算法,這就是讓密碼學家們一直擔憂的達摩克利斯之劍。
總結
現代密碼學中的主要安全模型與後量子安全模型已經全部介紹完了, 如果我們總結下規律可以發現, 這些安全模型的定義都遵從 安全目標-互動模型 這個規則, 例如IND-CPA中IND形容的是演算法輸出達到不可區分性, 而達到這一目標是在選擇明文攻擊 (CPA)這一互動模型下實現的。
因此, 只要你能嚴格的定義出某種互動模型以及對應的安全目標, 你就能提出屬於你的安全模型。因此,其實還有很多學術界會用到的密碼學安全模型本文是沒有介紹的,但萬變不離其宗,任何一個密碼學安全模型都脫離不了所針對的演算法功能及安全目標。
綜上,本文一共介紹了14個現代密碼學中的安全模型,瞭解它們的結構和原理可以為密碼學中的安全性證明打下堅實的基礎。最後,感謝你的閱讀,以一句歌詞作為結束。
“毋忘你 精彩過別來無恙如遊戲,我本人 明白什麼都總有限期” —— 吳雨霏《我本人》
參考
[1] https://crypto.stackexchange.com/questions/99295/the-essential-differences-between-ind-cca1-and-ind-cca2
[2] https://crypto.stackexchange.com/questions/33279/difference-left-or-right-cpa-security-ind-cpa-security
[3] https://link.springer.com/content/pdf/10.1007/s00145-008-9026-x.pdf
[4] https://eprint.iacr.org/2012/606.pdf
[5] https://eprint.iacr.org/2013/088.pdf
[6] https://en.wikipedia.org/wiki/Grover's_algorithm
這是我其他關於密碼學的部落格,歡迎閱讀並給出建議。