Public-Key

為什麼非對稱算法中的密鑰長度通常比對稱算法中的密鑰長度長?

  • May 27, 2022

抱歉,如果這是一個重複的問題。我在發布之前進行了搜尋 :-) 我認為這可能與我在這裡的其他問題有些相關,但我認為它的不同足以保證一個單獨的問題頁面。

對稱算法密鑰長度在我看來通常更小:

  • AES 使用 128 位、192 或 256 位的密鑰大小。
  • 三重 DES 使用 168 位密鑰
  • 等等等等。ETC

相反,非對稱算法似乎需要更大的密鑰:

  • RSA 使用 1024 到 4096 位之間的可變長度密鑰。

為什麼是這樣?非對稱密碼學需要顯著增加密鑰大小怎麼辦?

讓我們考慮一個使用密鑰的密碼算法(例如加密)。密鑰是可能密鑰空間的一部分;例如,對於 AES,所有 128 位序列的空間。

有一種稱為蠻力攻擊的概念攻擊,攻擊者只是嘗試所有可能的密鑰,直到找到匹配項。這種攻擊對所有算法都“有效”,因此,為了實現安全性,密鑰空間必須足夠大,以使暴力破解的成本變得可笑。傳統上,當密鑰空間的大小為 2 128或更大時,我們更喜歡它(實際上,2 100已經遠遠超出了技術上的可行性,但密碼學家只喜歡 2 的冪)。

對稱算法通常接受密鑰作為位序列,其中任何可能的序列都是有效的密鑰。因此,它們可以以最少的位數實現最小的密鑰空間要求:使用 128 位的密鑰,您可以擁有 2 128個密鑰,它們都很好。

另一方面,非對稱密碼學試圖實現一些“神奇”。對稱算法只是在一種複雜的結中將比特拼湊在一起。對於非對稱加密或簽名,唯一已知的方法涉及數學結構。結果是,如果非對稱算法的密鑰長度為k位,則並非所有k位序列都是有效密鑰。

此外,非對稱算法的強度依賴於解開內部數學結構的難處理性;例如,在 RSA 中,公鑰(大部分)是一個大的複合整數,內部數學結構是將該整數分解為其素數。與簡單地嘗試所有可能的私鑰相比,攻擊者通常擁有更好的攻擊方法。例如,對 RSA 的一種非常原始的攻擊將列舉模數的可能除數,一次一個:對於整數n ,最大的非平凡除數必須不大於**n的平方根,這意味著基本的“試驗除法”分解算法將在時間 2 128中分解 256 位模數,而不是 2256 . 我們知道更好的分解算法。

原始結果是非對稱密鑰通常需要更多位來表達自己:由於內部結構,並非所有位序列都可以是有效密鑰,並且由於存在內部結構,攻擊者俱有比暴力破解更好的攻擊方法,因此需要更大的東西。


儘管如此,大多數“關鍵尺寸”業務都是傳統的。例如,在 RSA 的情況下,我們說“RSA-2048”表示“2048 位”,但這只是模數的大小,它只是公鑰的元素之一。完整的公鑰稍大一些(為通常較短的公共指數留出空間)。私鑰本身可以減少到模數的一半左右(在這種情況下為 1024 位),因為如果您知道公鑰(模數n和公共指數e )和**n的重要因子,那麼您可以重建私鑰的所有元素。但是,它是傳統的(實際上是標準的) 將私有 RSA 密鑰保存為一堆整數,對於 RSA-2048,這將超過 9000 位,不包括編碼成本。

因此,密碼算法的“密鑰大小”的概念不一定對應於公鑰或私鑰的實際編碼大小,比較不同算法之間的密鑰大小總是很微妙的。例如,“256-bit ECDSA”通常被認為比“2048-bit RSA”更強,即使:

  • 256低於2048;
  • RSA-2048 公鑰的大小將接近 2100 位,而私鑰將被編碼超過 9000 位;
  • 256 位 ECDSA 公鑰通常編碼為 520 位。

(雖然 256 位 ECDSA私鑰恰好是一個 256 位整數——但由於內部數學結構,其強度有點相當於 128 位對稱密鑰,而不是 256 位。)

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