簡體   English   中英

在哪里存儲AesCryptoServiceProvider的Key和IV?

[英]where to store Key and IV for AesCryptoServiceProvider?

我們有一個C#(。net 3.5)應用程序。 在安裝過程中,我們使用AesCryptoServiceProvider加密配置文件中的一些有用信息。 這些信息將在應用程序運行時由應用程序解密。 因此應用程序需要知道KeyIV

我們正在考慮將KeyIV byte []存儲在機器上的安全位置。 我知道有一個machine store可以存儲RSA密鑰對。 我可以在那里存儲KeyIV字節[]嗎? 我在網上搜索並閱讀了MSDN文檔,但找不到辦法。

你知道怎么做嗎? 你有什么好主意嗎?

你正在嘗試的是加密違規。 加密密鑰通常以純文本形式存儲在配置文件中。 IV通常與數據存儲中的密文一起存儲。 只要您不違反CWE-329,您就應該采用這種設計。

所有這些都打破了你的意思是你試圖隱藏與密鑰相同的機器上的密文。 攻擊者在哪里? 如果他已經在你的機器上,那么他可以啟動調試器並讀取內存中的密鑰或純文本。 密碼學無法解決這個問題,您正在尋找的是Security It Obscurity (這不是一個安全的解決方案)。

我會首先回答這個問題:“你還有其他好主意嗎?”

.Net框架內置了對加密配置節的支持。 您可以將此加密應用於大多數配置節,但有一些例外(例如machine.config)。 除非您有充分的理由推出自己的配置加密,否則最好使用框架中已經提供給您的內容。

如果你走這條路,這是一個很好的起點。 http://msdn.microsoft.com/en-us/library/53tyfkaw(v=vs.100).aspx

如果您使用RSA,您仍需要在安裝過程中將公鑰和私鑰放入計算機。 基於你的問題,大概你有辦法獲得機器的鑰匙 - 你只需要知道在哪里存放它。 在這種情況下,Microsoft提供了存儲RSA密鑰的位置。 您可以按照本文介紹如何導入和導出密鑰: http//msdn.microsoft.com/en-us/library/yxw286t2(v = vs.100).aspx

在運行應用程序的計算機上,在安裝密鑰對時將私鑰標記為不可導出,以增加安全性。 如果應用程序在特定用戶帳戶下運行,請在用戶存儲中安裝密鑰對。

用戶(或大多數Web應用程序中的應用程序池)將需要讀取私鑰的權限。 您可以使用aspnet_regiis.exe獲取權限授予。

Web上的大多數示例都將引用aspnet_regiis.exe來創建,導出,導入和授予RSA密鑰對的權限。 您不必使用該程序,但如果您這樣做,則有幾個問題:

  1. 它僅在名為web.config的文件上運行。 因此,如果您有控制台應用程序,則必須將配置文件重命名為web.config以將其與aspnet_regiis.exe一起使用。

  2. 如果使用aspnet_regiis.exe創建密鑰對,它將忽略密鑰長度參數。 在此響應中,當前建議的密鑰長度為3072.要使用3072位私鑰創建密鑰對,請不要使用aspnet_regiis.exe。 請參閱如何設置使用aspnet_regiis創建的RSA密鑰的密鑰大小? 有關如何創建更大密鑰長度的示例。

畢竟,如果您仍然需要在某處存儲aes密鑰,您可以考慮將其放在一個文件中並使用cipher.exe使用EFS保護它。

暫無
暫無

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

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