組合方案安全證明
令 CS 是一個組合方案 $ n $ 公鑰子方案。
CS 由所有子方案共享的兩個算法 Setup 和 KeyGen 以及每個子方案的所有其他算法組成。
假設每個子方案在隨機 Oracle 模型 (ROM) 中都是單獨安全的。
我想證明 CS 是安全的,定義如下:如果 CS 的所有子方案都是共同安全的,則 CS 是安全的,這意味著每個子方案在其他子方案存在的情況下都是安全的。
$ Proof $ . 假設對手 A 能夠破壞子方案的安全性 $ i \in n $ 在其他人面前。
我們可以建構一個模擬子方案的對手 B $ j \neq i \in n $ 通過程式隨機預言機,在一個與真實實驗無法區分的遊戲中。
然後 B 將利用 A 的攻擊來破壞子方案的獨立安全性 $ i $ ,我們認為它是安全的。我們通過矛盾證明 CS 是安全的。
這有意義嗎?如果不是,我如何證明 CS 是安全的?
如果兩個安全方案都是 UC 安全的,那麼結合它們來設計一個新的安全方案,就原始安全方案中定義的安全屬性而言也是安全的。在 UC 框架中已經證明了這一點。
不,沒那麼簡單。特別是,您必須更準確地了解組合的含義。如果您想要一個關於如何將不安全的事物組合起來變得安全的好例子,您可以閱讀:讓我們考慮以下一次性簽名方案 $ \Sigma_1, \Sigma_2 $ 兩者都等於 帶有消息空間的該方案 $ {0, 1}^4 $ .
請注意,這兩種方案已被證明是安全的(它們相同的事實與您所做的假設無關)。
現在讓我們考慮簽名方案 $ \Sigma_3 $ 超過 $ {0, 1}^8 $ ,這是的串聯 $ \Sigma_1 $ 和 $ \Sigma_2 $ . IE:
$ \Sigma_3.\texttt{KeyGen} = \Sigma_1.\texttt{KeyGen} $ , 和 $ \Sigma_3.\texttt{Sign} ( sk, m_1 || m_2) =\Sigma_1.\texttt{Sign} (sk, m_1)||\Sigma_2.\texttt{Sign} (sk, m_2) $ . $ \Sigma_3.\texttt{Verify} ( vk, \sigma_1 || \sigma_2) =\Sigma_1.\texttt{Verify} (vk, \sigma_1)\wedge\Sigma_2.\texttt{Verify} (vk, \sigma_2) $ .
然後,如果您獲得 $ 00001111 $ , 你可以簽入每條消息 $ {0, 1}^8 $ 這與一次性不可偽造性相矛盾。QED
要“組合方案”人們正在使用universable-composability,您可以查看此連結以更好地了解它的工作原理:
具體來說,什麼是通用可組合性保證?它在哪裡適用,在哪裡不適用?
但:
1)您的方案僅僅安全是不夠的,它們必須是 UC 安全的。
2)你必須確保你的組合被UC的形式主義所擷取。
總而言之,這有點像烹飪。不是因為兩餐分開好,兩者結合才能創造出一頓美餐。
關於您推理中的錯誤“假設對手 A 能夠通過破壞子方案的安全性來破壞 CS 的安全性”,當您進行安全證明時,您不應該假設對手如何破壞您的方案。