2017-02-07 86 views
1

如果這是一個愚蠢而明顯的問題,請原諒我,但我無法搜索正確的資源。我不是安全專家,我正在努力瞭解如何正確去做這件事。如何在沒有用戶輸入密碼的情況下在C#中加密和解密敏感信息

這裏是場景。我在內部服務器上有一個內部應用程序:不是有史以來出去到客戶端網站。此應用程序具有用於與安全Web服務交談的用戶名和密碼對數據庫。我不需要將這些密碼保密給同事,但是我希望在服務器受到攻擊和數據被盜的情況下保護它們。

傳統上,人們會鹽和散列它們。這是一個我原則上理解的過程,但它取決於用戶輸入的密碼,然後可以對存儲的散列進行驗證。對我來說並非如此。

因此:在各處搜索有各種解決方案,它們使用固定的「密碼短語」來保護字符串。這裏有一個例子,https://stackoverflow.com/a/10177020/271907,這裏是另一個https://stackoverflow.com/a/10366194/188474

然而,據我所知,這些都沒有提供一個有用的解決方案在我的情況。這個「密碼短語」將被存儲在的某處爲我的應用程序來完成其工作。如果我將它硬編碼到應用程序中,它可以被反向設計。如果我將它加密並放在一個單獨的文件中,它可能會被盜用並使用彩虹表工作。

我看着使用reg_iis加密一個密鑰按照Encrypting Web Config using ASPNET_REGIIS,但是,老實說,只是讓我更加困惑。我甚至不知道這些加密的配置文件是否可以在機器之間移植,或者是否必須在開發和測試之間進行重新加密並且實時生效。我不知道他們有多安全:AFAIK必須有一個密鑰某處,如果有密鑰可以被破壞。

爲了進一步泥濘的水域,我發現這個答案不使用鍵:https://stackoverflow.com/a/10176980/271907。然而,作者承認它已過時,我不知道結果有多安全。

有沒有任何一種明智的方法來解決這個問題,並沒有在安全的地方留下一個漏洞?

+0

「此應用程序具有用於與安全Web服務對話的用戶名和密碼對的數據庫」 - 因此您必須能夠訪問明文密碼,以便您可以將用戶名\密碼發送到任何Web服務你想談談? –

+0

你能澄清一下嗎? 「這個應用程序有一個用於與安全Web服務對話的用戶名和密碼對的數據庫,我不需要將這些密碼保存在同事的祕密之中」它是否以純文本和靜態值的形式存儲在數據庫中? – jtabuloc

回答

1

任何解密,你解密密碼來檢查它是從根本上是不安全的因爲你的應用程序必須知道如何做解密。

您可以通過不在代碼中存儲解密密鑰來增加難度,但無論您將它放在哪裏,黑客可能會危及您的代碼,也可能訪問它可以訪問的任何內容。

即使您的應用程序安全性非常穩固, 您的密碼仍然是純文本在您的數據庫中,如果這樣做會受到威脅,那麼您的許多用戶都會被暴露。

這就是說 - 這是一個只有內部的低風險系統。您的最佳行動方式可能是讓您的老闆知道相對風險與適當安全成本之間的關係,並讓他們進行明確的業務呼叫(並承擔未來的責任)。

只有這樣做並沒有在安全性方面留下一個漏洞,就是用單向算法對密碼進行散列和醃製。當前密碼是純文本的事實不應該是一個問題 - 有很多方法可以推動用戶對它們進行加密,但最簡單的方法就是爲他們做:只要他們有純文本密碼,他們下次登錄時加密它。然後經過適當的等待(取決於用戶登錄的頻率),請刪除舊密碼並檢查新散列。

的金科玉律是:如果您存儲密碼,你必須散列他們的方式,你不能扭轉

唯一的另一種選擇是讓你無法驗證在所有 - 使用NTLM或AD或者OAuth來獲得一些其他服務來驗證用戶,並相信該源。


如果您想要確保應用程序使用自身的憑據,那麼您也有類似的問題,但重點會轉移。如果主機受到攻擊,您仍然無法避免暴露,但大多數攻擊只會針對文件。

如果您的所有連接詳細信息都保存在web.configappsettings.json中,這可能會造成問題,因爲這些文件可能會泄露您的SQL服務器或其他服務密碼。

這是您可以使用ASPNET_REGIIS的地方 - 它允許您添加IIS可以訪問的祕密配置,但這不是以純文本形式與網絡文件保存的。

在.NET核心中有新的Microsoft.Extensions.SecretManager.Tools做同樣的事情。

這兩種方法都會爲任何應用程序憑證添加一層保護,否則這些應用程序憑據將以純文本形式存儲在磁盤上。攻擊者必須妥協機器才能看到它們,而不僅僅是文件。

在這兩種情況下,這些配置細節都不再可移植 - 您必須在每臺服務器上重新設置它們(並重新加密)。

但是,您只需真正需要實時額外保護 - 即可在開發或測試沙箱中使用純文本配置,然後使用活動服務器上的加密設置覆蓋詳細信息。

+3

這個問題不是關於用戶密碼。這是關於保護服務帳戶憑證,這是一個根本不同的問題。 – Xander

+0

@Xander我修改了答案。 – Keith

相關問題