应用内结算API(IAB版本3)安全性

时间:2014-01-23 13:12:17

标签: android in-app-purchase in-app-billing

现在我第一次添加IAB。我已经阅读了文档,下载了样本,似乎工作正常。 但是,设置问题不是我的问题我想了解Google提出的以下两项建议,以提高安全性

  • 加密公钥

如果攻击者反编译我的应用程序,他也可以删除我的加密,字符串拆分或位移。

  • 开发人员有效负载

这里也是一样的。实际上我可以像谷歌推荐的方式那样做。我的服务器上有用户ID,可以将其用于请求并在之后进行比较......但我认为在我的应用程序被反编译时,从代码中删除此逻辑非常容易。

我使用Proguard对我的代码进行了模糊处理,并且在将其上传到Google Play之前,我总是反编译我的应用程序,看它是否有效并且设置正确。这就是为什么我说这两条建议没有带来很大的安全效益。

我也知道私钥/公钥系统的工作原理。这就是为什么我可以说我的应用程序在没有反编译的情况下与“假”服务器进行通信是不可能的。如果Google不使用某种异步加密,我可能会理解为什么我必须检查响应是否来自虚假服务器......

你能帮我理解吗?

干杯, 斯蒂芬

1 个答案:

答案 0 :(得分:1)

安全性的全部意义在于对投入应用程序进行攻击并从黑客攻击中获益。如果你的应用程序售价99美分而且黑客需要3个小时来破解它,并且他需要一次又一次地破解每个新版本,那么将他的时间花在黑客上是没有意义的,尽管他在技术上可以做到这一点。只需实现尽可能多的安全性,使您的应用程序对黑客没有吸引力。

不安全存储的公钥将允许攻击者轻松地用自己的公钥替换它。如果更换了您的公钥,那么您的应用程序将成功验证攻击者服务器签署的响应。这就是为什么你需要在应用程序中查找和替换你的公钥更加困难。

开发有效负载。当攻击者试图为您的应用提供有效的已签名回复时,它用于保护您的应用免受攻击,该响应已被其他用户的另一个用户使用过去。例如,我过去购买了您应用的扩展程序,并以字节形式存储了Google Play响应。如果您的代码无法区分彼此的两个有效响应,那么我可以将此响应提供给其他用户,他们可以将其用于进一步购买。这就是Google建议添加开发有效负载的原因,您可以在有效响应返回时进行验证。在一个简单的例子中,这可以是用户的电子邮件。在更复杂的情况下,您需要一个服务器,它将为用户购买生成一个字符串并将其存储在数据库中。稍后,当响应返回时,它将再次验证生成字符串的响应。

我希望这可以让您更好地理解为什么需要这样做。