应用程序密码的完整性

Integrity of the application password

有谁知道如何在文本文件中安全地存储密码。我在 VS 中的 C# 上有一个本地应用程序,登录名 window,我需要存储用户密码。我知道散列和加密,但问题是任何人都可以删除密码文件或更改其中的数据。有什么办法可以解决这个问题吗?我的攻击者模型是具有管理员权限的用户。

谢谢大家!我已经通过 运行 一种使文件保持打开状态的服务解决了这个问题,因此除非您关闭该服务,否则您无法编辑或删除它。这不是我认为的最佳解决方案,但它确实有效。

正如其他人所说,这取决于您的威胁模型。如果本地存储的密码将用于验证任何东西,那么它需要被加密,并存储在加密的 database/file.

您是否将此密码存储在本地以便保存用于远程登录的用户密码?

或者您是否存储此密码以实际验证用户登录数据? (通常你不想这样做,因为正如其他人所说,你不能信任用户端的文件。)

最好的解决方案是使用远程服务器来存储密码,并验证登录数据。

然而..

没有一种适合所有安全模型。这取决于您的需求、用户需求、您提供的服务类型,以及此应用程序所需的相应安全级别。 (MSN 聊天帐户不需要与银行登录相同的安全性。

您最初的问题是如何防止用户编辑本地密码文件:

保存文件时需要加密。 (还使用 sa256 散列存储的密码,使用盐)

然后在您的应用程序中解密密码文件(在内存中),然后从中读取密码哈希以在您的应用程序中使用。除此之外,您还可以远程存储 file/password 的解密 key/salts。您的应用需要互联网访问权限才能获取 key/salt,然后解密本地 file/password.

更多阅读和代码参考:

Encrypting Files in C-Sharp

Sha256 Hashing with Salt in C-Sharp

Using Remote SQL Databases in C-Sharp

扩展 zaph 注释:使用散列。

运行 用户密码通过良好的散列函数 (SHA2) 并存储散列。

当用户输入密码并且您想检查它时,运行他们的输入通过相同的散列函数,看看您是否得到相同的散列。

这更安全,因为您没有存储可以转换回密码并被盗的东西