进行InApp结算时如何保护Google Play公钥

实际上,这对于保护公共密钥有点愚蠢(那么公共密钥的定义是什么?),但是根据Google的文档:

为了保护您的公钥不受恶意用户和黑客的侵害,请勿将其作为文字字符串嵌入任何代码中。而是在运行时从片段中构造字符串,或使用位操作(例如,与其他字符串进行XOR)以隐藏实际的密钥。密钥本身不是秘密信息,但是您不想让黑客或恶意用户容易地用另一个密钥替换公共密钥。

有什么推荐的方法吗?

我知道有很多方法可以做到,我只是不想遵循过去人们处理 密码哈希 的方式(例如md5,sha1等),我想知道上述用例的最佳实践。

回答:

这里涉及很多内容:)您引用的段落后面的意思是,为了确保应用内结算的安全,您需要验证交易签名。这些签名是使用与您的开发人员帐户相关联的私钥签名的。密钥位于Google的服务器上,因此可以假设没有其他人可以用它签名数据,这是相当安全的。要验证它,您需要您的公共密钥,可以从开发者控制台复制它。如果有人在您的应用程序中替换了它,他们可能会愚弄它以接受来自未经授权的来源的应用程序内计费交易,因为如果他们植入了公钥,他们可能还会控制相应的私钥。但是,实际上,简单地在正确的位置修改您的代码以始终为或可能拥有的类似方法返回true

isLicensed()hasItem()而没有人这样做。

当然,保护密钥的最佳方法是完全不在您的应用程序中使用密钥。将所有事务验证逻辑移至您的服务器,然后使用HTTPS连接到它。正确验证证书链,以确保您正在与自己的服务器通信。否则,有人可能会混淆DNS,并欺骗您的应用程序以连接到自己的服务器。几周前宣布了针对iOS购买的类似攻击。

接下来的最好的事情就是以某种方式混淆密钥,并将其包含在您的应用程序中。这样做的好处是您不需要服务器,但是缺点是,如果某个人有足够的决心,他们就会发现它,因为他们总是可以反转应用程序的字节码。因此,最好的选择是拿出自己的原始方式来完成,而这种方式不会出现在公共论坛上:)为了使操作更困难一点,您可以在本机代码中实现验证部分,但这比较困难(但不是)不可能)进行分析。尽管如此,如上所述,在正确的位置修补字节代码比尝试替换公钥要容易得多,因此大多数破解者都会这样做。

以上是 进行InApp结算时如何保护Google Play公钥 的全部内容, 来源链接: utcz.com/qa/411527.html

回到顶部