從 RSA 私鑰派生秘密
我想要做的是確定性地從 RSA 私鑰派生安全密鑰,這樣 RSA 私鑰就不能從安全密鑰派生。
想到的第一種方法是簡單地使用私鑰(或其中的某個固定部分)作為 PRNG 的種子。
由於AES的輸出是隨機的,另外一個構想是使用AES生成安全密鑰,使用RSA私鑰的前256位作為AES密鑰,對一些已知數據進行加密。
任何人都可以驗證這兩種方法,或者建議另一種方法嗎?
編輯我省略了我為什麼要這樣做的細節,以保持專注,但我想了解更多資訊可能會很有用:
我有一個伺服器軟體的安裝程序,它將作為集群的一部分執行。在安裝期間,安裝程序將有權訪問“部署”證書 - 用於為每個伺服器實例簽署證書的 X509 證書(即 CA 證書)。每台伺服器還需要訪問共享密鑰,該密鑰將用於加密伺服器之間共享的某些數據(使用 AES)。我的想法是,在安裝過程中從部署證書私鑰安全地派生這個共享密鑰是一種低摩擦的方法。
除非您真的想以數學方式實際“使用” RSA 密鑰,否則您實際上可以使用密鑰派生函式 (KDF)從中派生密碼並將證書用作密碼……
有兩種不同類型的 KDF:一種是在熵很差並且害怕字典攻擊(通常是儲存人類容易記住的密碼)時使用的 KDF,例如 Argon2,另一種是在熵很好時使用的 KDF,即如果您依賴 RSA 密鑰。在後一種情況下,HKDF非常適合這種情況。
使用 HKDF 的好處是你已經擁有了所有你應該實現的漂亮特性:
- 你有一個 Salt,所以你可以很容易地生成不同的密鑰,例如,如果一個被洩露。
- 你有標籤的概念,所以你可以為不同的用途生成不同的密鑰。
- 您將大小作為參數,因此您可以輕鬆插入另一個加密函式以防 AES 被破壞,而無需更改密鑰生成算法。
儘管如此,只是散列它仍然至少和以下任何一個一樣難:
- 找到你的“部署”證書
- 找到該雜湊的原像
如果您擔心,由於 X509 證書肯定不是通用密碼,因此建構字典攻擊所需的計算能力與實際暴力破解您的證書一樣多……(這很難。)
請注意,1. 是正確的,因為我們認為模糊性沒有任何用處,因此您應該假設攻擊者知道您如何獲得您的密鑰。
所以最後,如果“密鑰”被洩露,那麼對於任何加密雜湊來說,找到加密強雜湊的相應原像(也就是你的證書)都很難。
作為雜湊,我個人喜歡Blake2,因為它可以生成 AES 密鑰可能需要的任何大小的摘要,速度快且健壯,而且它帶有Salt,因此您可以簡單地更改該 salt 並在“安全”的情況下繼續執行密鑰”一旦被洩露。但是您也可以使用 SHA-3(如果您想要 128 位或 190 位 AES 密鑰,也可以使用 SHAKE128)和您附加到證書的自定義鹽。當您擁有高熵源時,Blake2X 也被宣傳為 KDF 。