ECDSA - 點序標準
我正在為小曲線(p < 229)上的 ECDSA 創建一些原始展示。但是我的實現有一些奇怪的問題。即使簽名正確,驗證過程也會返回 false。因為我正在測試它一段時間,試圖找到問題我發現只有當點順序是素數時驗證才有效。
所以我的問題是,點順序有什麼條件嗎?那麼非素數的點呢?不使用?
我一直在閱讀一些關於 ECDSA 的論文,但我沒有找到任何相關內容。
如果沒有更多細節,我無法確定您的實施情況。但是,如果發生以下情況,這肯定會導致它有時失敗 $ n $ 是複合的:ECDSA 驗證者需要計算 $ s^{-1} \bmod n $ (在哪裡 $ s $ 實際上是一個介於 1 和 $ n-1 $ )。如果 $ n $ 是複合的,那麼 $ s $ 可能不是相對優質的 $ n $ ; 如果不是,那麼 $ s^{-1} $ 將不存在(因為沒有數字 $ t $ 這樣 $ s \cdot t = 1 \mod n $ )。如果在驗證過程中發生這種情況,那麼您的模組化反演常式(計算 $ s^{-1} \bmod n $ ) 將失敗,或者它會聲稱成功,並返回一些不正確的值(這將導致以後的計算失敗)。
如果你的生成器的順序是複合的,你會遇到第二個問題;它會更容易打破。如果你能解決“離散日誌”問題,ECDSA 就可以被打破;也就是說,給定生成器 $ G $ 和一點 $ Q $ ,您可以計算該值 $ d $ 這樣 $ Q = dG $ . 現在,如果生成器的順序 $ G $ 是複合的(比如說, $ pq $ ),那麼攻擊者可以計算 $ pG $ , $ qG $ , $ pQ $ , $ qQ $ ,並解決這兩個離散對數問題 $ pQ = d_p(pG) $ 和 $ qQ = d_q(qG) $ , 並給定值 $ d_p, d_q $ , 重構 $ d $ . 解決這兩個離散對數問題將比解決單個離散對數問題容易得多(因為所涉及的點的階數較小);因此,我們只是讓攻擊者的事情變得更容易。
因為具有復合順序的生成器會導致驗證失敗,並且由於它們在密碼學上較弱,所以我們總是使用具有素數順序的生成器。