Android 13 以降のデバイスでの判定結果の改善

Google は先日、Google Play Integrity API の判定を強化し、高速化、攻撃に対する耐性の向上、ユーザーのプライバシーの強化など、セキュリティの改善を行ったことを発表しました。

変更の概要

変更点の詳細な概要とよくある質問については、このドキュメントの後半で説明します。2025 年 5 月に判決が次のように変更されました。

内容 変更点 推定される影響* どのデバイス
Play Integrity API リクエストを行うすべてのデベロッパーに影響する変更
デバイスの判定結果のレスポンス: meets-device-integrity ハードウェアでバックアップされた、肯定的な確認付きブートの判定が必要です Android 13 以降のデバイス(約 0.4%)では、Play Integrity API ですでにハードウェア格納型のセキュリティ シグナルが使用されているため、影響は最小限です。 Android 13 以降
アプリの完全性のレスポンス: アプリの認識の判定結果 変更なし 影響は最小限で、デバイスの判定の変化(約 0.4%)が反映されます。 Android 13 以降
アカウントの詳細情報のレスポンス: Google Play ライセンスの判定 リクエスト元のアプリが Google Play によってインストールまたは更新されている必要がある ライセンスされた回答のわずかな減少(約 2.5%) Android 6 以降
Google Play Console デベロッパーと Google Play SDK Console デベロッパーがオプション機能を使用している場合にのみ影響する変更
デバイスの判定結果のレスポンス: meets-basic-integrity Android プラットフォーム キー構成証明が必要ですが、ブート状態は確認済みでも未確認でも構いません 基本のレスポンスがわずかに減少(約 0.4%) Android 13 以降
デバイスの判定レスポンス: meets-strong-integrity 過去 1 年以内にセキュリティ アップデートが適用されている必要がある 強い反応の減少(約 14.5%) Android 13 以降
すべてのオプション シグナル(デバイス属性を除く)** リクエスト元のアプリが Google Play によってインストールまたは更新されている必要がある オプションのシグナルを含むレスポンスの割合が減少(約 7%) Android 13 以降

*前述の推定影響率はいずれも平均値に基づいており、インストール ベースに応じて変化率が小さくなったり大きくなったりすることがあります。

**省略可能なシグナル(デバイス属性を除く)は、meets-basic-integritymeets-strong-integrity、最近のデバイス アクティビティ、デバイスのリコール(ベータ版)、Google Play プロテクトのステータス、アプリのアクセス リスクです。

よくある質問

概要

Play Integrity API とは何ですか?

Play Integrity API は、デバイス、アプリ、ユーザーに関する情報を取得して、ユーザーのアプリ環境の信頼性を評価するのに役立ちます。これにより、潜在的な不正使用や攻撃を検出し、対応することができます。

Play Integrity API はどのようなシグナルを提供しますか?

Play Integrity API には、リクエスト元のアプリの ID、リクエスト元のアプリが Google Play によってインストールされたかどうか、デバイスが正規の認定済み Android デバイスかどうかに関する情報が含まれます。これらのシグナルはデフォルトで提供されます。アプリのバックエンド サーバーでこれらのシグナルを読み取り、アプリがどのように対応するかを決定できます。Google Play デベロッパーは、Google Play のインストールで追加のシグナルを受け取るようにオプトインして、さらに多くの情報を確認できます。

Android プラットフォーム鍵構成証明とは

Android プラットフォーム キーの構成証明を使用すると、アプリはデバイスの状態を検証し、ハードウェア格納型のブート完全性の強力なシグナルを取得できます。デバイスのハードウェア格納型キーストアで Google がプロビジョニングした鍵に依存します。Play Integrity API はすでに、一部のデバイスでキー構成証明を使用してハードウェア格納型のセキュリティ シグナルを取得していますが、今後は Android 13 以降を搭載するすべてのデバイスで、より深く統合されるようになります。

判定の変更

Android 13 以降のデバイスの Play Integrity API の判定結果にどのような変更が加えられましたか?

