我可以通过物理访问从管理用户隐藏.NET内存变量吗?

Fes*_*ale 3 .net c# memory security

假设有一条敏感信息存储在内存中,其定义如下:

private readonly String Key;
Run Code Online (Sandbox Code Playgroud)

Key变量被分配使用传递给所属的类的构造函数的自变量的值.该值是Console.ReadLine()通过辅助应用程序进行的调用获得的.然后在将值传播到应该传播的位置后关闭该控制台应用程序.永远不会将值写入或读取到文件或注册表.这纯粹是一种记忆中的交易.

非常重要的是,任何人都不能知道此密钥,包括可能在域上具有管理员访问权限的各种顾问,更不用说物理访问计算机了.

我一直试图想出一些防弹方法来保护这个Key价值,但我无法想出任何东西.我是否正确假设任何具有管理访问权限的人都可以简单地启动Visual Studio,附加到进程,然后追踪值Key

再次,只是要清楚.我们可以容忍物理机器的破坏或盗取该机器上的任何数据.我们唯一不能容忍的是Key在应用程序运行时丢失或被盗在内存中.

(此应用程序在.NET 4.5,Windows 2008 Server上运行)

有任何想法吗?

Bil*_*eal 5

不,你不能阻止有物理访问权限的人阅读记忆; 他们总是能够探测物理内存总线.在用户模式下,您甚至无法阻止其他管理程序读取内存; 正如你所说,他们可以作为调试器附加.

有些系统旨在使得难以获得存储在物理设备上的密钥(例如,可信平台模块,智能卡,现代视频游戏控制台,蓝光播放器等),但这些事情使得它变得困难,而不是不可能, Joe .NET App无法使用.