Play Integrity API の概要

Play Integrity API は、不正行為や不正アクセスなどの潜在的リスクのある不正なやり取りからアプリやゲームを保護することで、攻撃を回避し悪用を減らすための適切な措置をデベロッパーが取れるようにします。

Android 4.4(API レベル 19)以降を搭載しているデバイスでアプリが使用されている場合、Play Integrity API は、次の情報を含む署名付きの暗号化されたレスポンスを提供します。

  • 正規のアプリバイナリ: Google Play で認識されている、改変されていないバイナリとやり取りしているかどうかを判断します。
  • 正規の Play インストール: 現在のユーザー アカウントにライセンスが付与されているかどうか(つまりユーザーが Google Play でアプリまたはゲームのインストールや支払いを行ったかどうか)を判断します。
  • 正規の Android デバイス: Google Play 開発者サービスを搭載した正規の Android デバイスでアプリが動作しているかどうかを示します。

利用規約

Play Integrity API にアクセスするか、またはこれを使用すると、Play Core ソフトウェア開発キット利用規約に同意したことになります。適用されるすべての利用規約とポリシーを確認し、理解したうえで API にアクセスしてください。

前提条件

Play Integrity API をアプリに統合する手順は次のとおりです。

セキュリティ上の考慮事項

Play Integrity API はセキュリティを強化し、改ざんから保護しますが、このセクションに記載されているおすすめの方法に沿うことで、アプリに最大の価値がもたらされます。

不正使用対策戦略を持つ

Play Integrity API は、不正使用対策戦略の一環として他のシグナルと併用するのに適しており、それだけを不正使用対策メカニズムとして使用するものではありません。この API は、アプリに適した他のセキュリティに関するおすすめの方法と組み合わせて使用してください。

完全性トークンを頻繁に取得しない

この API の呼び出しは主に、サービスへのログインやマルチプレーヤー サーバーへの参加など、ユーザー エクスペリエンスに不可欠な、価値が高く、繰り返し発生しないアクションを保護するために行う必要があります。

1 日のうちに高価値のアクションを複数回行うユーザーには複数回の呼び出しが必要になりますが、アクティブ ユーザー 1 人あたりの呼び出し回数は、平均して 1 日に 1 回が妥当です。

ノンスを注意深く生成する

ノンスは一意で、攻撃者が予測できないものにします。

安全なサーバー環境を使用する

復号と検証はすべて、安全なサーバー環境内で行います。クライアント アプリがセキュリティの詳細情報を公開すると、攻撃者がこのような詳細情報を APK やリポジトリから抽出し、削除するおそれがあります。

サーバーからアプリに複数の決定を送信する

サーバーからアプリに、成功または失敗のレスポンスを 1 つ送信するのではなく、多数の決定結果とシグナルを送信して複製を困難にすることをおすすめします。たとえば、「許可」、「制限付きで許可」、「reCAPTCHA 処理後に制限付きで許可」、「拒否」のような一連の関連レスポンスを使用します。

階層型の適用戦略を持つ

Google Play Console では、追加のデバイスラベルを受け取るように設定することで、複数の階層で適用される不正使用対策戦略を構築できます。追加のラベルを受け取るように設定すると、それぞれのラベル基準が満たされた場合、同じデバイスに対する複数のラベルが完全性レスポンスに含まれるようになります。そのため、可能性のあるレスポンスの範囲に応じて異なる動作をするようにバックエンド サーバーを準備できます。

たとえば、MEETS_BASIC_INTEGRITYMEETS_DEVICE_INTEGRITYMEETS_STRONG_INTEGRITY を返すデバイスは、MEETS_BASIC_INTEGRITY しか返さないデバイスよりも信頼性が高く、それに応じてサーバーの応答方法を調整できます。これは、ユーザー アカウントが LICENSED であるか UNLICENSED であるかに応じて、さまざまなアクションと組み合わせることができます。

指数バックオフで再試行する

インターネット接続が不安定、デバイスの負荷が高いなどの環境条件下では、デバイスの完全性チェックが失敗する場合があります。これにより、本来は信頼性が高いデバイスのラベルが生成されないことがあります。こうしたシナリオの影響を軽減するには、指数バックオフによる再試行オプションを含めるようにしてください。

API の使用方法の概要

図 1. Play Integrity API の概要を示すシーケンス図。

アプリまたはゲームが Play Integrity API を使用する際の流れは次のとおりです。

  1. アプリのサーバーサイド バックエンドが、一意のノンスを生成してクライアントサイド ロジックに送信します。以下、このロジックを「アプリ」と呼びます。
  2. アプリが Play Integrity API を呼び出し、ノンスを渡します。
  3. アプリが、Play Integrity API から署名付きの暗号化された判定結果を受け取ります。
  4. アプリが、署名付きの暗号化された判定結果をアプリのバックエンドに渡します。
  5. アプリのバックエンドが判定結果を Play のサーバーに送信します。Play のサーバーが判定結果を復号して検証し、その結果をアプリのバックエンドに渡します。
  6. アプリのバックエンドが、トークン ペイロードに含まれるシグナルに基づいて処理方法を決定します。
  7. アプリのバックエンドが決定結果をアプリに送信します。

API の使用量ティア

API のリクエスト回数には、呼び出し元アプリに割り当てられた使用量ティアに基づいて、アプリごとに 1 日あたりの最大数が適用されます。次の表に、各種のティアを示します。

表 1. Play Integrity API の使用量ティア
使用量ティア 1 日あたりの許容される API 呼び出し回数 条件
標準 最大 10,000 どの配信チャネルのアプリでも利用可能
10,000 超 - 上限は承認が必要 再試行を含む API ロジックを正しく実装する必要がある
Google Play だけでなく、あらゆる配信チャネルのアプリで利用可能

Google Play と他の配信チャネルでパッケージ名が同じであれば、API の使用量に関して同一のアプリとしてカウントされます。パッケージ名の異なる複数のアプリに対して、1 つの Google Cloud プロジェクト ID を使用できます。その場合、API の使用量に関しては同一のアプリとしてカウントされます。

使用量ティアを表示する

Play Integrity API を操作する頻度を評価できるようにするために、Google Play Console にはアプリの使用量ティアが表示されます。この使用量ティアを表示する手順は次のとおりです。

  1. Google Play Console にログインします。
  2. Play Integrity API を使用しているアプリを選択します。
  3. 左側のメニューの [リリース] セクションで、[設定] > [アプリの完全性] に移動します。
  4. [Integrity API] タブの [API の設定] セクションで、[API 使用量ティア] プロパティを探します。このプロパティの値が、API の使用量ティアを示します。

使用量ティアを変更する

アプリの使用量ティアの変更をリクエストするには、Google Play Console からデベロッパー サポートにお問い合わせください。