儲存 RSA 私鑰
目前我正在開發一個應用程序,使用者可以在其中生成自己的一對 RSA 密鑰,以實現與我的伺服器的安全通信。客戶端也可以直接通信,發送簽名(證明身份驗證,就像 PGP 所做的那樣),因此我不能在這個方案中使用 Diffie-Hellman。
事實上,我知道一些儲存私鑰的技術。我想用 AES-256 對它們進行加密,詢問使用者一個替代密碼,因為如果我的伺服器受到威脅並且攻擊者以某種方式使用客戶端私鑰的密文計數,使用他們的個人/客戶端密碼可能會有風險。
我在考慮https://en.wikipedia.org/wiki/Zeroisation。只需解密加密的私鑰並在不需要時將其從記憶體中刪除。我還閱讀了一些關於 TPM 的資訊,但恐怕這只涉及基於供應商在啟動前簽名驗證的加密安全硬體設備和其他設備(也許我不正確)。
我想知道哪種是將私鑰儲存在客戶端電腦中的“最佳方式”,因為我無法將它們儲存在我的伺服器中。
我目前希望找到類似問題的答案,但也許我可以分享一些想法。我會說你的問題比我的更標準,因此它的好處是現有的選項是相對標準的。然而,我自己的問題讓我意識到密鑰儲存是一個資訊安全問題,而不是密碼問題。有了這個,我的意思是沒有可證明的最佳方法,但有一些技術和良好實踐可以幫助降低風險,給定一些威脅模型。
事實上,所述威脅模型是確定什麼是相關的最關鍵的方面。在良好實踐方面有一些方法,但它們應該更多地被視為建議,而不是清單或完美答案。
似乎相對一致的一個方面是加密應該發生在與普通處理器(即 TPM、HSM、智能卡)分離的環境中。我沒有研究過 TPM,但其他兩個似乎是標準的方法。
現在,如果沒有額外的硬體,我可以看到您的方法總體上是有意義的。我會擔心每個密鑰副本的處理方式(加密和未加密,在 RAM 和磁碟中,在活動使用和備份中),以及密碼用於加密的方式。特別是,明文中存在的密鑰越少越好。
但請注意威脅模型。了解您所關心的問題是了解您的防禦措施是否真的在保護您的關鍵。