我正在编写.net(C#)windows应用程序来存储用户密码,如keypass,lastpass,roboforms等。
要处理用户数据,我必须将其保存在内存中,此数据还包含用户的密码。
现在我的问题是:
由于
答案 0 :(得分:9)
你的顾虑是正确的,记忆中的字符串是不安全的。
您可能正在寻找SecureString课程。
答案 1 :(得分:7)
如果您担心某人窥探RAM以获取密码,那么您会遇到更多重大问题。如果恶意用户可以访问RAM,那么将键盘记录器放到机器上,或绕过软件中使用密钥的位置,或者解密后拦截密钥都是微不足道的。等等
一般规则是,如果某人有权访问该机器,那么它的游戏就是明智的。
答案 2 :(得分:4)
是的,存在捕获所有物理内存(和页面文件)以供进一步调查的工具。它们被称为“取证”,您可以通过在搜索中添加此关键字来找到一些。如果你想在代码中捕获内存(即自己编写这样的程序),可以使用我们的RawDisk产品。
至于保护你的密码,Kobi提到SecureString类,它应该安全地将字符串存储在内存中。虽然这个类不是100%保护(密码在你使用它时仍然被解密),但是密码捕获的可能性要小得多。
答案 3 :(得分:1)
我建议您浏览Keepass(版本2.xx)的源代码。它是用.NET编写的,它处理您所关注的相同问题。
答案 4 :(得分:1)
我的经验在安全方面有限,但我希望这会有所帮助