【发布时间】:2020-04-16 22:36:21
【问题描述】:
“安全”是指 GC 不会在内存中移动它,将复制保持在最低限度,一旦不再需要它就会从内存中删除。
我有生成随机密码的代码,但我需要显示它,我不想使用string 这样做。密码当前在SecureString 中生成,我可以将其放入固定/固定缓冲区中使用。向用户呈现它的最安全方式是什么?
【问题讨论】:
标签: c# wpf passwords securestring
“安全”是指 GC 不会在内存中移动它,将复制保持在最低限度,一旦不再需要它就会从内存中删除。
我有生成随机密码的代码,但我需要显示它,我不想使用string 这样做。密码当前在SecureString 中生成,我可以将其放入固定/固定缓冲区中使用。向用户呈现它的最安全方式是什么?
【问题讨论】:
标签: c# wpf passwords securestring
我不知道有什么方法可以显示 SecureString 而不将其转换为普通字符串。无论如何,微软自己甚至不再推荐安全的SecureString。 This 从official msdn documentation page 链接到:
DE0001:不应使用 SecureString
动机
SecureString的目的是避免将机密作为纯文本存储在进程内存中。- 但是,即使在 Windows 上,
SecureString也不作为操作系统概念存在。
- 它只是让窗口变得平淡无奇 文字更短;它不完全 防止它,因为 .NET 仍然必须将字符串转换为纯文本 代表。
- 好处是纯文本表示不会到处乱跑 作为
System.String的一个实例——本机缓冲区的生命周期是 更短。- 除了在 .NET Framework 上之外,数组的内容是未加密的。
- 在 .NET Framework 中,内部 char 数组的内容是加密的。 .NET 也不支持所有环境中的加密 由于缺少 API 或密钥管理问题。
推荐
不要将
SecureString用于新代码。移植时 .NET Core 的代码,考虑到数组的内容不是 在内存中加密。处理凭据的一般方法是避免使用它们并 而是依靠其他方式进行身份验证,例如证书或 Windows 身份验证。
SecureString 对敏感信息并没有真正有效的保护,它只是稍微限制了攻击窗口并混淆了一些东西。
我个人的看法是,如果你无论如何都要把它展示给用户,你真的应该担心它在应用程序中的可访问性。而且,一般来说,应用程序内存的安全是操作系统和硬件物理安全的责任。如果您需要担心对应用程序内存的未授权访问,那么您已经遇到了更大的安全问题。
【讨论】: