0

这是一种常见且备受推崇的模式吗?

次要问题:适合我的环境的最佳加密标准?

上下文:我有一个将 JSON 数据发送到 RESTFul 服务的 Windows 服务。在那个 JSON 有效负载中是身份验证凭据(密码和用户名),但我仍然必须考虑到一个注册用户篡改了有效负载的其他“数据驱动”部分。

我的解决方案:使用源代码中的私钥/主密钥加密有效负载,尽我所能混淆。这将验证客户端(除非主密钥被破坏)。

编辑:我的服务收集互联网延迟数据。我不想收集手工编辑的数据值。我意识到,由于网络性能/延迟的易变性/不断变化的性质,用户可以简单地拔掉他们的连接或将他们的连接隐藏起来,以至于我的客户没有足够的带宽/资源来完成这项工作。这些是我无法用我所拥有的知识和时间实际解释的事情。但是,我确实认为我可以保护服务免受手动编辑的有效载荷。

4

2 回答 2

1

如果 RESTFul 服务是您自己的,您可以在其上启用 windows 身份验证(或使用 windows auth 部署它的另一个实例),然后对用户进行身份验证,最好是他们属于某个角色(或组)。这样你就没有证书或密钥可以搞乱,而且很安全。

于 2013-06-02T01:48:57.530 回答
1

我想做的第一件事是澄清你的期望。

数据有两个方面对您很重要:

  • 身份验证- 发送给您的数据是从授权的、未经修改的程序发送的
  • 完整性- 发送给您的数据在传输过程中没有被修改。

完整性问题更容易解决,只需让您的程序使用 SSL 连接到服务器即可。您甚至不需要使用由普通 CA 签名的证书,实际上最好不要使用!您可以为您的应用程序创建一个 CA,然后自己签署将在具有该私有 CA 的网络服务器上运行的证书。如果这样做,您可以将 CA 的公钥硬编码到程序中,并且只允许它连接到具有由您的私有 CA 签名的证书的服务器。这样做将有助于防止有人设置 MITM SSL 代理(例如Fiddler)在传输数据时对其进行编辑。

身份验证是一个更难解决的问题。您需要防止虚假客户端或修改过的真实客户端连接到您的服务器并发送虚假数据,这不是一个容易解决的问题。如果您的软件在攻击者可以运行任意代码的设备上运行,则问题无法解决。不可能的原因是用户可以附加调试器并逐步执行您的代码并复制您的过程。“解决”它的唯一方法是在不允许用户运行任何东西的东西上运行你的程序,并且任何运行的软件都必须首先由第 3 方审查(如未越狱的电话)。

然而,你可以“缓解”问题,你不需要让它变得不可能,只要足够困难,任何恶意用户都不会觉得克服你设置的障碍是值得的。

您可以做一些事情来使攻击者更难:

  • 所有消息都使用您竭尽全力隐藏的密钥进行签名。
  • 在代码上使用代码混淆器以使其更难进行逆向工程。
  • 在您的 SSL 连接中使用客户端证书,并让您的服务器拒绝任何没有它们的连接。
  • 比你更有经验的顾问让你的代码更难逆向工程。

还有很多事情可以做,但这就是我想了几分钟的想法。

因此,将这一切归结为,如果您不太担心,只需使用沼泽标准 SSL,这可能会阻止 75% 的篡改。如果您更担心,请使用自定义 CA 技巧来阻止任何 SSL MITM 攻击,以使您获得高达 80% 的攻击。但是,如果你想超过 80%,它会成倍地难以做到,并且在某些时候你需要停下来问问自己“我投入的时间/精力/金钱是不是为了阻止更多的人向我发送这些糟糕的数据值得吗?或者我可以忍受 100 个人中的 20 个人向我发送不良数据,那么 10、5、1 呢

于 2013-06-02T04:39:15.213 回答