初步學習密碼系統的安全性

随机生成一个id發表於2024-05-21

密碼系統的最終目標是為了保證資料的安全性,比如機密性、完整性等等。

密碼系統安全性的三種評價方式

第一種,無條件安全性,指的是假設攻擊者有無限的計算資源,仍然無法破譯密碼系統。照我看來,這種安全性是“真正的安全”。

第二種,計算安全性。某密碼體制擁有計算安全性,指的是攻擊者攻破該體制所需要的計算資源遠遠超出其水平。

第三種,可證明安全性,這種評估方式是將密碼系統的安全性歸約為某個經過人們深入研究的數學難題,此數學難題被認為是求解困難的。我所知道的數學難題包括:大整數的素數因子分解、離散對數的計算等。當然,這種方式的問題在於,它只說明瞭這個密碼體制的安全性依賴於某個困難問題,並沒有完全證明其本身的安全性。

實際應用的密碼體制的安全性定義

對於現在實際應用的密碼系統來說,都存在暴力法能夠破解,因此實際使用的密碼體制只能提供計算安全性。一般我們說密碼系統滿足以下準則之一,就認為達到了實際安全性:

  1. 破譯所需要的實際計算量(包括時間或費用成本)非常巨大,以至於實際上無法實現。
  2. 破譯所需要的時間超過被加密資訊有用的宣告週期。這一點實際上與資料本身的特點有關,資料往往是具有時效性的,比如戰爭中的命令往往只需要在戰鬥開始之前保密等等。
  3. 破譯所需要的費用超過被加密資訊本身的價值。這裡的“價值”應該不僅僅指的是金錢吧?

可證明安全性

可證明安全體系中有三大要素:安全模型、安全性定義和困難性問題。

安全模型

安全模型分為兩個部分:安全目標和敵手能力。

籠統地說,密碼系統安全目標就是讓攻擊者對密碼一無所知,無法獲取任何關於明文的資訊。但是還需要明確地定義。現在我們有兩個常用的安全目標:

  1. 不可區分性,即Indistinguishability或IND。一般透過一個遊戲說明:攻擊者選定兩個明文,挑戰者挑選其中一個加密並返回密文,攻擊者無法分別出其對應的明文。不可區分性也叫語義安全性
  2. 不可展性,即Non-malleability或NM。直觀地說就是指攻擊者無法構造出與已給密文相關的新密文。給定密文\(C_1 = Enc(M_1)\),攻擊者應該不能構造出\(C_2\),使得其對應的明文\(M_2 = Dec(C_2)\)\(M_1\)存在某種非平凡的關係\(R\)

敵手能力可以用幾個模型來描述。在下面的不同攻擊模型中,攻擊者的能力由弱到強:

  1. 唯密文攻擊即Ciphertext only attack,攻擊者只獲得了若干密文,而沒有任何明文資訊。攻擊者只需要監聽通道就可以抓取密文實施這種攻擊。
  2. 已知明文攻擊即Known plaintext attack,攻擊者有若干個明-密文對。(與唯密文攻擊相比,攻擊者可以有明文資料以及明-密文資料的對應關係。)
  3. 選擇明文攻擊即Chosen-plaintext attack或CPA。假設攻擊者佔據加密機(encryption oracle,可以理解為一個“明文->密文”的黑盒),從而可以選擇任意明文並使用加密機構造出對應密文。
  4. 選擇密文攻擊即Chosen-ciphertext attack或CCA。這種模型下,假設攻擊者既能實施明文攻擊,還佔據解密機(decryption oracle)從而可以選擇任意密文並解密得到對應明文,據此進行金鑰破解或明文推測。CCA根據攻擊者構造密文階段的不同,可以分為CCA1(Non-adaptive CCA)和CCA2(Adaptive CCA)。CCA1中,攻擊者必須一次性將構造好的密文輸入解密機得到對應的明文;而在CCA2中,攻擊者允許在得到前一個密文對應的明文的基礎上構造後續的密文。顯然,CCA的假設最弱,攻擊者的能力比CPA更強。

安全性定義

安全性定義與上面所說的敵手的能力相關。比如常見的一個安全性定義是IND-CPA安全。

通常會把安全性定義描述成一個遊戲game,其中需要定義不同的角色(如敵手A與挑戰者C),遊戲通常被描述為若干個流程步驟,最終得到定義,通常最後的定義類似“如果對於任何多項式時間的敵手A,存在一個可忽略的優勢\(\sigma\),使得某某條件滿足,則稱這個演算法具有某某安全性(比如IND-CPA安全)”。

困難問題

前面也提到過,可證明安全通常是歸約到困難問題上來進行證明。密碼學中常用的困難問題有離散對數問題(discrete logarithm problem,簡稱DLP)、CDH問題(computational Diffie-Hellman)、DDH問題(decisional Diffie-Hellman)、BDH問題(bilinear Diffie-Hellmann)。

通常要證明一個加密演算法(或協議)的安全性,首先需要確定它想要實現的安全目標,然後根據安全性定義確定敵手能力,構建安全性模型,再把對加密演算法(或協議)的攻擊歸約到已被證明困難的問題上,最終得證。

相關文章