Homomorphic-Signatures

為什麼是函式FFf同態簽名中驗證算法的輸入之一?

  • April 6, 2020

眾所周知,同態簽名方案由常用算法組成 $ (\text{KeyGen} , \text{Sign} , \text{Verify}) $ 以及一個額外的算法 $ \text{Evaluate} $ 將消息上的函式“翻譯”為簽名上的函式。如果 $ \sigma $ 是消息上的一組有效簽名 $ m $ , 然後 $ \text{Evaluate}(f, \sigma) $ 應該是一個有效的簽名 $ f(m) $ .

在我閱讀的幾篇論文中,評估算法定義為 $$ \sigma’ \gets \text{Evaluate}(pk, \tau, f, \vec{\sigma}) $$ 驗證算法定義為 $$ 0 \text{ or } 1 \gets \text{Verify}(pk, \tau, m, f, \sigma’) $$ 這樣對於每條消息 $ \vec{m} $ , 每個標籤 $ \tau $ , 有 $$ \text{Verify}(pk, \tau, f(\vec{m}), f, \text{Evaluate}(pk, \tau, f, \vec{\sigma})) = 1 $$ 我想知道為什麼 $ f $ 是算法中的輸入之一 $ \text{Verify} $ .

為什麼我們不能將驗證算法定義為 $$ 0 \text{ or } 1 \gets \text{Verify}’(pk, \tau, m, \sigma’) $$ 這樣對於每條消息 $ \vec{m} $ , 每個標籤 $ \tau $ , 有 $$ \text{Verify}’(pk, \tau, f(\vec{m}), \text{Evaluate}(pk, \tau, f, \vec{\sigma})) = 1 $$

我認為同態簽名方案類似於同態加密方案。在同態加密方案中,解密算法不使用 $ f $ 解密密文。如果驗證算法需要 $ f $ ,如果簽名由評估算法計算多次,我們如何才能正確驗證?

功能 $ f $ 是輸入的一部分 $ \mathsf{Verify} $ ,因為同態簽名的目標是在簽名消息上計算經過身份驗證的函式。特別是,給定一條消息 $ z $ 和一個簽名 $ \sigma_z $ ,我們不僅要驗證 $ \sigma_z $ 是一個有效的簽名 $ z $ , 但此外 $ z $ 是某個函式的輸出 $ f $ 應用於在某些標籤下簽名的某些輸入 $ \tau $ .

以本文為例您可以想到標籤 $ \tau $ 作為“成績”和列表 $ (m_i, \sigma_i) $ 是一堆單獨的成績,分別在標籤下簽名 $ \tau $ . 同態簽名現在使這些簽名的個人成績的所有者能夠計算簽名 $ \sigma_z $ 這證明了一些價值 $ z $ 確實是平均成績 $ m_i $ .

這種真實性要求與(完全)同態加密形成鮮明對比,在同態加密中,您只想要更改密文的能力,但對生成的加密的真實性沒有要求。

一個可能更接近您正在尋找的概念是所謂的可塑性簽名(參見 Def. 3.1),它由算法定義 $ \mathsf{Keygen}, \mathsf{Sign}, \mathsf{Verify}, \mathsf{SigEval} $ ,其中前三個算法的定義與任何標準簽名方案中的完全相同。算法 $ \mathsf{SigEval} $ 作為輸入 $ (\mathsf{pk}, f, \vec{m}, \vec{\sigma}) $ , 在哪裡 $ \mathsf{pk} $ 是公鑰, $ f $ 是一個函式, $ \vec{m} $ 是消息的向量,並且 $ \vec{\sigma} $ 是對應簽名的向量。它輸出一個新的簽名 $ \sigma’ $ 這樣 $ \mathsf{Verify}(\mathsf{pk}, f(\vec{m}), \sigma’) = 1 $ .

請注意,如果您不想對計算函式進行身份驗證,則也可能不需要在簽名方案的定義中使用標籤。

引用自:https://crypto.stackexchange.com/questions/79698