Play Integrity API では、すべての完全性判定でハードウェア格納型のセキュリティ シグナルが必要になりました。

  • meets-device-integrity デバイス認識の判定は、アプリが実行されているデバイスが本物の認定済み Android デバイスであることを示します。この判定では、デバイスのブートローダーがロックされ、読み込まれた Android OS が認定デバイス メーカーのイメージであることが求められます。
  • meets-strong-integrity デバイス認識判定は、最近のセキュリティ アップデートが適用された正規の認定済み Android デバイスであることを示します。この判定では、Android OS パーティション パッチやベンダー パーティション パッチなど、デバイスのすべてのパーティションについて、過去 1 年間の meets-device-integrity とセキュリティ アップデートが求められます。この条件は今後変更される可能性があります。
  • meets-basic-integrity デバイス認識の判定は、物理的な Android 搭載デバイスでチェックが行われたことを示します。デバイスのブートローダーはロックまたはロック解除が可能で、起動状態は確認済みまたは未確認にできます。認定を受けていない場合、Google はセキュリティ、プライバシー、アプリの互換性に関する保証を提供できず、デバイスが Android の仮想インスタンスなどのプロキシとして機能していないことを保証できません。これは、ルート権限のあるデバイスにもキー構成証明を持たせることで meets-basic-integrity を返せるようになることも意味します。

これらの変更は、PC 版 Google Play Games の Play Integrity API には影響しません。引き続き meets-virtual-integrity が返されます。

Android 13 以降のデバイスで Play Integrity API の判定結果が変更されたのはなぜですか?

Android 12 以前では、Google Play Integrity API はハードウェア格納型のセキュリティ シグナルを部分的に使用していました。Android 13 以降でハードウェア格納型のセキュリティを必須とすることで、Play Integrity API の判定は攻撃者に対する耐性が高まり、アプリのパフォーマンスが向上し、ユーザーのプライバシーが強化されます。Android 13 以降を搭載したデバイスでは、デベロッパーは次の改善を期待できます。

  • Google サーバーでデフォルトの判定を生成するために収集して評価する必要があるデバイス シグナルが約 90% 削減されます。オプションのシグナルでは、引き続き追加のシグナルを収集する必要があります。
  • 最悪のケースの標準リクエストで最大 80%、デフォルトの判定を取得するすべてのクラシック リクエストで最大 80% の判定レイテンシの改善。オプションのシグナルを使用すると、レイテンシが増加する可能性があります。
  • モバイル、タブレット、折りたたみ式デバイス、テレビ、自動車、Wear OS、ChromeOS など、すべての Android フォーム ファクタで一貫したレベルの信頼性とサポートを提供し、主要な認証に対応しています。
  • デバイス認識の判定における各デバイスラベル(meets-strong-integritymeets-device-integritymeets-basic-integrity)の差別化を強化。

PC 版 Google Play Games の Play Integrity API の判定は変更されず、Android 12 以前と Android 13 以降で同じになります。

完全性判定で Android SDK バージョンを考慮するように、アプリのバックエンド ロジックを更新するにはどうすればよいですか?

Android SDK バージョンに基づいてアプリのバックエンド サーバーで異なるロジックを使用する場合は、判定結果の新しいデバイス属性フィールドを使用できます。以下に例を示します。

Kotlin

val deviceIntegrity =
  JSONObject(payload).getJSONObject("deviceIntegrity")
val sdkVersion =
  if (deviceIntegrity.has("deviceAttributes")) {
    deviceIntegrity.getJSONObject("deviceAttributes").getInt("sdkVersion")
  } else {
    0
  }

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

Java

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
int sdkVersion =
  deviceIntegrity.has("deviceAttributes")
    ? deviceIntegrity.getJSONArray("deviceAttributes").getInt("sdkVersion")
    : 0;

if (sdkVersion >= 30) {
  // Provide Android R+ specific experience to the user.
}

古い meets-strong-integrity ラベル定義をすべての Android SDK バージョンで使用するにはどうすればよいですか?

これを行うには、Android SDK バージョンを含む判定結果の新しいデバイス属性フィールドを使用して、Android 13 より前のデバイスの場合は meets-strong-integrity を、Android 13 以降のデバイスの場合は meets-device-integrity を使用するようにアプリのバックエンド ロジックを更新します。以下に例を示します。

