【发布时间】:2012-02-06 09:45:45
【问题描述】:
应用内结算概览中的Security Controls 部分指示在远程服务器而不是在应用(在 Android 设备上本地运行)中执行“签名验证”:
通过执行签名验证,您可以帮助检测响应 被篡改或被欺骗的。你可以 在您的应用程序中执行此签名验证步骤;然而, 如果您的应用程序连接到安全的远程服务器,那么我们 建议您对其进行签名验证 服务器。
但是如果我在远程服务器上进行签名验证,只期望得到yes/no 或true/false 的答案,这实际上不是更容易被攻击者拦截和修改吗?
如果来自远程服务器的答案是另一个签名,那么如何在设备上本地验证第二个签名比验证第一个(市场)签名更安全?
我错过了什么?
更新:@alf 正确指出,如果服务器也负责交付购买的内容,并且在服务器上执行签名验证,那么即使攻击者破坏了应用程序,服务器也不会交付通过应用内计费购买的内容。这是微不足道的,很好理解。
我原来没有提到的是,我实际上是指服务器不传递任何内容而只是验证签名的场景,以便应用程序可以决定是否解锁某些功能。在这种情况下,远程服务器签名验证比应用内签名验证有什么优势?
【问题讨论】:
-
我还想知道在实现应用内计费以解锁功能时是否真的需要服务器签名检查。你的发现是什么?
标签: java android encryption reverse-engineering decompiling