Public-Key

他們簽署的消息的數字簽名是否唯一?

  • July 27, 2022

數字簽名算法 (DSA) 的實際實現採用散列函式來確保輸入小且大小固定;否則,DSA 對於大多數實際應用程序來說太慢了。鑑於雜湊函式將任意長的輸入映射到(較小的)固定大小的輸出,您可能有多個輸入映射到相同的輸出。因此,當與 DSA 一起使用時,您可能有兩個(或更多)輸入通過相同的簽名進行驗證,因為輸入映射到相同的雜湊值。

**我的問題是:**如果我們不使用散列函式,或者我們可以假設散列函式中不存在衝突,那麼 DSA 生成的簽名是否保證是唯一的?或者,像散列函式一樣,是否可以讓多個簽名驗證相同的輸入?

這個答案討論了 ECDSA 如何不提供“強大的存在不可偽造性”,因為“如果 (𝑟,𝑠) 是某些消息的有效簽名,那麼不同的 (𝑟,𝑛−𝑠) 也對同一消息有效。” 對我來說,聽起來簽名不是唯一的(至少在 ECDSA 下)。

如果我們可以假設雜湊函式中不存在衝突……是否可以讓多個簽名驗證相同的輸入?

這取決於簽名算法。

在某些情況下,例如,帶有 PKCS v1.5 SSA 填充的 RSA,這是不可能的;從簽名中,您可以恢復散列(因此單個簽名不能對兩個不同的散列有效)。

在其他情況下,例如 ECDSA,它可能會發生;對於素數階曲線(例如 Sec256r1),有效生成的簽名(即 $ r $ 是一個 $ x $ 座標到曲線上的一點)將至少對兩個不同的雜湊有效。

如果我們不使用散列函式,或者我們可以假設散列函式中不存在衝突,那麼(通用數字簽名方案)生成的簽名是否保證是唯一的?

通常沒有,對於數字簽名的一般定義,給定消息(或雜湊)沒有單一簽名。許多簽名方案是隨機的,包括ECDSADSA:對同一消息進行兩次簽名將(大多數情況下)生成不同的簽名。

(..) ECDSA 不提供“強大的存在不可偽造性”,因為“如果 $ (r,s) $ 是某個消息的有效簽名,那麼不同的 $ (r,n-s) $ 對同一消息也有效。”對我來說,聽起來簽名不是唯一的(至少在 ECDSA 下)。

是的,這意味著簽名不是唯一的,但它說明了更多資訊:可以在不知道私鑰的情況下將簽名轉換為對同一消息(和雜湊)有效的不同簽名。應該區分兩個標準:

  1. 確定性簽名(相對於非):確定性意味著合法簽名者始終生成相同的簽名。隨機化意味著不確定(嚴格來說意味著即使知道私鑰和簽名歷史也無法預測下一個簽名)。
  2. 存在不可偽造性的強限定符(相對於單純的存在不可偽造性):這表明不可能展示一個*(消息,簽名)對來驗證並且簽名不是簽名者為此消息生成的簽名。與單純的存在不可偽造性相比,這表明不可能展示驗證的(消息,簽名)對以及簽名者未簽署此消息*的位置。

一些簽名方案使得單個簽名可以驗證給定的消息和雜湊,這(假設存在不可偽造性)意味著 1 和 2。範例:RSASSA-PKCS1-v1_5 的嚴格實現。

對於其他簽名方案(即私鑰的持有者能夠為相同的消息和雜湊生成不同的簽名),上述標準 1/2 產生的四種組合是可能的,至少前三種是常見的:

  • 具有強存在不可偽造性的確定性簽名:EdDSA
  • 具有強存在不可偽造性的隨機(因此是非確定性的)簽名:RSASSA-PSSDSA
  • 僅具有不可偽造性的隨機(因此是非確定性的)簽名:ECDSA
  • 僅存在不可偽造性的確定性簽名:ECDSA通過使用以消息和私鑰的散列作為密鑰的 CSPRNG 進行修改,而不是真正的 RNG。

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