Kotlin

val deviceRecognitionVerdict =
  if (deviceIntegrity.has("deviceRecognitionVerdict")) {
    deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
  } else {
    ""
  }

val deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

Java

JSONObject deviceIntegrity =
  new JSONObject(payload).getJSONObject("deviceIntegrity");
String deviceRecognitionVerdict =
  deviceIntegrity.has("deviceRecognitionVerdict")
    ? deviceIntegrity.getJSONArray("deviceRecognitionVerdict").toString()
    : "";

String deviceIntegrityToCheckFor =
  sdkVersion < 33 ? "MEETS_STRONG_INTEGRITY" : "MEETS_DEVICE_INTEGRITY";

if (deviceRecognitionVerdict.contains(deviceIntegrityToCheckFor)) {
  // Looks good!
}

ハードウェアでバックアップされたシグナルでもあるため、デバイス属性フィールドは Android 13 以降を搭載したデバイスで最も信頼性が高くなります。

他にどのような判定の変更が行われましたか?

Google は、Play Integrity API の既存のシグナルの信頼性を高めるために継続的に投資しており、デベロッパーが新たな脅威や新しいユースケースに対処できるよう、新機能を定期的にリリースしています。その他の判定の改善点は次のとおりです。

  • Play ライセンス付きレスポンス: Play ライセンス付きレスポンスを返すために、Play Integrity API では、リクエストするアプリが Google Play によってインストールまたは更新されていることが常に要件となります。これにより、いくつかのエッジケースが修正され、デベロッパーがレスポンスを解釈しやすくなります。
  • オプションのシグナルの利用可能性: Google Play Console または Play SDK Console を使用するデベロッパーが利用できるすべてのオプションのシグナル(デバイス属性を除く)で、リクエスト元のアプリが Android 13 以降で Google Play によってインストールまたは更新されていることが必要になりました。これには、meets-strong-integritymeets-basic-integrity、最近のデバイスのアクティビティ、デバイスのリコール(ベータ版)、アプリのアクセス リスクの判定、Google Play プロテクトの判定が含まれます。他のすべての Play Integrity API リクエストを標準化し、デバイス チェック(meets-device-integrity ラベルのみ)、インストーラ チェック、アプリの完全性チェック、デバイス属性(有効な場合)を受け取るようにしました。
  • 特定のデバイスの判定の変更: Play Integrity API は、過剰なアクティビティやキーの漏洩の証拠がある場合など、すべての Android SDK バージョンでアプリを早期に保護するために、より多くのシナリオでデバイスの判定を自動的に変更します。これには、ハードウェア格納型のシグナルが利用できない場合に、Play が他のシグナルにフォールバックしてユーザーの一時的なデバイス判定を生成する機能が含まれます。デベロッパーは、完全性判定の問題を解決するために、アプリ内 Play 修正ダイアログを使用するか、Google Play ストア アプリにユーザーを誘導することをおすすめします。今後、これらのダイアログはより多くのシナリオに対応し、ユーザーが特定のデバイスやアカウントに基づいて修正する必要がある内容を伝える具体的なガイダンスが表示されるようになります。

完全性判定の結果に関する問題を報告するにはどうすればよいですか?

Play Integrity API のレスポンスに関する問題(過去の判定結果に関する問題か、新しい判定結果に関する問題かを問わず)を報告するには、サポートページの手順に沿って操作してください。

対象

Play Integrity API が動作するために必要なものは何ですか?

Play Integrity API を使用するには、デバイスに Google Play ストアと Google Play 開発者サービスがインストールされている必要があります。これには、Android デバイスと PC 版 Google Play Games が含まれます。クラシック リクエストには Android 4.4(API レベル 19)以降が必要で、標準リクエストには Android 5.0(API レベル 21)以降が必要です。Android 13(API レベル 33)以降を搭載したデバイスでは、Play Integrity API の信頼性とサポートが、モバイル、タブレット、折りたたみ式デバイス、テレビ、Auto、Wear OS、ChromeOS などの主要な認証を含むすべての Android フォーム ファクタで同じレベルになります。

