为什么SecureString和ProtectedMemory被放置在不同的程序集和命名空间中



在概念层面上,SecureString看起来像是ProtectedMemory的专业化。

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

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

SecureString和ProtectedMemory类名中的"Secure"one_answers"Protected"之间也存在对比,我也不确定这可能是怎么回事。

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

Damien_The_Unbeliever在他不再可见的评论中表明,这与这两个类的文档记录方式一致(自.NET 2添加以来一直如此(:

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

最新更新