2016-07-06 68 views
-2

這可能是因爲我對此有太多的想法,並且已經過了複雜的事情,並且把自己束縛在了一個結中。我對加密也不太瞭解,所以沒有任何幫助。加密在多個設備上使用的登錄密碼

我有一個應用程序,它具有使用AES類加密的字段(我在另一個問題中發現此處發現),然後將加密的字符串保存在XML文件中。現在,用於加密每個字符串的密碼由用戶提供,並在第一次使用該程序時進行設置。這部分工作正常,我可以根據需要完美地加密和解密數據。

我遇到的問題是用於加密這些字符串的密碼存儲在應用程序中的配置文件中。最初我想我會使用DPAPI來加密這個密碼,然後保存在配置文件中,並且一切似乎都按照我想要的那樣工作。用戶啓動了該程序,設置了密碼,添加了一些字符串,並且加密的所有內容都很好,並且加密過程很好,並且所有工作都很完美。

的問題是能正常工作的口令創建上,但是當我嘗試使用它在另一臺計算機上DPAPI拋出一個錯誤(我假設,因爲DPAPI是該機的具體?)

所以基本上在計算機上我需要一種方法來加密用戶在首次啓動時設置的密碼,並將其存儲在配置文件中,但無法使用我正在使用的AES類來加密其他數據,因爲它需要密碼才能加密它!

正如我所說我的AES類可以完美地加密其他數據,但我需要一種方法來保護存儲在app.config文件中的密碼,而不是使用DPAPI對其進行加密,以便我可以在其他設備上使用它錯誤。

我希望這是有道理的,我的頭疼!

任何幫助非常讚賞

附加信息:

應用程序是一個非常簡單的winform應用程序,它允許訪問數據時,輸入正確的密碼和程序存儲在USB記憶棒使其能夠連接到任何計算機並解密和查看數據。沒有用戶結構,您只需要正確的密碼即可訪問應用程序並查看數據。用於訪問應用程序的密碼是用於加密數據的密碼。

重複問題:這個問題是不同的,因爲在他們的情況下,DPAPI在我的情況下做他們需要的東西,而不是我已經在我的原始問題中表達過!

+0

你爲什麼將它存儲在配置文件中?你不能將這些敏感信息存儲在數據庫中嗎?此外,如果密碼存儲在原始用戶的配置文件中,您將如何讓用戶能夠從另一臺設備登錄? –

+0

謝謝Matias。該應用程序是一個非常簡單的WinForm應用程序,當輸入正確的密碼並允許程序存儲在USB存儲器中時,它可以訪問數據,使其可以連接到任何計算機並解密和查看數據。沒有用戶結構,您只需要正確的密碼即可訪問應用程序並查看數據。用於訪問應用程序的密碼是用於加密數據的密碼。 – Craig

+0

您可以將密碼存儲在加密文件中而不是配置文件中。配置文件是純文本。 –

回答

1

您不存儲密碼。您要求用戶提供它。

+0

但我必須檢查用戶提供的密碼是否正確訪問數據。用戶在第一次運行程序時確實提供了密碼。這將使用此密碼和鹽對它們輸入的任何數據進行加密。當他們接下來打開應用程序時,系統會要求他們輸入密碼以查看數據。他們只被要求提供一次密碼。 – Craig

+0

驗證密碼是微不足道的:如果數據解密正確,密碼是正確的。向存儲的數據添加一個[HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)以驗證它。存儲密碼是**不可能**以安全的方式進行。 –

+0

由於您標記了'dpapi':是的,您可以使用DPAPI憑證漫遊在一臺機器上加密並在另一臺機器上解密。但只能在一個域**內,並且不涉及密碼**,因爲所有加密都委派給DPAPI。 –

-2

如果您必須在USB設備上物理存儲密碼,請勿使用密碼本身(或從計算機上的當前用戶生成密鑰的DPAPI)。

在第一次安裝,要求用戶輸入密碼,具有安全散列函數Hash它(從SHA-2系列)並保存密碼Hash(Plain password)=Cipher 後來,當你要加密或認證,與密碼做。這樣,您可以在設備上保留密碼的安全副本而不覆蓋用戶的密碼,並且仍然使用用戶特定的字符串來加密數據。

請記住,如果攻擊者抓住散列,此方法仍會使用戶容易受到字典攻擊。

+0

您實際上存儲了純文本密鑰和加密數據。爲什麼首先加密,如果解密密鑰在那裏? –

+0

正如我理解的問題,該程序將在USB棒上,而信息將存儲在指定的計算機上,因此它不會在同一臺設備上。 –