如果這是一個愚蠢而明顯的問題,請原諒我,但我無法搜索正確的資源。我不是安全專家,我正在努力瞭解如何正確去做這件事。如何在沒有用戶輸入密碼的情況下在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。然而,作者承認它已過時,我不知道結果有多安全。
有沒有任何一種明智的方法來解決這個問題,並沒有在安全的地方留下一個漏洞?
「此應用程序具有用於與安全Web服務對話的用戶名和密碼對的數據庫」 - 因此您必須能夠訪問明文密碼,以便您可以將用戶名\密碼發送到任何Web服務你想談談? –
你能澄清一下嗎? 「這個應用程序有一個用於與安全Web服務對話的用戶名和密碼對的數據庫,我不需要將這些密碼保存在同事的祕密之中」它是否以純文本和靜態值的形式存儲在數據庫中? – jtabuloc