【问题标题】:Alternative ways of sending data securely over the public internet通过公共互联网安全发送数据的替代方法
【发布时间】:2012-01-17 03:24:54
【问题描述】:

我正在研究一些用于保护来自我们的移动应用程序的流量的选项,该应用程序目前正在通过 http 请求向我们的服务器发送未加密的数据。

最明显的选择是使用 HTTPS/SSL,但移动开发人员不愿意这样做,因为额外的网络流量(SSL 握手)和手机上的额外 CPU 负载。

我能找到的唯一可行的选择是使用预共享密钥来绕过握手的开销。因此,使用标准 HTTP POST 时,我们将发送一个明文 API 密钥来识别移动应用程序,可能作为 HTTP 标头,然后使用 PSK 加密 POST 数据并将其发送到服务器。服务器会从 API 密钥中查找 PSK,解密 POST,可能会进行一些验证以确保它看起来像是好的数据,然后将其传递给我们 Web 应用程序中的适当控制器。

这甚至是一个合理的选择吗?是否有更好的(或任何非 SSL)替代方案?

请注意,移动应用程序适用于黑莓和 iPhone,服务器端是 LAMP[php]。

【问题讨论】:

  • 不使用 SSL 是愚蠢的。
  • 所以你不想使用 SSL,而是自己实现?

标签: php http encryption ssl https


【解决方案1】:

嗯,

您的建议似乎大致复制了 SSL。我不是指握手例程、证书等,但最后,您仍然要来回加密每个请求,只使用 PSK,而不是使用 SSL 握手创建那种 PSK。这可能对您的健康有害。

这真的取决于你想要做什么。如果您只在 xx 请求中执行此操作,则在安全性方面可以,在性能方面会更好。或者它可能非常危险。假设我抓住了那个 API 密钥,伪造或只是稍微修改了请求并将其发送给你。然后怎样呢?

我看到了开销的重点(如果你仍然加密你的数据,你会消除这个吗?被广泛接受和证明的标准。 SSL 并不能解决所有问题,但这里可能存在中间人攻击。

底线:重新实现或复制 SSL 将是困难、耗时且成本高昂的,更不用说您可能不会在第一次尝试时确保它的安全性。不要去那里,使用 SSL。这正是你所需要的

编辑:此链接可能对 SSL 性能有用:A Study of the Performance of SSL on PDAs。其中,你会发现最昂贵的操作,握手,通常不是每次都执行。

【讨论】:

  • 感谢链接中的其他信息 - 我希望这些信息足以阻止其他开发人员使用非 SSL 解决方案。
【解决方案2】:

听起来您正在尝试实施公钥/私钥加密。

我最好的建议是使用 SSL 或至少使用 OpenSSL libraries。自己实现它会困难得多,因为您必须编写自己的方法来处理非常大的整数数学。

【讨论】:

    【解决方案3】:

    a very similar question,前几天迁移到Security.SE。

    • 是什么让您认为使用 SSL/TLS 获得的握手开销会超过您自己的协议的开销?
    • 您可以使用PSK with TLS
    • 您的环境是否适合使用预共享密钥? (我的意思是,您能否轻松地在您的移动应用程序的每个实例中秘密地共享您的密钥)。

    在尝试提出 SSL/TLS 的替代方案之前,请测量实际产生的开销,并考虑您的新解决方案是否会遭受同样的开销。总的来说,可能不会,而且您不太可能想出像 SSL/TLS 一样安全的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 2013-02-24
      相关资源
      最近更新 更多