Play Integrity API の判定結果がデバイスによって異なるのはなぜですか?

Play Integrity API は、さまざまなユースケースやリスク許容度を持つデベロッパーに対応し、階層化された適用戦略を可能にするために、複数のデバイス判定を提供します。たとえば、アプリとデバイスの信頼性が高い場合、デベロッパーはユーザー確認の手順を簡素化できます。一方、デバイスが不明な場合、デベロッパーは保護されたアクションや機密性の高いアクションを実行する前に、追加のユーザー確認を要求できます。これは、不正行為や攻撃を減らす効果的な方法です。

認定 Android デバイスとは

認定 Android デバイス(Google Play プロテクト認定済み Android デバイスとも呼ばれます)とは、Google の互換性テストを数百回クリアし、Android のセキュリティと権限モデルに準拠し、Google Play プロテクト スイートのマルウェア対策機能を搭載して出荷された、予測可能なソフトウェアを実行するデバイスです。Play Integrity API でデバイスが正規の認定済み Android デバイスであることを確認できると、デバイス認識判定で meets-device-integrity レスポンスが返されます。

meets-basic-integrity デバイスとは

Play Integrity API は、デバイス判定 meets-basic-integrity でオプションのレスポンスも返します。デバイスが meets-device-integrity または meets-strong-integrity なしで meets-basic-integrity 判定のみを返す場合、Android OS を検証できないものの、キー構成証明は存在することを意味します。これは、チェックが Android 搭載の物理デバイスで行われたことを示しますが、Google はデバイスのセキュリティ、プライバシー、アプリの互換性について保証することはできません。また、デバイスが Android の仮想インスタンスなどのプロキシとして機能していないことを保証することもできません。デベロッパーは、ユースケースとリスク許容度に応じて、アプリをこれらのデバイスでどのように実行するかを決定できます。

すべてのデベロッパーが Play Integrity API を使用できますか?

はい。Android デベロッパーは、Play Integrity API リクエストを送信してデフォルトの完全性判定を受け取ることができます。配信チャネルに関係なく、使用量は 1 日あたり 1 万リクエストに制限されます。他の配信チャネルに加えて Google Play でアプリを公開しているデベロッパーも、1 日あたりの割り当ての増加をリクエストできます。

どのデベロッパーも Android プラットフォーム キー構成証明を使用できますか?

はい。Android デベロッパーは、Android プラットフォーム キーの証明書を使用してキーの証明書レコードを取得し、Google の証明書ルートキーの公開証明書で検証できます。Play Integrity API を使用すると、デベロッパーはキー構成証明と追加機能のメリットを、キー構成証明を自ら統合する複雑さを伴うことなく享受できます。

措置

デベロッパーは Play Integrity API の判定結果をどのように使用しますか?

Play Integrity API の判定結果をどのように使用するかは、デベロッパーが決定します。一部のデベロッパーは、不正使用防止のための内部分析のためにシグナルを収集しますが、別のデベロッパーは、判定に基づいてアプリの動作を決定します。たとえば、信頼性の低いデバイスでアカウントを作成する際に、追加のユーザー確認手順を必須にしたり、信頼性の低いデバイス同士を同じマルチプレイヤー サーバーでプレイできるようにしたりできます。

Play Integrity API はユーザーやデバイスをブロックしますか?

いいえ。Play Integrity API は、機能へのアクセスをブロックしません。これは、シグナルを提供するオプションのデベロッパー サービスであり、デベロッパーはこれらのシグナルに基づいてどのように行動するかを選択します。

デバイスが Play Integrity API のデバイスチェックに合格しない場合、ユーザーはどうすればよいですか?

デバイスの Google Play ストア アプリを開き、[設定] メニューを開いて [デバイス情報] までスクロールし、[Play プロテクト認定] を確認します。デバイスの Play プロテクト認定に問題がある場合は、問題を修正するためのボタンが表示されます。これにより、デバイスの認定ステータスが更新され、修正が必要な部分に関する具体的なガイダンスが提供されます。