1

设想:

我可以完全控制的公开可用的 Web 服务。但我只希望这个特定的桌面应用程序(我发布的应用程序)能够访问 Web 服务。我可以在桌面客户端中存储一个秘密密码,但这很容易破解。

是否有任何已知的实现可以强制执行此操作?PKI,非对称密钥?

4

3 回答 3

3

如果公众可以访问此桌面应用程序的副本,任何优秀的逆向者都将能够破解它并“模仿”它与服务器的交易。不管你的密码学有多安全,你的应用程序加密/解密数据所需的一切都包含在二进制文件中,所以破解者只需要从中挖掘出来。

密码学的目标是在传输数据时保护数据免受“中间人”黑客的攻击,但如果您可以访问任何同行,您可以轻松破解它。

您的服务器绝不能相信来自客户端的内容。

[编辑恢复]

尽管您不能 100% 保证您的服务器的假定客户端是或不是您的应用程序或第三方制作的某些“模拟器”,但您可以使事情复杂化。这是游戏反作弊中的一种常见做法,有时会随机使客户端应用程序成为一个棘手的问题,例如“您的 main.exe 从偏移量 A 到偏移量 B 的哈希值是多少?” 或“从现在开始数据包类型 0x07 与数据包类型 0x5f 交换”。一旦检测到假货,服务器就会进入“愚蠢模式”,出现故障,并将他们的 IP/帐户列入黑名单几个小时,这样他们就无法确定他们的程序做错了什么。

如果您检测到有人正在构建模拟器,请让他们重新开始:混淆数据包类型表、加密表、更改某些数据包格式并强制您的客户端更新。你暂时不会看到饼干打扰你了……哈哈

于 2009-08-21T20:40:57.173 回答
1

WS-Security提供 X509 加密。

该实现的一部分包括仅向特定客户端提供生成的公钥的可能性。这样,只有您选择的客户端可以连接到该服务。

于 2009-08-21T20:33:06.190 回答
0

最简单的方法是使用客户端和服务器证书的消息安全性。最好的方法是在您的服务器机器中导入客户端证书,并在 app.config 文件中对客户端证书指纹进行硬编码。另一种方式是协商我以前从未尝试过的证书。

如果您使用 IIS 来托管服务,那么使用 SSL 的客户端证书是另一种选择。

WCF Security上的 MSDN 链接。

于 2009-08-22T03:19:59.653 回答