零知識證明擁有簽名
有沒有人知道一種有效的機制來證明擁有零知識中某個屬性(消息)的數字簽名(例如 RSA)?也就是說,在不透露實際簽名的情況下(為了防止跟踪,為了隱私)證明你有一個?提前非常感謝!
Guillou 和 Quisquater (連結) 提出了 RSA 簽名的零知識證明。基本上,該方案如下:
公共知識:RSA模數 $ n $ , 公共 RSA 指數 $ v $ , 原像 $ X $ .
證明者的秘密知識: $ A $ , 這樣 $ A^v = X \mod n $ .
$$ \begin{matrix} \mathcal{P} & & \mathcal{V} \ r \xleftarrow{$} \mathbb{Z}_n^* \phantom{\mod n} & & \ T \leftarrow r^v \mod n & & \ & \xrightarrow{\quad{}T\quad{}} & \ & & d \xleftarrow{$} {0,1,\ldots,v-1} \ & \xleftarrow{d} & \ t \leftarrow A^dr \mod n & & \ & \xrightarrow{\quad{}t\quad} & \ & & t^v \stackrel{?}{=} X^{d}T \mod n \end{matrix} $$ 在這張圖中, $ \leftarrow $ 表示將值分配給變數並且 $ \xleftarrow{$} $ 表示從有限集中均勻隨機選擇。
單向聚合簽名(OWAS)(也稱為複合簽名)可用於執行此操作。它們基於BLS 簽名。除了提到它們基於雙線性對之外,我將跳過該符號。上面的連結將提供詳細資訊。
讓 $ H $ 是一個雜湊函式並且 $ x_1 $ 成為私鑰。公鑰是 $ y_1=g^{x_1} $ . 對於任何消息 $ m_1 $ ,簽名為 $ \sigma_1={h_1}^{x_1} $ , 在哪裡 $ h_1 = H(m_1) $ . 要驗證簽名,請測試: $ \hat{e}(\sigma_1, g) \stackrel{?}{=} \hat{e}(h_1, y_1) $ 持有。
讓 $ x_2 $ 成為另一個私鑰。公鑰是 $ y_2=g^{x_2} $ . 和以前一樣,對於任何消息 $ m_2 $ ,簽名為 $ \sigma_2={h_2}^{x_2} $ , 在哪裡 $ h_2 = H(m_2) $ . 要驗證簽名,請測試: $ \hat{e}(\sigma_2, g) \stackrel{?}{=} \hat{e}(h_2, y_2) $ 持有。
我們也可以結合 $ \sigma_1, \sigma_2 $ 聚合簽名 $ \sigma $ 如下: $ \sigma=\sigma_{1}\cdot \sigma_{2} $ . 為了驗證,我們檢查: $$ \hat{e}(\sigma, g) \stackrel{?}{=} \hat{e}(h_1, y_1)\cdot\hat{e}(h_2, y_2) $$
簽名滿足Aggregate Signatures Paper中所示的標準安全性。也就是說,假設 Diffie-Hellman 問題很難,表示 $ \sigma $ 證明 $ y_1 $ 簽 $ m_1 $ 和 $ y_2 $ 簽 $ m_2 $ (即使沒有提供原始簽名)。
OWAS 的安全性依賴於這樣一個事實: $ \sigma $ , 也很難計算 $ \sigma_1 $ 或者 $ \sigma_2 $ (就像解決 Diffle-Hellman 問題一樣難)。事實上,對於兩個組合簽名,生成的簽名是每個單獨簽名*知識的零知識證明。*這可以顯示如下:
假設我可以控制雜湊函式的輸出(即,我們使用的是“隨機預言模型”),那麼就不用按照上面描述的正確方式來做,給定 $ (g, h_1, y_1) $ ,我可以計算一個假元組 $ (\sigma, h_2, y_2) $ 使得上面的最後一個驗證方程成立。首先生成隨機 $ a, b $ . 計算:
$$ y_2=g^a y_1 $$ $$ h_2=\frac{g^b}{h_1} $$ $$ \sigma=\frac{{y_1}^b\cdot g^{ab}}{{h_1}^a} $$
可以檢查上述值是否滿足聚合簽名驗證方程。然而,我在不知不覺中做到了這一點 $ \sigma_1 $ . 因此,這是零知識。