2009-10-17 18 views
3

.Net服務器應用程序是否存在與存儲和檢索敏感的每用戶信息(如第三方憑證)相關的參考模式?.Net存儲和檢索敏感的每用戶數據的設計模式

我的初步設計思路是沿着線:

  1. 生成具有適當的堅固私鑰的自簽名X509證書,
  2. 導出證書和密鑰,並將它們存儲在這將是一個USB密鑰鎖定在一個寶箱和龍把守,
  3. 設計我的服務器應用程序請求從窗戶當前用戶證書存儲需求的私鑰,
  4. 當一個新的服務器上安裝服務器應用程序檢索USB密鑰並導入證書,並將私鑰標記爲不可導出。

我的要求是:

  1. 降低風險,儘可能的用戶的敏感信息,如果該存儲介質被破壞越來越受到損害。在我的情況下,存儲介質可能是關係數據庫或亞馬遜的SimpleDB,如果.Net服務器的主機操作系統(本例中爲Window's Data Center Edition)受到危害,則可降低用戶敏感信息受到攻擊的風險。

更新 3.忘記提到能夠重新鍵入定期是一個要求,使得同一prviate加密密鑰不使用10年。

問題:

  1. 如果主機操作系統被攻破,攻擊者可以安裝惡意應用程序來執行相同的解密操作爲我的.NET服務器。

更新 關於OS妥協思考一些我意識到沒有什麼是可以的,如果一個熟練的攻擊者能夠訪問來完成,但關鍵應避免不滿者管理員,也就是說,它比開放的問題更加一個文件或註冊表項來提取私鑰。

我敢肯定,這個問題已經解決了上千次,比一個鏈接的答案更令人高興,但是在「安全加密」類型的主題上搜索是低信號高噪聲。

回答

1

我不知道任何具體的設計模式關於您的.NET服務器應用程序信息的安全性,但是,最終,您只能做很多事情來保護您向用戶請求的任何信息,特別是,

如果您要存儲將用於您自己的應用程序將執行的身份驗證的任何用戶密碼,存儲此密碼的最佳方法是使用醃製的單向散列函數。這樣,用戶每次用應用程序進行身份驗證時都會以純文本方式手動提供密碼,並立即對該純文本密碼進行哈希處理,並將其與您存儲的哈希密碼進行比較。任何攻擊者,即使是可以訪問原始數據庫的攻擊者,都必須對所有的鹽漬散列進行暴力破解。不是不可能的(給予足夠的計算能力),但在所有現實中肯定不可能。

如果您正在存儲用戶提供給您的用戶名/密碼,那麼您的應用程序就可以使用這些憑據自動「代表用戶」以其他應用程序或服務「登錄」/「認證」 ,如果數據的安全性至關重要,我建議你不要這樣做。

簡單地說,即使你加密了這些憑證(不管是對稱或非對稱加密),最終,該數據在某處被使用,要做到這一點,需要對其進行解密。可以這麼說,這是安全鏈中的「薄弱環節」。

降低用戶的敏感信息 的風險,如果 .NET服務器的主機操作系統, 在這種情況下,窗口的數據中心 版,受到損害越來越受到損害。

如果發生這種情況,所有投注都將關閉。以加密形式存儲數據不再意味着什麼,就好像Windows可以解密該數據一樣,攻擊者一旦訪問機器/操作系統就可以解密該數據。他甚至不需要嘗試「出口」私人從Windows證書存儲密鑰,因爲他可以進一步注入了惡意代碼下來解密鏈,簡單地攔截解密的數據,因爲它出來的解密過程。

當然,保護用戶敏感數據的最好方法是永遠不要存儲它。每次都請求用戶使用它,無論您需要什麼目的,然後立即處理它。在英國,PCI (Payment Card Industry) Data Standards對信用卡上的CVV代碼採用此政策。商家可以存儲信用卡號碼,但從未存儲數據庫中的CVV代碼。

如果必須存儲中的數據,然後通過各種手段對其進行加密,但是要注意,加密並不一定是「安全」的數據,它只是增加了什麼有效的是攻擊者混淆另一層誰可能會危及您的物理機器或操作系統。

如果要存儲數據,你必須有強周邊安全(即Network security)如你所能得到的,正是爲了防止潛在的攻擊者獲得對服務器的操作系統。

導出證書和密鑰和 他們店將在其上 鎖定在百寶箱和守衛 由龍USB密鑰,

除了作爲一個堅固的防火牆,也許IDS系統,你可能想要讓其中的一個龍守衛你的服務器! :)

0

我不知道最好的解決方案是什麼,但這就是我所看到的一些視頻遊戲的特別是蒸汽遊戲。遊戲將首先使用通常的私鑰技術進行認證。然後,遊戲將下載一個本地運行的腳本。然後腳本會以某種方式檢查託管它的可執行文件。該腳本可以檢查可執行文件是否是相同的遊戲或被修改。該劇本將在遊戲開始前給家裏打電話。如果腳本不回家,遊戲服務器將把遊戲踢出去。

惡意軟件編寫者必須以某種方式欺騙腳本來思考它的遊戲。無論何時發現惡意軟件這樣做,腳本都會被開發人員更改。這確保遊戲公司有能力在野外停用惡意軟件。

您可以將類似技術應用於您的應用程序。

0

除了您自己製作的建議和一些其他海報,您可能會考慮隔離數據庫檢索和修改的安全性。如果一個帳戶被盜用,另一個帳戶是安全的。