【问题标题】:How to securely display a randomly generated password in WPF如何在 WPF 中安全地显示随机生成的密码
【发布时间】:2020-04-16 22:36:21
【问题描述】:

“安全”是指 GC 不会在内存中移动它,将复制保持在最低限度,一旦不再需要它就会从内存中删除。

我有生成随机密码的代码,但我需要显示它,我不想使用string 这样做。密码当前在SecureString 中生成,我可以将其放入固定/固定缓冲区中使用。向用户呈现它的最安全方式是什么?

【问题讨论】:

标签: c# wpf passwords securestring


【解决方案1】:

我不知道有什么方法可以显示 SecureString 而不将其转换为普通字符串。无论如何,微软自己甚至不再推荐安全的SecureStringThisofficial msdn documentation page 链接到:

DE0001:不应使用 SecureString

动机

  • SecureString 的目的是避免将机密作为纯文本存储在进程内存中。
  • 但是,即使在 Windows 上,SecureString 也不作为操作系统概念存在。
    • 它只是让窗口变得平淡无奇 文字更短;它不完全 防止它,因为 .NET 仍然必须将字符串转换为纯文本 代表。
    • 好处是纯文本表示不会到处乱跑 作为System.String 的一个实例——本机缓冲区的生命周期是 更短。
  • 除了在 .NET Framework 上之外,数组的内容是未加密的。
    • 在 .NET Framework 中,内部 char 数组的内容是加密的。 .NET 也不支持所有环境中的加密 由于缺少 API 或密钥管理问题。

推荐

不要将SecureString 用于新代码。移植时 .NET Core 的代码,考虑到数组的内容不是 在内存中加密。

处理凭据的一般方法是避免使用它们并 而是依靠其他方式进行身份验证,例如证书或 Windows 身份验证。

SecureString 对敏感信息并没有真正有效的保护,它只是稍微限制了攻击窗口并混淆了一些东西。

我个人的看法是,如果你无论如何都要把它展示给用户,你真的应该担心它在应用程序中的可访问性。而且,一般来说,应用程序内存的安全是操作系统和硬件物理安全的责任。如果您需要担心对应用程序内存的未授权访问,那么您已经遇到了更大的安全问题。

【讨论】:

  • 嗯,我不知道他们都被贬低了。谢谢你的提示。值得庆幸的是,这只是一个学习项目,旨在了解制作密码管理器应用程序所涉及的内容,因此它永远不会用于存储真实的用户数据或敏感信息。
猜你喜欢
  • 2021-06-18
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多