Rsa

RSA-SHA256 簽名是否容易受到長度擴展攻擊?

  • March 21, 2022

我需要使用私鑰簽署消息並使用公鑰驗證消息,同時確保消息未被篡改。

我知道 SHA-256 本身很容易受到長度擴展攻擊。

我也知道像 HMAC 這樣的東西是專門為規避此類攻擊而設計的。

但是,如果我使用 RSA 和 SHA-256 簽署消息怎麼辦?他們安全嗎?

我是否需要簽署 RSA/SHA3 才能受到保護?或者可能是 SHA2 的截斷版本(即 SHA-384 和 SHA-512/256)據稱不易受到長度擴展攻擊?

HMAC 會是解決這個問題的更好方法嗎?

我正在考慮使用可能是非對稱密碼學中最著名的 RSA。如果有更好的選擇,請隨時向我指出其他內容。我需要 OpenSSL 和 Node.js 加密模組(據我所知,它也是基於 OpenSSL)支持的東西。

PS。我對加密社區有點陌生,所以我希望我的話是有道理的。

– 附錄–

這是我對 RSA-SHA256 的擔憂。

假設消息是 $ M $ 它的雜湊是 $ SHA256(M) $ .

攻擊者可以使用它們來計算 $ M||X $ 和 $ SHA256(M||X) $ ,即使不知道私鑰。在這種情況下,收件人 $ M||X $ 及其簽名 $ SHA256(M||X) $ 應該相信消息是有效的,因為消息和它的簽名確實匹配。

至少如果 RSA_sign 僅使用原始散列會發生這種情況。如果 RSA 通過類似 HMAC 的技術或任何防止攻擊者偽造簽名的算法傳遞雜湊,我想我們是安全的。

但是,如果我使用 RSA 和 SHA-256 簽署消息怎麼辦?他們安全嗎?

長度擴展攻擊不是問題。

以下是長度擴展攻擊允許您執行的操作:如果給定雜湊 $ \text{SHA256}(M) $ ,但您不知道原始消息 $ M $ (但你確實知道它的長度),那麼你可以計算散列的值 $ \text{SHA256}(M || X) $ (在哪裡 $ || $ 是位串連接,對於字元串的一些值 $ X $ ); 此散列的值將不同於原始散列。

那麼,為什麼這不是一個問題:

  • 當您擁有已知消息的簽名時 $ M $ ,你顯然知道 $ M $ ; 你可以(如果你想)計算 $ \text{SHA256}(M || X) $ 對於任何字元串 $ X $ 你要; 你不需要“長度擴展攻擊”
  • RSA 對值進行簽名 $ \text{SHA256}(M) $ ; 價值 $ \text{SHA256}(M || X) $ 會有所不同,所以如果你更換 $ M $ 和 $ M || X $ , 簽名不會驗證

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