确保从内存中删除敏感数据

本文关键字:删除 敏感数据 内存 确保 | 更新日期: 2023-09-27 17:59:47

我的应用程序要求用户输入如下密码:

using (var passwordForm = new PasswordForm())
{
    var result = passwordForm.ShowDialog();
    if (result == DialogResult.OK)
    {
        password = new SecureString();
        foreach(var c in passwordForm.PasswordBox.Text)
        {
            password.AppendChar(c);
        }
    }
}

其中password是一个SecureString字段,它在相当长的一段时间内保持密码。

显然,PasswordField.Text只是一个常规的未加密字符串,这意味着用户的密码是公开的。(据我所知)真的没有办法解决这个问题,所以这是一个必要的邪恶。因此,我希望密码暴露的时间尽可能短。

实现这一目标的最佳方式是什么?密码表单会在我完成后立即处理,但这真的会从内存中删除所有"明文出现"的密码吗?如果没有,确保这种情况尽快发生的最佳方法是什么?

确保从内存中删除敏感数据

我相信这里已经回答了这个问题,但让我总结一下我的理解:

  • SecureString的用例是防止开发人员在日志或崩溃报告中意外地向某人显示密码
  • 如果你担心病毒从内存中窃取你的密码,那么加密它也无济于事,因为在某个时候你需要对它进行解密(如这里所解释的),这时病毒就可以获得密码
  • 你可以创建一个像这样的自定义控件,它使用SecureString作为文本框,但我想问这有什么意义。除非你通过在内存中转储所有内容来创建日志条目或崩溃报告,否则可能没有意义