1

我有一个看起来像这样的设置:

在此处输入图像描述

我正在使用 Windows 身份验证来加密连接。主服务是安全的,没有人可以访问它,因此可以安全地存储每个节点服务的用户名和密码,以便在它们可用时连接到它们。

主服务将机密信息发送到每个 WCF 节点服务。因为连接是加密的,我知道有人很难解密它。我遇到的问题是如何确定我连接到我的 WCF 节点服务而不是其他人?

这是一个描述我的问题的场景 假设 Tom 是一个用户,他正在使用运行 WCF 节点服务的图表左上角的笔记本电脑。WPF 客户端是管理员(图表中的底部用户),他们可以在 Tom 的计算机上执行操作。Tom 需要查看加密文件的内容。Tom 无权拥有解密该文件的密码;因此,Tom 要求管理员为他解密该文件。然后管理员将加密的密码发送到主服务,主 wcf 服务将定位汤姆的计算机并UnencryptFile(string location, string password)在汤姆的计算机上执行该方法。

我怎样才能防止汤姆获得该密码?如果他用自己的替换方法替换 WCF 节点服务,UnencryptFile(string location, string password) ... MesageBox.Show(password)他将能够获取密码。简而言之,我知道可以反编译程序,所以我不介意汤姆知道我的程序在做什么。我介意的是连接到不属于我的服务。如果 Tom 调试 WCF 节点服务,也会发生什么。是否可以调试可执行文件?如果是这种情况,那么他将能够以这种方式查看密码。

4

1 回答 1

2

不幸的是,没有办法阻止汤姆获​​取密码。最终,如果汤姆知道他在做什么,他就可以通过一种或另一种方式获得密码。一些可能性包括在密钥在内存中时执行内存转储,以及对二进制文件进行逆向工程以将其保存在您提到的某处。

执行此操作的“正确”方法是让 Tom 将文件发送给管理员或主服务,并让服务返回未加密的内容。

底线是,如果您将密钥发送给 Tom,那么无论您对您的客户做什么,如果 Tom 足够精通 RE 技术,您都无法阻止 Tom 恢复密钥。

于 2013-06-03T21:46:28.530 回答