C# 如何安全地从内存中删除敏感信息

C# 如何安全地从内存中删除敏感信息,c#,xamarin,memory-management,xamarin.ios,garbage-collection,C#,Xamarin,Memory Management,Xamarin.ios,Garbage Collection,安全渗透工具能够从内存转储中获取敏感信息。 据我所知,将null设置为任何变量都可以,我想。。。但我无法调用任何C#varialbes 基本上,我计划将所有东西都存储在keychain中,每当我得到值时,在使用之后,我将设置null以清除…但是为什么不能调用dispose。。。我不知道 如果有更好的方法来处理xamarin中的敏感数据变量,请告诉我。在实现析构函数或终结器的对象上调用Dispose()。为了隐藏延迟的敏感数据,我假设您指的是string值。您可以实现SecureString。这将

安全渗透工具能够从内存转储中获取敏感信息。 据我所知,将null设置为任何变量都可以,我想。。。但我无法调用任何C#varialbes

基本上,我计划将所有东西都存储在keychain中,每当我得到值时,在使用之后,我将设置null以清除…但是为什么不能调用dispose。。。我不知道

如果有更好的方法来处理xamarin中的敏感数据变量,请告诉我。

在实现析构函数或终结器的对象上调用
Dispose()
。为了隐藏延迟的敏感数据,我假设您指的是
string
值。您可以实现
SecureString
。这将把存储
字符串的内存区域转换为密码文本

正确使用是
SecureString
的所有堆栈溢出。但不确定是否通过Xamarin支持。至少当它是密文时,它不会通过内存转储公开。我警告你,这是一个奇怪的api实现。

Dispose()
旨在对那些实现析构函数或终结器的对象进行调用。为了隐藏延迟的敏感数据,我假设您指的是
string
值。您可以实现
SecureString
。这将把存储
字符串的内存区域转换为密码文本


正确使用是
SecureString
的所有堆栈溢出。但不确定是否通过Xamarin支持。至少当它是密文时,它不会通过内存转储公开。我警告您,这是一个奇怪的api实现。

当攻击者能够访问您的系统时,所有赌注都将被取消。这真的是你应该关注的地方吗?@Jeroenvanevel-最好从可用的方法中尽可能地使这一点变得困难。
SecureString
类是安全的,但是你正在使用的API需要接受该类型作为参数,以便安全使用。唯一的另一种解决方案是使用本机代码,一旦您使用完数据,本机代码就可以安全地擦除数据。当攻击者能够访问您的系统时,所有赌注都将落空。这真的是你应该关注的地方吗?@Jeroenvanevel-最好从可用的方法中尽可能地使这一点变得困难。
SecureString
类是安全的,但是你正在使用的API需要接受该类型作为参数,以便安全使用。唯一的另一种解决方案是使用本机代码,一旦您使用完,它可以安全地擦除数据。需要进一步阅读以下关于
SecureString
:@NotMe是的,我认为这是搜索中加载
SecureString
的第一篇文章。但这是关于它的许多优秀文章之一。我无法在我的PCL中安装SecureString。。。它说不能安装任何想法吗?@Shiva只是用来访问本机代码。使用它,您可以在PCL项目中设置一个
接口
,并在本地项目中实现
接口
。@Shiva我相信想法是一样的,您只需要在不使用
DependencyService
的情况下执行即可。因此,您可以在PCL代码中拥有一个
static
ISecureString属性:
public static ISecureString SecureStringInstance{get;set;}
。然后在Android或iOS项目中,当应用程序启动时,将特定于平台的界面实现分配给该
静态
属性,如:
PclProj.SecureStringInstance=new SecureStringImplementation()。现在您的PCL代码可以为我们提供
PclProj.SecureStringInstance
,假设它将具有本机代码访问权限。以下内容应该需要进一步阅读
SecureString
:@NotMe是的,我想这是搜索中加载
SecureString
的第一篇文章。但这是关于它的许多优秀文章之一。我无法在我的PCL中安装SecureString。。。它说不能安装任何想法吗?@Shiva只是用来访问本机代码。使用它,您可以在PCL项目中设置一个
接口
,并在本地项目中实现
接口
。@Shiva我相信想法是一样的,您只需要在不使用
DependencyService
的情况下执行即可。因此,您可以在PCL代码中拥有一个
static
ISecureString属性:
public static ISecureString SecureStringInstance{get;set;}
。然后在Android或iOS项目中,当应用程序启动时,将特定于平台的界面实现分配给该
静态
属性,如:
PclProj.SecureStringInstance=new SecureStringImplementation()。现在,您的PCL代码可以为我们提供
PclProj.SecureStringInstance
,前提是它将具有本机代码访问权限。