Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET3.5,在进程之间传递字符串的最安全的方法_.net_Security_.net 3.5_Ipc - Fatal编程技术网

.NET3.5,在进程之间传递字符串的最安全的方法

.NET3.5,在进程之间传递字符串的最安全的方法,.net,security,.net-3.5,ipc,.net,Security,.net 3.5,Ipc,我希望能够将SecureString(缓存的密码短语)传递给C#(.NET3.5)中的子进程,但我不知道最安全的方法是什么。例如,如果我将SecureString转换回常规字符串,并将其作为命令行参数传递,那么我认为该值可能倾向于磁盘分页——这会使明文触及文件系统并破坏使用SecureString的意义 是否可以改为传递SecureString的IntPtr?我可以使用命名管道而不增加风险吗?除非您的子进程也了解如何使用SecureString,否则我认为没有直接传递它的方法。例如,Proces

我希望能够将SecureString(缓存的密码短语)传递给C#(.NET3.5)中的子进程,但我不知道最安全的方法是什么。例如,如果我将SecureString转换回常规字符串,并将其作为命令行参数传递,那么我认为该值可能倾向于磁盘分页——这会使明文触及文件系统并破坏使用SecureString的意义


是否可以改为传递SecureString的IntPtr?我可以使用命名管道而不增加风险吗?

除非您的子进程也了解如何使用SecureString,否则我认为没有直接传递它的方法。例如,Process.Start()方法有两个重载,它们接受一个SecureString,因此嗅探实际字符串值的风险最小化(这仍然是可能的,因为在这个过程中,实际值必须被检索/解组)


我认为这在很大程度上取决于子进程是什么以及它是如何启动的。

通常,在担心更多外来攻击之前,您应该定义您的威胁模型。在本例中:您是否担心有人关闭计算机并对硬盘进行法医分析?应用程序内存也可以调出,因此一个进程的内存中有应用程序内存这一简单事实,使得它有可能在交换文件中结束。冬眠呢?在休眠期间,内存的全部内容都会写入硬盘(包括SecureString,大概还有加密密钥!)。如果攻击者在系统运行时可以访问系统,并可以搜索应用程序的内存,该怎么办

一般来说,客户端安全性是非常棘手的,除非您有专用硬件(如TPM芯片),否则几乎不可能做到正确。两种解决办法是:

  • 如果您只需要测试两个字符串之间的相等性(即:此字符串是否与我之前使用的字符串相同),请仅存储其(salt)散列值
  • 让用户在第二次需要时重新输入信息(不是很方便,但安全性和方便性是对立的)

Scott,子进程是我编写的另一个.Net 3.5程序,因此可以选择让它使用几乎任何机制。Process.Start()的SecureString参数似乎是作为另一个用户启动进程时的密码。它没有通过,或者进程本身可以访问,它被操作系统用来登录到备用用户帐户。