2009-11-03 63 views
1

這不是通常的問題「存儲純文本用戶的密碼是否安全?」。不,這不安全,我們都知道。存儲密碼以便與另一個系統進行身份驗證

我正在寫一個小程序應針對外部系統進行身份驗證,以做一些東西,唯一可用的身份驗證方法是通過用戶名和密碼。它用於人類,不能改變。

有可以訪問我的應用程序,每一個被單獨認證多個用戶,但他們所有的「份額」反對外部系統,在理想情況下是由應用程序透明管理,相同的驗證數據。

「啞巴」解決方案是將用戶名/密碼以純文本,並使用它進行認證,但顯然這不是安全的。密碼可以加密,但如果有人闖入系統會怎麼樣?

可能的解決方案:使用DPAPI透明地加密/解密密碼(甚至可能是用戶名)。這是一個好主意嗎?這安全嗎?怎麼樣設置多臺機器(機器間加密兼容)?

您有任何其他建議嗎?

+0

我認爲DPAPI可能是你最好的選擇。我不明白你對web農場的意思,儘管... – 2009-11-03 06:57:29

+0

我不確定這是否正是你想要的,但是像DBM等哈希解決方案如何使用?散列用戶的密碼以進行存儲,並在進行身份驗證時,散列它們提供的密碼並將其與現有散列進行比較。這是一種常用的存儲密碼的方式。 P.S. - 根據你想要/需要的安全級別,我肯定會推薦醃製你的哈希以避免彩虹表類型的攻擊。有關Microsoft長期以來如何使用無殘留哈希存儲用戶密碼的文章,請參閱最新一期的「2600」。 – 2009-11-03 07:01:00

+0

@Bob:不是什麼被問到!他需要提供密碼,因爲他將密碼發送給外部系統。他正在對別人進行身份驗證,而不是對他的系統進行身份驗證。 – 2009-11-03 07:03:40

回答

2

DPAPI通常不能用於Web農場 - 密鑰存儲區特定於計算機。您沒有指定某些用戶是否共享一組憑據,而另一用戶共享另一組憑據。如果所有用戶都共享同一組憑據,請將其存儲在web.config中並完成。使用web.config文件上的配置加密API或簡單ACL來保護憑據。

如果不同的用戶有不同的第三方系統的憑據,我會保存憑證與用戶,使用用戶密碼的哈希+鹽作爲加密密鑰。然後,即使惡意用戶獲得您的數據庫,他們也必須能夠在嘗試破解第三方密碼之前先解密用戶的密碼。這樣做會增加一層難度。

+0

添加用戶腳本需要知道當然的憑證.. – Will 2009-11-03 07:25:23

+0

使用用戶密碼哈希(加上鹽)進行加密的問題在於,在設置之後很難添加新用戶,因爲您需要其他人的密碼(例如添加用戶的管理員)。另外,如果用戶更改密碼,則必須重新加密她的外部系統憑證的「副本」。這可能是一個可行的解決方案,雖然有點複雜。 – 2009-11-03 08:39:02

+0

@Dario我不確定我是否理解複雜性。鑑於OP,我假設用戶在設置其初始帳戶(或首次訪問它)後提供了第三方憑據。考慮到用戶的密碼在那時可能已經以散列形式可用,使用所述散列+鹽來加密由用戶提供的任何憑證將是微不足道的。是的,每次用戶更改主密碼時都必須重新加密證書,但這似乎並不罕見。 – Chris 2009-11-03 16:10:53

1

請記住,DPAPI密鑰位於用戶級別。除非您要爲每個用戶設置和存儲單獨的憑證集副本,否則DPAPI不​​會對您有任何好處。唯一真正安全的方法是使用「受信任的子系統」模式,其中您的Windows服務以某個用戶身份運行,受保護的數據存儲在該用戶的HKCU配置單元中,並使用其DPAPI密鑰進行加密。它執行所有需要代表用戶進行身份驗證的操作,並且用戶名/密碼不會加載到用戶的進程中。即使如此,如果用戶是管理員,他們仍然可以在技術上通過調試服務過程來獲取用戶名/密碼。

的真正安全的方式做這將是做同樣的事情,但使用的遠程Windows憑據的用戶驗證到需要代表用戶的動作的遠程服務器。真的只是取決於用戶名/密碼的安全性。

1

您需要保持純文本用戶名和密碼可用於登錄到外部系統。您可以嘗試自己加密此文件,然後以某種方式在應用程序中隱藏密鑰。

然而,它可能是你的操作系統(例如Windows操作系統)提供保護的文件和其可能的,那些是由經驗豐富的專家實施的方式 - 這是很難推薦的投資時間滾動自己!

因此,最好的方法是以純文本形式存儲您的憑據,並依靠操作系統來保護文件,例如

  • 在您的Web服務器運行作爲自己的用戶,以便只有它可以在其數據得到
  • 整個磁盤加密

考慮如何機器/服務「原木」加密主目錄如果這意味着無人看管,則需要啓動啓動。

這個問題本身在安全免責聲明中涵蓋,所以這一點不需要費力。

  • 它將保持了閒置同行誰得到一個終端服務器上
  • 它不會讓出專用的攻擊者獲得了跑步機和物理設備(一切從FireWire和USB設備進行冷卻襲擊基本上無法防禦)
  • 它不會阻止這些證書在您的服務器和他們正在登錄的其他系統之間遭到攻擊 - 如果其正常的http登錄到其他系統,甚至沒有http-摘要認證...
相關問題