Android InApp计费 - 真正的nonces是什么?

Fen*_*res 5 android in-app-purchase nonce in-app-billing

是的,我已经阅读了所有的文档@ developer.android.com,我确实理解了一切基本的例外 - 它是什么引入的.

由于来自Google Play的所有订单回复都是由不可访问的私钥签署的,并且正在通过配对的公钥进行验证(在我的情况下在外部服务器上,因此第三人也无法访问),简直(几乎)没有办法欺骗.

所有这些nonce只是保证购买的多余方式.而且,在以下情况下,文档对情况一无所知:

  1. 我买了一件物品;
  2. 生成nonce并将其发送到Google Play;
  3. 发生了撞车事故,所以我所有已知的哨声都丢失了;
  4. 让我的应用重新启动并从Google Play获得回调;
  5. ...由于没有认出nonce,拒绝接听此电话!

在上面描述的情况下,用户支付物品并且永远不会得到它,这是可耻的.当然,我可以将nonce存储在某个文件中,并在我的应用程序返回时重新读取它,但它违反了nonce的所有原则.

恕我直言,有人刚刚说"嘿,验证过程太简单了,让我们添加一些随机性更多的东西,它会变得更酷!".有人做了.

或者,如果我错过了,你会想到其他一些用例吗?否则我将从我的代码中删除整个nonces部分.

Blu*_*ell 2

您不需要将随机数存储到“磁盘”来解决应用程序崩溃的问题。

当您的应用程序崩溃时,是的,您将丢失已知随机数列表。但是,当您的应用程序重新启动并且您收到一个随机数IN_APP_NOTIFY时,您必须执行另一个操作,GET_PURCHASE_INFORMATION当您执行此操作时,GET_PURCHASE_INFORMATION您将生成一个新的随机数并将其添加到已知随机数列表中。

您必须记住的是,随机数是每个GET_PURCHASE_INFORMATION(返回您购买的多件商品)一个随机数,而不是每个购买的商品一个随机数。

正如您所说,您已经实现了自己的方法来避免重放攻击,但是使用随机数曾经是一种安全的方法