我正在验证来自 Android inapp 购买的签名字符串,我知道已经编写了一个基于服务器的独立验证来检查该字符串是否使用我的公钥和在 JSON 响应中发送的私钥签名,这很好。在我缺乏知识的地方,如果人们可以访问我的公钥,他们是否能够使用私钥签署字符串并向我的外部服务器发送响应,这将成功验证?
我可能遗漏了一些东西,但是在我的 iPhone 应用程序上,我联系了 Apple,他们联系了应用程序,我联系了我的服务器并获得了苹果的响应,它联系了苹果并独立验证了响应,我对我的 WP7 应用程序也这样做了 Paypal 和谷歌,我没有连接到谷歌来验证字符串,我只是检查字符串是否用我的 key 签名,这真的足够了吗?
谢谢
最佳答案
简而言之,没有。如果你有时间,你可以阅读 RSA,但非对称算法的全部要点(你加密/签名的 key 与你解密/验证的 key 不同),几乎不可能找出另一半如果你只有一把 key 。因此,如果有人拥有您的公钥,您可以非常确定他们无法生成私钥。或者,如果他们只是生成一个新 key ,当您验证签名时,您将收到验证错误。
如果您的 nonce 是真正随机的并且真的只使用一次,它们也不能重播相同的消息,所以您应该是相当安全的。 (假设没有实现问题)
你应该更担心的是人们使用字节码修补工具来绕过整个验证过程,只是从 isLicensed()
方法返回 true。
关于android - 为 Google Android 应用内购买伪造签名字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6981980/