ecdsa 256 填充的 128 位私鑰是否足夠?
根據以下內容,即使對於 256 位私鑰,ecdsa-256 也僅提供 ~128 位安全性:
如果私鑰只有 128 位熵,但常數填充到 256 位,則分發對應的 256 位公鑰。它會提供相同的 128 位安全性嗎?
總結問題:
ECDSA-256 是否仍會為填充到 256 位的 128 位私鑰提供 128 位安全性?
不,對於固定的公共 128 位填充。給定ECDSA 曲線參數,ECDSA 公鑰 $ Q $ 以及產生私鑰的填充方法 $ d $ , 可以設計一種找到私鑰的攻擊 $ d $ 和 $ Q=dG $ 使用關於 $ 2^{65} $ 點加法,就像 $ 65 $ 位安全。
左填充擴展了 128 位密鑰 $ s $ 至 $ d=k\mathbin| s=2^{128}k+s $ 對於一些已知的 128 位 $ k $ . 因此問題是要找到 $ s $ 給定 $ Q=(2^{128}k+s)G $ ,也就是找 $ s $ 這樣 $ sG=Q-2^{128}kG $ . 右手邊可以很容易地計算出來。那 $ s $ 可以使用Baby Step/Giant Step或Pollard 的 rho找到。
對於右填充, $ d=s\mathbin|k=2^{128}s+k $ 問題是要找到 $ s $ 給定 $ Q=(2^{128}s+k)G $ ,也就是找 $ s $ 這樣 $ s(2^{128}G)=Q-kG $ , 這同樣容易。
另一方面,如果我們建立 $ d $ 從 $ s $ 使用雜湊,例如 $ d=(\operatorname{SHA-512}(s)\bmod(n-1))+1 $ ,那麼我們就獲得了單目標攻擊的128 位安全性(即當對手攻擊單個公鑰時) $ Q $ )。
在多目標攻擊中,攻擊者有一個集合 $ r $ 公鑰 $ Q_i $ 並且滿足於找到任何 $ d $ 和 $ dG $ 之間 $ Q_i $ . 即使使用散列進行 128 位到 256 位擴展,這種攻擊也只是嘗試各種 $ s $ (例如順序)大約成功 $ 2^{128}/r $ 散列和標量乘法,因此安全性不能超過 $ \min(136-\log_2(r),128) $ 少量。
如果我們想要具有 128 位機密且沒有分散器/鹽的多目標安全性,我們需要使案例如Argon2進行某種程度的密鑰拉伸。