2011-03-04 55 views
2

我已經構建了一個CMS系統,允許用戶在我的客戶端的Intranet應用程序上創建和管理聯機表單。我應該如何爲我的AES加密數據庫條目派生密鑰和初始化向量?

當然,由表格處理的一些數據可能需要加密,例如,如果系統用於構建處理工資細節或其他任何形式的表單。所以我使用AESManaged類來對這種數據進行對稱加密,然後進入我們的應用程序數據庫。

一切都很好,但是現在,在發佈之前,我可以對shared secretsalt進行操縱。

我最初的想法是由含有與Question場的(再次,基於GUID)ID加密領域結合Form的(基於GUID的)ID來進行(動態)shared secret是答案:

FormId:QuestionId 

Salt正在發生同樣的方式,只能用的GUID順序顛倒,即。

QuestionID:FormID. 

我是新來的這東西,所以不知道這是一個明智的策略,或者如果我應該做一些其他方式?

+2

由於它是加密,它是一個IV,而不是鹽。正如肯布羅德哈根指出的那樣,它應該是隨機生成的。而且,實際上沒有很多點加密,然後將其與加密密鑰一起存儲。您需要確定您的威脅模型是什麼,並且考慮到這一點,設計您的系統。 – 2011-03-08 07:13:01

回答

1

鹽應該是一個隨機生成的值。其目的是使字典/暴力攻擊更難執行。維基百科在密碼鹽方面有一篇很好的文章: http://en.wikipedia.org/wiki/Salt_(cryptography

對於共享密鑰的理想情況,它不會是一個未經加密的數據(例如你的ID)存儲的值。通常最好的做法是,最終用戶或管理員以某種方式選擇密鑰,以便他們能夠定期輪換它或發生某種安全漏洞。此密碼密鑰可以由CMS的每個用戶擁有,也可以由管理員帳戶擁有。如果您有非常嚴重的安全需求,您可以追求第三方密鑰管理服務器。

如果這裏的主要目標更多是混淆,而且CMS不會受到某種形式的安全審計,那麼您最初的想法可能會出現一些問題。它會阻止對數據的隨意訪問,但可能不會通過審覈來對付需要隨機鹽的正式標準,旋轉密鑰的方式以及系統「所有者」更改密碼的方式你自己無法訪問數據。

+0

感謝您的快速響應。 我的目標是混淆 - 系統託管在一個安全的內聯網上,目前不具有國家祕密,但作爲一個CMS運行後,我不會有任何發言權,因此我認爲它應該構建爲儘可能安全。 解密將由系統完成,例如,當適當授權的超級/管理員用戶想要基於發佈的表單數據生成文檔時。在這種情況下,我應該堅持一個全局的(閱讀'形式CMS範圍')salt字符串並將它保存在某個地方,以便它可以用來執行解密? – 5arx 2011-03-04 12:12:32

+0

你需要鹽來解密你的內容。如果每種形式都有獨特的鹽,那麼數據將更難以破解,因爲您不會有大量的數據和一個共同的東西(鹽)。 – kennbrodhagen 2011-03-05 12:21:12

+1

如果你比混編審計密碼學更迷惑,你可能想要考慮如果以後如果要求增加強加密的話。您可能需要添加某種「加密版本」才能進行跟蹤,以便您知道是使用混淆方法還是使用更強大的加密。 – kennbrodhagen 2011-03-05 12:28:11

相關問題