Public-Key

EdDSA 驗證與無輔因子驗證

  • September 5, 2021

EdDSA 中,作者定義了更多曲線文件:

鑰匙

EdDSA 密鑰是 $ b $ -位串 $ k $ . 雜湊 $ H(k) = (h_0, h_1, … , h_{2b−1}) $ 確定一個整數 $ s = 2^n+\sum_{c≤i<n} 2^ih_i $ ,這反過來又決定了倍數 $ A = sB $ . 對應的 EdDSA 公鑰是 $ A $ .

注意 $ B $ 被定義為一個程序點 $ l $ 其中曲線的基數是 $ #E(p)=2^cl $

簽名

消息的簽名 $ M $ 下鍵 $ k $ 創建為:

  • 定義 $ r = H(h_b, …., h_{2b-1},M) \in {0,1,…,2^{2b}-1} $ .
  • 定義 $ R = rB $ .
  • 定義 $ S = (r + H(\underline{R},\underline{A},M)s) \mod l $

輸出: $ (\underline{R},\underline{S}) $
(請注意,下劃線是點或整數的字節編碼,與此問題無關)

確認

驗證簽名 $ (\underline{R},\underline{S}) $ 一條消息 $ M $ 定義為:

$ 2^cSB = 2^cR+2^cH(\underline{R},\underline{A},M)A $

無輔因子驗證

簽名的無輔助驗證 $ (\underline{R},\underline{S}) $ 一條消息 $ M $ 定義為: $ SB = R+H(\underline{R},\underline{A},M)A $


他們評論說:

任何通過無輔助驗證的所謂簽名也將通過驗證。消息的簽名將通過無輔因子驗證,因此它也將通過驗證。但是,在上述簽名過程之外使用密鑰的簽名者可以創建通過驗證而不通過無輔驗證的字元串。

我不能真正理解上面的評論,我有幾個問題。

  1. “上述簽名程序之外的密鑰”是什麼意思?這是否意味著 $ s $ 是一個沒有前導第 n 位集合且不是的倍數的字元串 $ 2^c $ ?
  2. 如何 $ 2^c $ 與無輔因子驗證相比,因子會影響驗證嗎?
  3. 您能否提供一個“在上述簽名程序之外”生成密鑰的範例/方法,該密鑰生成通過驗證而不通過無輔助驗證的簽名?

1.這意味著某人擁有私鑰 $ s $ 可以創建通過驗證但不能通過公鑰驗證的簽名 $ A $ .

**3.**例如,如果 $ C\in E $ 是一個偶數點(例如 $ 2^c $ ),並且簽名者替換 $ R:=rB $ 在簽署程序的第 2 步中,由 $ R:=rB+C $ , 然後

$$ 2^cR+2^cH(\underline R,\underline A,M)A ;=; 2^cSB+2^cC ;=; 2^cSB $$ 但 $$ R+H(\underline R,\underline A,M)A ;=; SB+C ;\neq; SB \text. $$私鑰是創建此類簽名所必需的,因為任何人 修改 $ R $ (或其他參數之一)在簽名完成後(例如,不知道私鑰的人)很可能被 $ H(\underline R,\underline A,M) $ 有助於驗證公式。(請注意,這與 Cryptostasis 上面的評論相矛盾。) **2.**由於 Pohlig-Hellman 算法,整個系統的安全性依賴於大素數階子群 $ E[\ell] $ 的 $ E $ ,而群階的小素因數對計算離散對數的難度沒有合理的貢獻。理論上,乘以 $ 2^c $ 實現對子群的投影 $ E $ 大小的 $ \ell $ ,這是一個直接因素:從有限阿貝爾群的結構定理,

$$ E;\cong;E[\ell]\times G\text, $$ 在哪裡 $ G $ 是一個有序的阿貝爾群 $ 2^c $ ,因此乘以 $ 2^c $ 將元素映射到 $ E[\ell]\times{e}\leq E[\ell]\times G $ . (而且由於 $ \ell $ 互質於 $ 2 $ , 乘以 $ 2^c $ 是一個自同構 $ E[\ell]\times{e} $ .) 因此乘以 $ 2^c $ 從因子組中丟棄一點資訊 $ G $ ,但這無論如何都沒有用。

**在實踐中,您使用哪種變體並不重要。**如上所述,無協因素驗證要嚴格一些,因此您可能會遇到與不符合要求的簽名者的互操作性問題(但我認為沒有理由有人會以一種使這種情況發生的方式實現它)。另一方面,驗證(乘以 $ 2^c $ ) 將需要幾個週期。

我們做一個不通過無輔因子驗證的例子。在這個例子中,我們假設公鑰和私鑰沒有通過上述過程產生。假設點 $ B $ 作為公共參數的順序為 $ 2^c*l $ 和 $ c=3 $ . 假定以下值:

$$ l=11 ,\ \ \ s=10, \ \ \ A=10B ,\ \ \ r=7 $$ 符號: $$ R=7B , \ \ H(\underline{R},\underline{A},M)=5, \ \ S=r+H(\underline{R},\underline{A},M)s \ mod(11)=7+510 \ mod(11)=2 $$ 核實: $$ (R,S)=(7B,2); \ \ SB=2B \ , \ R+H(\underline{R},\underline{A},M)A=7B+5(10B)=57B $$

注意點 $ 2B $ 不等於 $ 57B $ . 因為點的順序 $ B $ 是 $ 8l=88 $ . 但是,如果我們使用帶有輔因子的驗證算法,則驗證算法是正確的。

換句話說,帶有輔因子的驗證算法對於簽到也很有用。 $ 8r $ 組,但無輔助驗證僅用於登錄 $ r $ 子群。

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