為什麼是e=0和=0e=0允許在 Schnorr 簽名中使用?
在 Schnorr 簽名(維基百科風格)中,我們有:
- $ R = kG $ , 在哪裡 $ 0<k<n $ 是一個隨機數並且 $ G $ 是生成點。
- $ e = H(R | M) \bmod n $ , 在哪裡 $ H() $ 是一個散列函式並且 $ M $ 是消息。
- 最後 $ s = k - xe \bmod n $ , 在哪裡 $ x $ 是私鑰。然後簽名是 $ (R,s) $ 或者 $ (e,s) $ 取決於約定。
- 驗證者檢查 $ R = sG + eP $ , 在哪裡 $ P = xG $ 是公鑰。
奇怪的是,如果 $ e=0 $ 然後不知道 $ x $ 已被證明,因為所有步驟都可以由只知道的人執行 $ M $ . 那麼,為什麼是 $ e=0 $ 不被允許?
我能找到的唯一答案是打破雜湊函式來獲得 $ e=0 $ 通常應該具有直接破解公鑰所需的安全級別(以位為單位)的兩倍。而且,跳過檢查零性的額外步驟是最方便的 $ e $ , 所以出於實際原因 $ e=0 $ 被掩蓋了。
奇怪的是,如果 $ e=0 $ 然後不知道 $ x $ 已被證明,因為所有步驟都可以由只知道的人執行 $ M $ . 那麼,為什麼是 $ e=0 $ 不被允許?
因為 $ e = 0 $ 在這方面並不是唯一的。每一個 $ e $ 同樣“不安全”,即你不妨ban $ e = 23 $ 以同樣的理由。
舉例來說,假設 $ e = 23 $ 任意(適用於任何值 $ e $ 同理)。為了那個原因 $ e $ ,我可以通過選擇隨機標量輕鬆計算簽名 $ 0 \leq s < n $ 和計算 $ R = sG+eP $ . 根據定義, $ (R,s) $ 是一個有效的簽名。為了 $ e = 0 $ ,這可能是你想到的攻擊。
當然,實際上這種攻擊不會成功,因為如果我嘗試選擇 $ R $ “聰明地”針對特定的 $ e $ ,以壓倒性的可能性,這不會是 $ e $ 和 $ e = H(R||M) $ (假設散列函式很好)。這裡的訣竅是 $ e $ 僅在之後固定 $ R $ 已經被選中,這使其安全。
這一切背後有一個更深層次的原因與安全證明有關,它根本不關心任何 $ e $ . 我沒有用下面的草圖做證明正義,但是非常非常非常粗略地,減少執行攻擊者兩次:一次 $ e $ 並且有一次使用其他雜湊值 $ e’\neq e $ (造型 $ H $ 作為隨機預言機)。減少只需要 $ e - e’ \neq 0 $ (這是實際的“弱點 0”,但它只出現在安全證明中)在給定成功攻擊者的情況下計算簽名的密鑰。如果你有興趣,我推薦看看Pointcheval、David 和 Jacques Stern。“數字簽名和盲簽名的安全論據。