Openssl

DSA 和 RSA 算法的區別

  • May 29, 2018

儘管學習了很多與 RSA 和 DSA 相關的知識,但我無法理解它們的區別。誰能告訴我這些算法之間至少有 4-5 個差異?我剛剛將它們用於兩因素身份驗證(Linux OpenSSL)。

如果您是某些在後台使用密碼學的軟體的使用者,那麼了解 RSA 和 DSA 工作原理的數學知識對您沒有幫助。您需要知道的是您的軟體的哪些配置適合您使用它的方式,算法的選擇通常不是最重要的因素,儘管今天在 RSA 和 DSA 之間的選擇通常是 ECDSA,或者 RSA 失敗普通的 DSA。

RSA 和 DSA 都是數字簽名算法系列。數字簽名算法是一種驗證消息的方法。當消息具有有效的數字簽名時,它必須由用於簽名的私鑰的持有者簽名。它們都是公鑰密碼學的實例:只有簽名者知道私鑰,但用於驗證簽名的公鑰可以為所有人所知。

今天,電腦使用者常用的數字簽名算法有四個系列:RSADSAECDSAEdDSA。支持 Internet 上大多數安全通道的TLS協議可以使用 RSA、DSA 或 ECDSA。SSH(特別是它最常見的實現OpenSSH) 可以使用 RSA、ECDSA 或 EdDSA(舊版本可以使用 DSA)。DSA 已被廢棄;它沒有損壞,但與相同安全級別的 ECDSA 相比,它的性能非常差。EdDSA 仍然很新,並未得到廣泛支持。RSA 正在慢慢淘汰,因為隨著破解密鑰的計算能力的增加,它難以應對所需的密鑰大小增加,但它仍然擁有非常廣泛的安裝基礎,雖然它在簽名生成方面比 ECDSA 慢得多,驗證速度更快。

量子密碼分析可能會出現並迫使所有這些算法退出,但目前它仍然是一個研究課題,沒有人知道後量子密碼學最終會是什麼樣子。尋找能夠抵抗量子密碼分析的良好算法的競爭正在進行中,因為它目前被認為是有效的。

如果您仍在使用 DSA,請考慮遷移到 ECDSA。您正在支付額外的 CPU 能力並使用這些天可能沒有受到太多審查的程式碼。不要遷移到任何後量子算法,因為它們還沒有得到太多研究,而且據我們所知,一旦不是其作者的密碼學家看到它們,它們就會被破解。

RSA的安全性依賴於因式分解問題的難度,即只給定兩個整數的乘積。 $ p q $ 尋找困難 $ p $ 和 $ q $ (和 $ p $ 和 $ q $ 選擇使問題變得困難,即作為素數或至少是可能的素數)。DSA的安全性依賴於離散對數問題的難度,即給定 $ n $ , $ g $ 和 $ y $ 發現 $ x $ 這樣 $ g^x = y \bmod n $ (和 $ n $ 和 $ g $ 選擇使問題變得困難)。ECDSA 和 EdDSA 也依賴於離散對數問題,但依賴於橢圓曲線而不是 $ \mathbb{Z}/n\mathbb{Z} $ .

還有一系列稱為 RSA 的公鑰加密算法。它在底層使用相同的數學問題,但在頂部有不同的結構。DSA 沒有廣泛使用的相應加密方案。ECIES是使用橢圓曲線加密的加密標準,可以被認為與 ECDSA 平行,但它明顯不太常見。為 EdDSA 提供動力的 Edwards 曲線也可用於公鑰加密,但我不知道有什麼標準。

RSA 和 DSA 之間的一些區別(忽略問題的 SSL 方面)

  • RSA的難度是基於整數分解的難度 $ \Bbb N $ ; DSA 的硬度是基於離散對數的難度 $ \Bbb Z_p^* $ . 這是完全不同的數學問題,不知道從一個到另一個的減少。

  • RSA 是一系列具有各種功能的密碼系統,而 DSA 是一個單獨的密碼系統,提供作為附件的簽名(即,將簽名添加到未修改的消息中)。RSA 家族具有作為附錄的簽名(例如RSASSA-PSS)、其他形式的簽名、加密(例如RSAES-OAEP)、密鑰交換和不安全的教科書版本。但類似的額外功能也由 DSA 的表親提供,也是基於 $ \Bbb Z_p^* $ ,使家庭和個人密碼系統之間的區別純粹是語義上的。

  • 在通常和可比較的安全級別

    • RSA(簽名驗證或加密)的公鑰操作可以比 DSA(簽名驗證)的公鑰操作少數百倍的計算密集度。這使得 RSA 成為數字證書(生成一次,驗證數十億次)以及簽名驗證或低功耗設備加密的不錯選擇。
    • RSA 的私鑰操作(簽名生成或解密)的計算密集度是 DSA 的私鑰操作(簽名生成)的數倍。
    • DSA 簽名比帶有附錄的 RSA 簽名要緊湊幾倍(另一方面,帶有消息恢復的 RSA 簽名通常會導致比 DSA 稍微緊湊的消息)。
  • DSA 的速度及其公鑰大小可以通過使用橢圓曲線組而不是 $ \Bbb Z_p^* $ (相比 RSA,減少了公鑰操作的性能劣勢,擴大了私鑰操作的優勢);那是 ECDSA、EdDSA……RSA 沒有這樣的選擇。

  • DSA(和 ECDSA,但不是 EdDSA)中用於每個簽名的 RNG 失敗實際上會導致少數簽名中的私鑰洩漏,這是一個徹底的中斷。RSA 簽名不存在這種故障模式,其中用於簽名的 RNG(如果有)的故障通常只會導致存在性偽造而幾乎沒有實際後果。

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