簡體   English   中英

在文件中存儲RSA私鑰

[英]Storing RSA private key in file

我有一個簡單的加密應用程序,將在其中加密數據庫中的“敏感”數據。 只有具有訪問權限的人才能以解密形式查看這些數據。 我一直在尋找有關如何執行此操作的更多信息,這是我的項目方法:

  1. 我正在使用AES加密算法。
  2. 使用RNGCryptoServiceProvider生成AES密鑰。 使用AES密鑰加密信息。
  3. 使用和RSA公鑰加密AES密鑰。
  4. 將私鑰存儲在USB文件中,我只會將其提供給具有訪問權限的人員。
  5. 當合法的人需要查看解密的信息時,他們將提供私鑰。 該應用使用私鑰解密AES密鑰,而AES密鑰反過來解密信息。

現在,我的問題是如何安全地存儲該私鑰? 通過閱讀,可以使用FromXMLString獲得私鑰。 但是,我在想,如果有人以某種方式獲取USB文件和XMLFile,他可以通過類似地使用FromXMLString來找到私鑰。 那么,如何使用密碼保護該文件? 我可以在C#中使用任何功能嗎?

另外,如果更改密鑰對,則必須更改公用密鑰,並使用新的新公用密鑰再次重新加密AES密鑰。 為此,我發現這篇文章“ 如何通過RSA生成唯一的公鑰和私鑰”非常有用。 但是,我不確定作者是如何實現的。 他是否還將密鑰容器名稱存儲在私鑰文件中? 還是ToXMLString自動執行此操作?

謝謝〜

不知何故,必須將解密密鑰或用於獲得解密密鑰的RSA密鑰保存為純文本。 如果不是USB驅動器,則必須放在用戶的腦海中。

因此,您可以做的就是進行多重身份驗證。 只有用戶才知道的密碼(他會把它放在腦海中或記在便箋上;而不是您的電話上)和包含另一個解密密鑰的USB驅動器。

因此,攻擊者必須同時具有密碼和USB驅動器才能獲取加密的信息。

看一下PBKDF2 ,了解如何從用戶輸入的密碼派生出加密安全密鑰。

我建議將證書以及私鑰存儲在PKCS兼容容器(* .pfx)中。 在C#中,這可以通過Bouncy Castle庫完成。

這是創建對的方法:

是否可以僅使用C#以編程方式生成X509證書?

這是將其存儲在容器中的方法(步驟3):

http://web.archive.org/web/20100504192226/http://www.fkollmann.de/v2/post/Creating-certificates-using-BouncyCastle.aspx

解密私鑰的問題在於,該密鑰將以純格式傳輸到計算機的主內存中,並且可能會以存儲方式交換。 有一些選擇可以使用私鑰而不將其存儲到內存中:

  • 使用智能卡,並在PIN后面加上私鑰(PIN比密碼更安全,因為通常使用“重試計數”來保護它們(因此,您無法嘗試強行訪問)
  • 使用安全令牌,這基本上是智能卡和智能卡讀取器的組合

使用其他棘手的選項:

  • 使用計算機主板上的板載受信任平台模塊(TPM),該主板基本上是板載智能卡
  • 使用操作系統提供的某種受保護的密鑰存儲區

此外,您還可以選擇使用可以使用PIN或密碼保護的USB驅動器。 Ironkey生產的認證 USB驅動器在USB密鑰本身的硬件中執行AES加密。 當然,這會將您的私鑰移到內存中。

如果必須在內存中使用私鑰,請確保您的系統已正確加固 ,例如,加密交換,確保您具有維護訪問權限的系統等。

歡迎進入密鑰管理領域:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM