0

在概念层面上,SecureString 看起来像是 ProtectedMemory 的一种特殊化。

诚然,它的主要功能是缩短 RAM、交换和故障转储中(不可变)字符串的生命周期。但是,它也使用 DPAPI 来保护除入口和出口点之外的数据。DPAPI 使用密码学来完成它的工作。那么为什么将 SecureString 放在 System.Security 而不是 System.Security.Cryptography 中呢?

在我看来,如果在实现中没有使用密码学,那么 SecureString 将只提供比预先存在的 StringBuilder 更小​​的便利优势。

SecureString 和 ProtectedMemory 类名称中的“Secure”与“Protected”之间也存在对比,我也不确定这可能是如何激发的。

4

1 回答 1

1

我刚刚发现SecureString不加密 .NET Core 中的内部存储;不应SecureString在新开发中使用(DE0001);并且除非我从SecureStringvia中取出字符串,否则Marshal.SecureStringToGlobalAllocUnicode即使在 .NET 的情况下,我最终仍将始终让未加密的字符串在托管堆的第 0 代上跳舞。因此可以公平地说,它SecureString基本上只是一个装饰StringBuffer性的,其类名所暗示的“安全性”更多地与可变性有关,而不是与密码学有关。

Damien_The_Unbeliever 在他不再可见的评论中表明这与这两个类的记录方式一致(自 .NET 2 以来它们都被添加):

我可以猜测这是因为它们处于不同的概念级别 -SecureString承诺保护字符串但没有说明它是如何做到的。ProtectedMemory专门说它用于访问 DPAPI。一个可以使用另一个(或底层技术)作为实现细节并不意味着应该决定它属于哪里。

于 2018-12-07T11:14:45.050 回答