5

はい、私はすべてのドキュメント@developer.android.comを読みましたが、1つの基本的な例外、つまり導入された目的を除いて、すべてを理解しています。

Google Playからのすべての注文応答は、誰もがアクセスできない秘密鍵によって署名され、ペアの公開鍵(私の場合は外部サーバー上にあるため、第三者もアクセスできない)によって検証されているため、単純に(ほとんど)方法がありません。なりすまし。

これらのナンスはすべて、購入を保護するための冗長な方法にすぎません。さらに、次の場合、ドキュメントは状況について何も述べていません。

  1. アイテムを購入します。
  2. ノンスを生成してGooglePlayに送信します。
  3. クラッシュすると、私の既知のナンスはすべて失われます。
  4. アプリを再起動して、GooglePlayからコールバックを受け取ります。
  5. ...そして、ナンスを認識しなかったため、この呼び出しを拒否します!

上記の状況では、ユーザーはアイテムの代金を支払い、決してそれを手に入れません。それは恥ずべきことです。もちろん、ナンスをいくつかのファイルに保存して、アプリが戻ってきたときにそれを再読み込みすることはできますが、それはノンスのすべての原則に違反しています。

IMHOの誰かが、「検証プロセスが単純すぎるので、ランダムに何かを追加しましょう。もっとクールになります!」と言ったばかりです。だから誰かがやった。

または、他のユースケースに心を開いていただけませんか。それ以外の場合は、コードからナンス部分全体を削除しています。

4

4 に答える 4

2

アプリのクラッシュを考慮して、ナンスを「ディスクに」保存する必要はありません。

アプリがクラッシュすると、既知のナンスのリストが失われます。ただし、アプリが再起動して受け取ったIN_APP_NOTIFY場合は、別の操作GET_PURCHASE_INFORMATIONを行う必要があります。これGET_PURCHASE_INFORMATIONを行うと、新しいナンスが生成され、既知のナンスのリストに追加されます。

覚えておかなければならないのは、ナンスはGET_PURCHASE_INFORMATION(複数の購入したアイテムを返す)1つにつき1つであり、購入したアイテムごとに1つのナンスではないということです。

あなたが言ったように、あなたはリプレイアタックを避けるためにあなた自身の方法を実装しました、しかしナンスを使うことはかつてそのような安全な方法です

于 2012-08-16T12:56:29.890 に答える
0

送信する前に、生成されたナンスを保存する必要があります。Androidアプリはいつでもクラッシュまたはシャットダウンする可能性があるため、通常はすべてを保存する必要があります。

ノンスを使用する理由は、リプレイ攻撃を防ぐためです。ノンスを使う必要があるかどうか答える資格はありませんが、理由があると思います。

于 2012-05-09T14:06:30.470 に答える
0

ユーザーが100ドルでアイテムを購入するとします。利用可能な支払いデータがあることがアプリに通知され、アプリはデータを要求し、AppStoreはPURCHASE_STATE_CHANGEDで応答します。ユーザーはAppStoreからのメッセージ(!)を記録し、保存し続けます。

後で、ユーザーはアプリへの通知を偽造して、支払いデータが利用可能であることを通知します(この通知は署名されていないため、誰でも偽造できます)。アプリは、「ああ、ちょっと、たぶん、クラッシュして、ユーザーが行ったばかりの購入に関するすべての情報を失ったのかもしれません!?AppStoreの内容を見てみましょう」と考えています。そのため、アプリストアにデータを要求します。ユーザーはそのリクエストを中断し、以前に録音したメッセージをアプリに送信します。アプリはメッセージを確認し、検証して、有効であると判断します(署名されているため)。したがって、アプリはあなたに別の貴重な100ドルのアイテムを提供します。そしてもう一つ。ユーザーが録音されたメッセージを再生するのと同じ頻度で。したがって、リプレイアタックと呼ばれます。

ただし、そのような攻撃を防ぐものが1つあります。それは、ナンスです。アプリが支払いデータのリクエストでナンスを送信した場合、PURCHASE_STATE_CHANGED応答で同じナンスを受信することを期待しています。ナンスは1回しか使用されないため、以前に録音されたメッセージはリクエストで使用されたナンスと一致しないため、再生できません。

于 2012-06-25T13:59:54.340 に答える
0

「nonceは、* nixシステムがパスワードを保存する方法と同様に、トランザクションのソルトのように機能します。nonceは、キーで暗号化された値にエントロピーを追加するために使用され、2つのトランザクションが暗号化されて結果として同じ署名、および他の同様の暗号化攻撃。」

quesoによる答えを参照してください

于 2012-07-22T10:12:04.223 に答える