.NET3.5,在进程之间传递字符串的最安全的方法
我希望能够将SecureString(缓存的密码短语)传递给C#(.NET3.5)中的子进程,但我不知道最安全的方法是什么。例如,如果我将SecureString转换回常规字符串,并将其作为命令行参数传递,那么我认为该值可能倾向于磁盘分页——这会使明文触及文件系统并破坏使用SecureString的意义.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的IntPtr?我可以使用命名管道而不增加风险吗?除非您的子进程也了解如何使用SecureString,否则我认为没有直接传递它的方法。例如,Process.Start()方法有两个重载,它们接受一个SecureString,因此嗅探实际字符串值的风险最小化(这仍然是可能的,因为在这个过程中,实际值必须被检索/解组)
我认为这在很大程度上取决于子进程是什么以及它是如何启动的。通常,在担心更多外来攻击之前,您应该定义您的威胁模型。在本例中:您是否担心有人关闭计算机并对硬盘进行法医分析?应用程序内存也可以调出,因此一个进程的内存中有应用程序内存这一简单事实,使得它有可能在交换文件中结束。冬眠呢?在休眠期间,内存的全部内容都会写入硬盘(包括SecureString,大概还有加密密钥!)。如果攻击者在系统运行时可以访问系统,并可以搜索应用程序的内存,该怎么办 一般来说,客户端安全性是非常棘手的,除非您有专用硬件(如TPM芯片),否则几乎不可能做到正确。两种解决办法是:
- 如果您只需要测试两个字符串之间的相等性(即:此字符串是否与我之前使用的字符串相同),请仅存储其(salt)散列值
- 让用户在第二次需要时重新输入信息(不是很方便,但安全性和方便性是对立的)