Play アプリ署名を使用するメリットPlay アプリ署名に登録すると、鍵を恒久的に使用できなくなったり、不正使用されたりすることを未然に防止できるほか、Android App Bundle(.aab)向けの Google Play の機能強化も利用できます。App Bundle から生成され最適化された配布用 APK の署名を Google に任せることで、Gemini モデルを使用した自動保護や文字列の自動翻訳などの便利なサービスを利用できるようになります。ゲームでは、Play Games Sidekick、Play as you download、有料タイトルの無料試用などの追加の自動サービスを利用できるようになります。
Play アプリ署名を設定するには、アカウント所有者であるか、製品版としてのリリース、デバイスの除外、Play アプリ署名の使用の権限を持ち、利用規約に同意する必要があります。
基本コンセプト
Play アプリ署名を使用する場合は、2 つの異なる鍵を扱います。この相違点と技術的な形式を理解することは、サードパーティ製 API での認証問題を回避するうえで非常に重要です。
| 鍵の種類 | 保有者 | 詳細な技術情報および目的 |
|
アップロード鍵 |
デベロッパー(安全に保管してください!) |
|
| アプリ署名鍵 |
Google Play |
|
注: セキュリティを最大限に高めるため、アップロード鍵とアプリ署名鍵は異なるものを使用する必要があります。
Google がアプリに署名する方法: Google は、アプリ署名鍵を作成し、この鍵で APK に署名する場合、apksigner を使用してアプリのマニフェストに 2 つのスタンプ(com.android.stamp.source と com.android.stamp.type)を追加します。これらのスタンプで、APK は元の署名者に安全に遡ることができます。
Play アプリ署名を設定する
設定プロセスは、新しいアプリを公開するか、既存のアプリを移行するかによって異なります。
新しいアプリの場合
- アップロード鍵を作成する: キーストアを生成して、リリースする App Bundle に署名します。Android Studio で生成するか、コマンドラインから Java Keytool ユーティリティを使用します。
- App Bundle をアップロードする: Google Play Console にアクセスし、新しいリリースを準備します。デフォルトでは、App Bundle をアップロードすると、Play アプリ署名によって暗号強度の高い RSA 4,096 ビット鍵が自動的に生成され、アプリの管理と保護に使用されます。新しいアプリの 90% 以上がこの推奨されるデフォルトを使用しており、設定に追加の操作は必要ありません。
- アプリ署名鍵を変更する(任意): 独自の鍵を管理できる上級デベロッパーは、このデフォルトを変更できます。変更するには、リリースの [アプリの完全性] セクションで [署名鍵を変更] をクリックするか、[[Google Play による保護] > [Google Play ストアでの配信] > [Play アプリ署名に移動] に移動します。次のいずれかの方法を選択します。
- このデベロッパー アカウントの別のアプリと同じ鍵を使用する
- アプリ署名鍵のコピーを提供する: まず、Google Play Console から Google の公開暗号鍵をダウンロードします。次に、Play Encrypt Private Key(PEPK)ツールを使用して(コンパイル済みのツールをダウンロードするか、そのソースコードを Google Play Console から直接ダウンロードして自分で検証またはビルドします)、リポジトリにある既存の RSA 鍵(2,048 ビット以上)を安全に暗号化してアップロードします。
既存のアプリの場合
現在、独自の鍵を管理して APK をアップロードしている場合は、Play アプリ署名にアップグレードすることで App Bundle と Google Play の機能強化を利用できます。
- Google Play Console で [Google Play による保護] > [Google Play ストアでの配信] > [Play アプリ署名に移動] に移動します。
- 利用規約に同意していない場合は、同意します。
- 元の鍵のコピーを転送する: PEPK ツールをダウンロードし、統一された手順ガイドに沿って、リポジトリにある既存のアプリ署名鍵を暗号化してアップロードします。
API プロバイダに登録する
アプリで API(Google マップ、OAuth、Facebook ログインなど)を使用している場合、これらのサービスはアプリ署名鍵のフィンガープリントを使用してアプリを認証します。
Google は最終的な APK に署名するため、ローカルのアップロード鍵だけではなく、Google が保持するアプリ署名鍵のフィンガープリントを API プロバイダに登録する必要があります。
- [Google Play による保護] > [Google Play ストアでの配信] > [Play アプリ署名に移動] に移動します。
- [アプリ署名鍵] セクションまでスクロールします。
- 必要なフィンガープリント(SHA-1 または SHA-256)をコピーします。
- これらのフィンガープリントを API プロバイダのコンソール(Google Cloud コンソールなど)に貼り付けます。
ヒント: Android アプリリンクを使用している場合は、これらのフィンガープリントで assetlinks.json ファイルを更新します。
鍵を管理する
アプリ署名鍵をアップグレードする
アプリ署名鍵が不正使用された場合や、暗号強度の高い鍵が必要な場合は、Android N(API レベル 24)以降でのすべてのインストール向けに年に 1 回、鍵のアップグレードをリクエストできます。
Android バージョンごとの適用の仕組みは次のとおりです。
- Android T(API レベル 33)以降: アップグレードされた鍵の使用が Android プラットフォームによって強制適用されます。
- Android N(API レベル 24)~Android S(API レベル 32): Android プラットフォーム自体は、アップグレードされた鍵を適用せず、以前の署名鍵を引き続き認識しますが、Google Play プロテクトが、アップグレードされた鍵でアプリのアップデートが署名されていることを確認することで、追加の検証を行います(ユーザーが無効にした場合を除きます)。
重要な考慮事項:
- 共有データ: Android S(API レベル 32)以前では、アップグレードされた鍵はプラットフォームで適用されないため、複数のアプリで同じ鍵を使用してデータを共有する場合、これらの以前の Android バージョンは、カスタム権限の共有などの機能に対して以前の鍵のみを認識します。
アップグレード方法:
- [Google Play による保護] > [Google Play ストアでの配信] > [Play アプリ署名に移動] に移動します。
- [アプリ署名鍵] セクションで、[鍵をアップグレード] をクリックします。
- アップグレード方法を選択します。
- Google Play で新しいアプリ署名鍵を生成する(推奨)
- このデベロッパー アカウントの別のアプリと同じアプリ署名鍵を使用する
- アプリ署名鍵のコピーを提供する(手順に沿って操作)
- 独自の鍵を提供する場合は、apksigner ツール(Android SDK ビルドツールにバンドルされています)を使用して「proof-of-rotation」を生成し、アップロードします(ここで使用するフラグの詳細については、apksigner コマンドライン ドキュメントをご覧ください)。
- apksigner
rotate --out /path/to/new/file --old-signer --ks old-signer-jks --set-rollback true --new-signer --ks new-signer-jks --set-rollback true
- apksigner
- [保存] をクリックして、API プロバイダに新しい鍵のフィンガープリントを登録します。
アップロード鍵のリセットをリクエストする
アップロード鍵を紛失した場合や、不正使用された疑いがある場合でも、アプリを利用できなくなるわけではありません。
- Android Studio で新しいアップロード鍵を作成します。
- 証明書を PEM 形式でエクスポートします。
keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
(Keytool とキーストア パスについて詳しくは、Android Studio アプリ署名ガイドをご覧ください)。 - アカウント所有者に、Google Play Console ヘルプフォームからアップロード鍵のリセットをリクエストしてもらいます。
- メッセージが表示されたら、
upload_certificate.pemをアップロードします。
注: アップロード鍵をリセットしても、アプリ署名鍵やユーザーには影響しません。
ベスト プラクティスとさまざまな配信方法
- セキュリティ: すべてのユーザーに 2 段階認証プロセスを適用し、Google Play Console へのアクセスを保護します。
- Google Play の機能強化: Play アプリ署名に登録すると、App Bundle で Google Play の機能強化を利用できるようになります。アップデートを受け取るには、まず新しいリリースを作成する際に必要な変更を加え、次に新しい App Bundle をアップロードします。
- Google Play 以外での配信: 他のアプリストアから配信し、すべての場所で同じ署名鍵を使用したい場合は、次の 2 つの方法があります。Google にアプリ署名鍵の生成を委託し、最新のリリースと App Bundle から署名済みのユニバーサル APK をダウンロードして他の場所で配信するか([テストとリリース] > [最新のリリースとバンドル] に移動し、App Bundle を選択して [ダウンロード] タブをクリック)、すべてのアプリストアで使用するアプリ署名鍵を生成し、Play アプリ署名を設定する際に、その鍵のコピーを Google に転送します。
- テスト: 内部アプリ共有を使用して、Google Play がユーザーに配信するもの自体をテストします。または、App Bundle エクスプローラからデバイス別の APK をダウンロードし、adb install-multiple *
.apkを使用してローカルにインストールします。 - APK 署名スキーム v4: Play アプリ署名は、Android 11 以降のデバイスで最適化された配信をサポートするため、対象のアプリで自動的に v4 署名を使用します。デベロッパー様の方でなんらかの措置を講じていただく必要はありません。技術上のメリットについて詳しくは、APK 署名スキーム v4 のドキュメントをご覧ください。
- 自己ホスト型の Google Cloud プロジェクト: 非常に具体的なセキュリティ要件(OEM 鍵の使用など)がある場合は、Play Developer API を使用して、自己ホスト型の Google Cloud プロジェクトで Play アプリ署名に登録できます。注: これは標準的ではない設定のため、推奨されません。自己ホスト型プロジェクトを使用すると、アプリ署名オペレーションの全責任をデベロッパーが負うことになり、Google Play で障害復旧などの重要な機能を実施できなくなります。