Elliptic-Curves

我可以根據 P-521 為 ECDSA 生成 512 位 k(和 d)嗎?

  • February 24, 2022

我一直在實現一個業餘愛好者密碼學庫,並且我正在實施橢圓曲線密碼學。我已經使用 P-256 和 P-384 實現並測試了 ECDSA,其中靜態和臨時私鑰分別是 256 位和 384 位,到目前為止一切都很好。

困擾我的是P-521。我打算生成 512 位靜態( $ d $ ) 和臨時密鑰 ( $ k $ ) 以簡化實現,因為大多數雜湊函式(不包括 XOF)最多有 512 位輸出(我沒有使用雜湊函式直接生成密鑰,我只是根據典型雜湊函式的輸出長度分配堆棧空間)。

如果我這樣做,生成的簽名組件 $ s $ 可能有某種偏見,但由於 $ d \cdot k^{-1} $ 會溢出 $ n $ ,我有一種偽信念,認為這不是一個太嚴重的問題。

所以我問了2個相關問題:

Q1:我可以通過 P-521 為 ECDSA 生成 512 位靜態和臨時密鑰而不損害安全性嗎?

Q2:對於一般情況,給定一個素數模數 $ n $ , 給定一個對手 $ s = k \cdot r + d \pmod n $ 和 $ r $ , 在哪裡 $ d $ 是靜態的並且 $ r $ 是確定性隨機計算的 $ k $ ; 兩個都 $ k $ 和 $ d $ 少於 $ \lceil {\log_2{n} \over 4} \rceil $ 切掉的頂部鑽頭;對手能否獲得任何部分 $ d $ 或者 $ k $ ?

不要這樣做!

ECDSA 隨機數中跨多個簽名的偏差會隨著時間的推移洩露簽名密鑰。例如,參見 Breiner 和 Heninger 的論文Biased Nonce Sense: Lattice Attacks against Weak ECDSA Signatures in Cryptocurrencies

一般的Q2被稱為隱數問題,在論文中確實是這個問題在多個時解決了 $ r $ 和 $ s $ 提供。

不!甚至生成一個 520 位 $ k $ 很可能是一個可利用的漏洞。

關於該主題的 2020 年結果是*LadderLeak: Breaking ECDSA with less than one of Nonce Leakage*。§5 討論了攻擊的成本估算:對於 P256 以外的單比特偏差,它實際上並不可行,但更大的偏差允許更便宜的攻擊,並且攻擊只會隨著時間的推移而變得更好。

除非您有充分的理由使用隨機 ECDSA,否則請使用確定性ECDSA。確定性 ECDSA 可以將 HMAC_DRBG 用作黑盒:您只需使用必要的參數實例化 HMAC_DRBG。這是一種確定性算法的一個優點是,如果您的已知答案測試給出了預期的結果,那麼您就有相當高的信心認為您已經正確地實現了它。無論如何,大多數進行簽名的系統都有一個 RNG,而 HMAC_DRBG 是一個非常好的 DRBG(不是最快的,但相對容易實現並且符合 FIPS)。

如果您使用隨機 ECDSA,我建議通過執行確定性 ECDSA 並將額外的隨機性輸入 HMAC_DRBG 來實現它。這樣,如果你做錯了隨機性部分,它最壞的情況會降級為確定性 ECDSA,而沒有任何洩漏 nonce 的風險。您可能更喜歡隨機 ECDSA 的原因有兩個:如果這是一個安全目標,攻擊者無法判斷兩個單獨生成的簽名是否碰巧針對同一消息(一個不常見的安全目標),或者因為它可以產生一些旁通道或者更難利用的故障注入弱點(另一方面,它也可以使一些弱點更容易利用)。

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