安全定義中的消息空間
以下範例中的消息空間是什麼?消息空間與安全定義有何關係?
我的意思是,如果您的消息空間是 $ {0,1}^n $ 或者如果是 $ {0,1} $ ?
我們說 $ (\mathsf{K},\mathsf{E},\mathsf{D}) $ 是 $ (t,\epsilon) $ -IND-CPA 對所有人來說都是安全的 $ t $ -有界對手 Adv:
$ |\mathrm{Pr}[ (pk,sk)←\mathsf{K}(1^n); (m_0,m_1)←\mathrm{Adv}(pk);c ← \mathsf{E}{pk}(m_0): \mathrm{Adv}(c) = 1] $ $ -\mathrm{Pr}[(pk,sk)←\mathsf{K}(1^n); (m_0,m_1)←\mathrm{Adv}(pk); c←\mathsf{E}{pk}(m_1): \mathrm{Adv}(c) = 1 ]| \leq ε $
Adv 輸出的位置 $ |m_0|=|m_1| $
在你的公式中, $ n $ 似乎與密鑰空間有關,而不是消息空間。
消息空間不會干預 IND-CPA 的定義,這是一件好事,因為實際的消息空間包含在給定上下文中“有意義”的消息中。在某些情況下,攻擊者已經猜出了相當多的被攻擊消息,並且消息空間大小(如“消息可能有意義地假設的不同值的數量”)可以縮小到 2(例如,如果攻擊者試圖猜測是/否的答案)。因此,無論您使用什麼安全定義,都必須能夠處理非常小的消息空間。
您引用的公式是以下思想實驗的翻譯:
- 生成一個具有給定“大小參數”的密鑰對 $ n $ (例如,我們使用 1024 位密鑰進行 RSA)。公鑰是公開的,即對手可以看到它。
- 對手產生兩條消息 $ m_0 $ 和 $ m_1 $ 他從加密方案可以處理的一組消息值中選擇(例如,使用 RSA、1024 位密鑰和 PKCS#1 v1.5 填充, $ m_0 $ 和 $ m_1 $ 必須是不超過 117 個字節的字節序列)。
- 我們隨機選擇兩條消息中的一條,對其進行加密,然後將其返回給對手。
- 攻擊者現在必須猜測我們加密了兩條消息中的哪一條。
如果我們多次這樣做,我們可以計算出攻擊者的平均成功率。如果加密系統是“完美的”,那麼對手只能做一個隨機二元選擇。但是我們給了他一些 CPU 能力( $ t $ 參數)並且他可以使用它來嘗試猜測私鑰,因此攻擊者總是可以正確猜測而不是錯誤猜測。這 $ ε $ 價值是對“多一點”的衡量。
具體來說,在公式中,第一個機率表示對手在回答“1”時做錯的頻率,第二個機率表示對手做對的頻率。兩個機率之差應該不超過 $ ε $ . 請注意,如果對手猜對的次數不能超過一半,那麼他猜對的次數也不能少於一半(否則,他可以系統地反轉他的答案;一個總是指向南方的指南針非常有用,一旦你知道)。
“CPA”表示“Chosen-Plaintext Attack”:在思想實驗中,對手可以選擇 $ m_0 $ 和 $ m_1 $ 如他所願,並且可以為每個攻擊實例再次執行此操作。