如何在Windows中的进程之间传输敏感数据?

我想将用户名和密码信息从一个进程传输到另一个进程在Windows上运行在同一台服务器上。 以安全的方式实现这一转移的最佳方法是什么? 一种简单的方法是将密码复制到文件中,然后从文件中读取其他进程,然后在读取文件后删除该文件。 虽然这很简单,但是我担心它是否安全,尽pipe它仍然有可能访问这个文件,尽pipe它只能在短时间内存在,如果另一个文件也可能被忽略处理错误或崩溃。 像套接字和命名pipe道这样的IPC似乎是对这个问题的矫枉过正。 我更倾向于使用内存映射文件,如下面的链接中所介绍的那样,它讨论跨进程共享内存。 这是正确的方法吗? 另外,在释放/擦除之前用虚拟数据填充内存是否是一个好主意,以防止胭脂进程从该内存位置清除数据?

http://msdn.microsoft.com/en-us/library/aa366551(VS.85).aspx

RPC是你的朋友(我不会使用命名管道来传输安全数据,因为它们有一些严重的问题(因为它们在全局命名空间中运行,因此容易受到蹲伏的攻击))。

由于数据没有通过网络传递,所以加密并不像有些人所描述的那么重要。 而是让一个进程实现一个RPC服务器,并将另一端绑定到该服务器上,使用凭证发出RPC调用并销毁绑定句柄 – 这应该拆除中间数据结构。

不要忘了在使用完内存之后安全地清零内存(否则可能会持久化到磁盘)。

如果您想要使用加密,请使用CryptProtectMemory,它将以可用于IPC的方式加密数据。

使用一些IPC(1)不支持磁盘,(2)支持ACL。

这似乎表明命名管道。

或者DCOM和WCF都支持内容加密。