在exe和Service之间交换安全数据

时间:2011-08-23 15:51:31

标签: windows windows-services winapi data-security

我有一个Windows exe,必须将一些安全数据写入HKEY_LOCAL_MACHINE(H​​KLM)。我还有一个运行为NetworkService帐户的服务,该帐户必须读取该安全数据。请注意,exe和service作为不同的用户运行。

这里的问题在于保护数据。我尝试使用CryptProtectData,但问题是服务无法解密,因为数据未使用NetworkService帐户加密。我不想在调用CryptProtectData时使用CRYPTPROTECT_LOCAL_MACHINE标志,因为任何用户都可以解密它并且基本上使它不安全。

我猜这是一个常见的用例,但无法找到任何解决方案。有什么想法吗?

仅供参考,我使用visual C ++编写exe和服务。

1 个答案:

答案 0 :(得分:0)

您正在尝试将注册表用作进程间通信(IPC)机制,并且您发现它不是很优雅。

您正在寻找的更好的架构是在服务中完全处理加密/解密,并使用真正的 IPC机制(TCP套接字,邮件槽等)来传输数据从EXE到加密服务。

编辑:

注册表听起来不是这个数据的正确位置,除了加密。戴上我的“系统管理员帽子”我宁愿在filesytem中拥有你的数据而不是在注册表中。使用注册表作为存储转发队列机制可以为我提供帮助。

就密码体系结构而言,我认为您最好使用不对称加密服务。让EXE使用服务的公钥加密数据。该服务可以使用其私钥解密数据。