Rsa

加密密鑰生成指南

  • May 5, 2019

我想知道您是否知道可以指出一些應該遵循的一般(基本)原則/準則來生成加密密鑰?我看過 NIST 800-133,但希望一些原則更通用,技術更少。

具體來說,我正在考慮使用 RSA 的非對稱密鑰對和使用 HMAC 的對稱密鑰。例如,我假設密鑰應該有一些隨機性。

謝謝你。

至於隨機性,擁有一個加密安全的 PRNG 來生成 HMAC 密鑰和 RSA 密鑰對就足夠了。您應該確保 PRNG 是眾所周知的算法並且種子良好,並且您應該在啟動期間執行自檢。PRNG 出現故障或播種錯誤是密鑰易受攻擊的最常見原因之一。

  • HMAC 密鑰僅由隨機位組成。您可以直接使用隨機數生成器的輸出。
  • RSA 密鑰對生成器需要隨機輸入來找到一半密鑰大小的隨機素數。該生成器可能會使用大量隨機位。

關於密鑰長度,請查看keylength.com

  • 確保在 HMAC 構造中使用的雜湊算法與密鑰大小相同。
  • 強烈建議只為 RSA 密鑰大小選擇 8 位倍數,以減少兼容性問題。

RSA 特定說明:

  • 最好提前選擇一個公共指數,0x010001(65537),費馬的第四個素數是一​​個流行的——通常是預設的——選擇。
  • 表單的鍵大小 $ 2^x $ 或者可能 $ 2^x + 2^{x-1} $ 強烈推薦(例如 2.048、3.072、4.096、8.192、16.384 位密鑰)。
  • 從技術上講,不需要生成 ANSI X9.31 密鑰(現在實際上已被帶有附錄 B.3 的 FIPS 186-4取代);但是,如果私鑰必須在尚未指定的硬體上執行(如長期根密鑰應該),則謹慎使用素數 $ 2^{(n-1)/2}<p<2^{n/2} $ 在哪裡 $ n $ 是公共模數尺寸(這些標準的要求之一)。
  • RSA 私鑰應包含 CRT 參數,以便直接加速 RSA 私鑰操作。
  • 請注意,與模數相比,RSA 私有指數的大小可能更小 - 甚至以字節為單位,這沒有理由擔心(除非它更小)。
  • 請注意,與其他密碼系統(包括非對稱密碼系統)相比,RSA 密鑰生成可能需要很長時間;這一次變化很大,並且沒有從一個鍵到另一個鍵的固定上限。對於具有內部密鑰生成的設備的大規模生產,或者在為監督軟體定義最大延遲時,這是一個經典問題。

為獲得最佳保證,您應該使用經過 FIPS 或通用標準驗證的軟體和硬體組件(HSM、智能卡)來生成密鑰、儲存密鑰和使用密鑰。請注意,電腦記憶體可能並不總是安全的。密鑰生成是容易的部分,正確的密鑰管理要困難得多。

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