ECDSA 簽名驗證中可能出現的問題?
ECDSA 簽名驗證中可能會出現哪些錯誤,可能集中在基於素數順序的曲線上 $ \mathbb Z_p $ ,特別是 P-256 aka secp256r1?是否可以為這些建構測試案例,以及如何建構測試案例(可能區分不同程度的黑盒)?這在實踐中有多相關(接受無效/偽造簽名或拒絕有效簽名的風險)?
我將 ASN.1 格式檢查和散列視為題外話;並認為沒有什麼是秘密的,因此側通道洩漏不是問題(這個問題對於 ECDSA 簽名生成來說要困難得多)。
這至少在模減少中留下了特殊情況(無論是模 $ p $ 或以曲線的組階為模 $ n $ ); 達到無窮大/中性元素的可能性;驗證輸入在曲線上,其他輸入檢查。
檢查 $ r $ 和 $ s $
你應該檢查 $ r $ 和 $ s $ 在您的簽名驗證功能中。更具體地說,您應該檢查 $ r $ 和 $ s $ 是區間中的整數 $ [1, n-1] $ 因為已知對相關 ElGamal 簽名方案的攻擊不包含此檢查。如果您不檢查,這可能是對 ECDSA 的合理攻擊 $ r \neq 0 $ (或更一般地說, $ r\not\equiv0 \pmod n $ ):
假設 $ A $ 正在使用橢圓曲線 $ y^2=x^3+ax+b $ 在一個領域 $ \mathbb{F}_p $ , 在哪裡 $ b $ 是二次餘數模 $ p $ ,並假設 $ A $ 正在使用一個基點 $ G = (0, \sqrt{b}) $ 素數的 $ n $ . 這可能是合理的,因為某些實體可能希望選擇一個基點 $ 0 $ $ x $ -座標以最小化域參數的大小。對手現在可以偽造 $ A $ 在任何消息上的簽名 $ m $ 通過計算選擇 $ e=\mathrm{hash}(m) $ . 您可以輕鬆檢查 $ (r=0, s=e) $ 是任何有效的簽名 $ m $ .
減少模式 $ n $ 減模後 $ p $
在 ECDSA 簽名驗證期間,您必須計算 $ R=u_1G + u_2Q $ . 您的橢圓曲線操作可能以乘法和/或加法將自動執行減少的方式實現 $ \mod p $ (素數場的順序)。但是請注意,您必須減少 $ x $ - 再次協調,這次 $ \mod n $ (生成器的順序)。對我(以及我使用過的測試向量)來說,驗證總是有效而沒有減少 $ \mod n $ ,在我看來,這是危險的事情。如果沒有最後一個縮減步驟,可能存在驗證將失敗的曲線/測試向量。我將實施更多曲線(atm 我只使用過腦池曲線)並將發布有關此的更新。