为什么远程服务器上的签名验证比在设备上更安全?

Bil*_*Ape 5 java encryption android decompiling reverse-engineering

应用内结算概述中的安全控制部分指示在远程服务器而不是应用程序(在Android设备上本地运行)执行"签名验证":

通过执行签名验证,您可以帮助检测已被篡改或已被欺骗的响应.您可以在应用程序中执行此签名验证步骤; 但是,如果您的应用程序连接到安全的远程服务器,那么我们建议您在该服务器上执行签名验证.

但是,如果我在远程服务器上执行签名验证,只期望一个yes/notrue/false答案,这实际上是不是更容易被攻击者拦截和修改?

如果来自远程服务器的答案是另一个签名,那么如何在设备上本地验证第二个签名比第一个(市场)签名更安全?

我错过了什么?

更新: @alf正确地指出,如果服务器还负责提供购买的内容并且在服务器上执行签名验证,那么即使攻击者破坏了应用程序,服务器也不会提供通过应用程序内计费购买的内容.这是微不足道的,也是很好理解的.

我最初没有提到的是,我实际上指的是服务器不提供任何内容而只是验证签名的场景,以便应用程序可以决定是否解锁某些功能.在这种情况下,远程服务器签名验证优于应用程序内的优势是什么?

Nik*_*kov 3

这实际上不是更容易被攻击者拦截和修改吗?

如果您使用 SSL 与服务器通信,它们无法拦截和更改回复。SSL 还验证服务器的身份,因此您确信您正在与自己的服务器而不是攻击者的服务器通信。

至于为什么要在服务器上进行签名验证,原始文档注释的想法是,如果在客户端上进行签名验证,则需要将公钥存储在应用程序内部。攻击者可能可以用自己的密钥交换密钥,并且攻击者生成的签名将验证正确。您可以通过在服务器上进行验证来避免这种情况。然而,现实生活中的破解工具(例如AntiLVL)只会查找返回的字节码true/false并将其修改为始终返回true