0

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

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

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

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

4

1 回答 1

0

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

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

编辑:

除了加密之外,注册表听起来不适合存放这些数据。戴上我的“系统管理员帽子”,我宁愿将您的数据放在文件系统中,也不愿放在注册表中。使用注册表作为存储和转发队列机制让我大吃一惊。

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

于 2011-08-23T17:08:08.307 回答