Play アプリ署名を使用すると、Google がデベロッパーに代わってアプリの署名鍵を管理および保護し、その署名鍵を使用して、App Bundle から生成され最適化された配布用 APK に署名します。Play アプリ署名は、Google の安全なインフラストラクチャにアプリ署名鍵を保存し、セキュリティを強化するためのアップグレード オプションを提供します。
Play アプリ署名を使用するには、アカウント所有者であるか、製品版としてのリリース、デバイスの除外、Play アプリ署名の使用の権限を持つユーザーである必要があり、さらに Play アプリ署名利用規約に同意する必要があります。
仕組み
Play アプリ署名を使用すると、Google が自社の鍵の保管に使用しているものと同じ安全なインフラストラクチャに鍵が保管され、Google の鍵管理サービスによって保護されます。Google のインフラストラクチャについて詳しくは、Google Cloud のセキュリティに関するホワイトペーパーをご覧ください。
Android アプリは秘密鍵で署名されます。アプリのアップデートが信頼できるものであることを保証するために、秘密鍵はそれぞれ公開鍵証明書に関連付けられています。デバイスやサービスはその公開鍵証明書を使って、アプリのアップデートが同じ提供元によるものであることを確認できます。デバイスでのアプリのアップデートは、すでにインストールされているアプリと署名が一致する場合にのみ許可されます。アプリ署名鍵の管理を Google に委託することによって、このプロセスのセキュリティを強化できます。
注: 2021 年 8 月より前に作成されたアプリの場合は、Play アプリ署名を使用し、Android App Bundle を使って公開する代わりに、引き続き、APK をアップロードして、独自の鍵を管理することができます。ただし、キーストアを紛失したり、不正使用されたりした場合は、アプリを更新できなくなり、新しいパッケージ名で新しいアプリとして公開することが必要になります。このようなアプリについては、Play アプリ署名を使用し、App Bundle に切り替えることをおすすめします。
鍵、アーティファクト、ツールの説明用語 | 説明 |
---|---|
アプリ署名鍵 |
ユーザーのデバイスに配信される APK の署名に Google Play が使用する鍵。Play アプリ署名を使用する場合は、既存のアプリ署名鍵をアップロードするか、Google が代わりにアプリ署名鍵を生成するかを選択できます。 アプリ署名鍵は非公開にしておく必要がありますが、アプリの公開鍵証明書は誰とでも共有できます。 |
アップロード鍵 |
App Bundle を Google Play にアップロードするための署名に使用する鍵。アップロード鍵は非公開にしておく必要がありますが、アプリの公開鍵証明書は誰とでも共有できます。セキュリティ上の理由から、アプリ署名鍵とアップロード鍵はそれぞれ別のものを用意することをおすすめします。 アップロード鍵を生成する方法は 2 つあります。
|
証明書(.der または .pem ) |
証明書には、公開鍵と鍵の所有者に関する追加の識別情報が記載されます。公開鍵証明書により、誰でも App Bundle または APK の署名者を確認できます。秘密鍵の情報は含まれていないので、公開鍵証明書は誰とでも共有できます。 API プロバイダに鍵を登録するために、Google Play Console の [Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])からアプリ署名鍵とアップロード鍵の公開鍵証明書をダウンロードできます。公開鍵証明書は誰とでも共有可能で、秘密鍵の情報は含まれません。 |
証明書フィンガープリント |
証明書を表す一意の短いデータです。API プロバイダのサービスを利用できるようにアプリを登録する際に、パッケージ名と合わせて証明書フィンガープリントをリクエストされることがよくあります。 アップロード鍵とアプリ署名鍵の証明書の MD5、SHA-1、SHA-256 の各フィンガープリントは、Google Play Console の [Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])で確認できます。同じページから元の証明書( |
Java Keystore(.jks または .keystore ) |
セキュリティ証明書と秘密鍵のリポジトリです。 |
Play Encrypt Private Key(PEPK)ツール |
Java Keystore から秘密鍵をエクスポートして暗号化し、Google Play に転送するためのツールです。 Google 側で使用するアプリ署名鍵を提供する際に、Java Keystore から鍵をエクスポートしてアップロードする(必要に応じて、公開鍵証明書も含める)オプションを選択し、手順に沿ってこのツールをダウンロードして使用します。PEPK ツールのオープンソース コードをダウンロードして、確認、使用することもできます。 |
このプロセスの仕組みは次のとおりです。
- App Bundle に署名し、Google Play Console にアップロードします。
- Google は App Bundle から最適化された APK を生成し、アプリ署名鍵を使用して署名します。
- Google は apksigner を使用して、アプリのマニフェストに 2 つのスタンプ(
com.android.stamp.source
とcom.android.stamp.type
)を追加し、アプリ署名鍵を使用して APK に署名します。apksigner によって追加されたスタンプを使用することで、APK をトレースして署名者を把握できます。 - 署名された APK を Google がユーザーに配信します。
Play アプリ署名を設定、管理する
アプリでまだ Play アプリ署名を使用していない場合は、下記の手順を行います。
ステップ 1: アップロード鍵を作成する
- こちらの手順に沿って、アップロード鍵を作成します。
- アップロード鍵を使用して App Bundle に署名します。
ステップ 2: リリースを準備する
- 手順に沿って、リリースを準備して公開します。
- リリース トラックを選択すると、[アプリの完全性] セクションに、アプリの Play アプリ署名のステータスが表示されます。
- Google が生成したアプリ署名鍵を使用する場合は、App Bundle をアップロードします。[アプリ署名鍵を変更] を選択して、次の方法を利用することもできます。
- Google が生成したアプリ署名鍵を使用する: 新しいアプリの 90% 以上で Google が生成したアプリ署名鍵が使用されています。Google が生成した鍵を使用すると、紛失や不正使用から保護することができます(この鍵はダウンロードできません)。この方法を選択した場合、他の配布チャネル用に Google が生成した鍵を使って署名された配布用 APK を App Bundle エクスプローラからダウンロードしたり、別の鍵を使用したりできます。
- 別のアプリ署名鍵を使用する: このアプリ署名鍵を選択することで、デベロッパー アカウントの別のアプリと同じ鍵を使用したり、アプリ署名鍵のローカルコピーを保存したりするなど柔軟な使い方ができます。たとえば、一部のデバイスにアプリがプリインストールされているために、すでに鍵が決定されている場合があります。ただし、鍵のコピーを Google のサーバーの外部に保存すると、ローカルコピーが不正使用された場合のリスクが高くなります。別の鍵を使用する場合は、次の方法があります。
- このデベロッパー アカウントの別のアプリと同じアプリ署名鍵を使用する
- Java Keystore から鍵をエクスポートしてアップロードする
- 鍵をエクスポートしてアップロードする(Java Keystore は使用しない)
- Play アプリ署名をオプトアウトする(このオプションは、アプリ署名鍵をアップグレードして Play アプリ署名に登録する予定である場合にのみ選択してください)。
- リリースを準備して公開するための残りの手順を行います。
注: 手順を続けるには、利用規約に同意して、アプリ署名を有効にする必要があります。
ステップ 3: API プロバイダにアプリ署名鍵を登録する
アプリで API を使用している場合は通常、認証のために、証明書のフィンガープリントを使用してアプリ署名鍵を登録する必要があります。証明書の場所は次のように探します。
- Google Play Console を開き、[Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])に移動します。
- ヒント: このページには [アプリの完全性] ページ([リリース] > [アプリの完全性])からアクセスすることもできます。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
- [アプリ署名鍵の証明書] までスクロールし、アプリ署名証明書のフィンガープリント(MD5、SHA-1、SHA-256)をコピーします。
- API プロバイダで別のタイプのフィンガープリントが必要な場合、元の証明書を
.der
形式でダウンロードし、API プロバイダが要求する変換ツールを使って変更することもできます。
- API プロバイダで別のタイプのフィンガープリントが必要な場合、元の証明書を
Google が生成した鍵を使用する場合、4,096 ビットの暗号的に強力な RSA 鍵が自動的に生成されます。独自のアプリ署名鍵をアップロードすることを選択した場合は、2,048 ビット以上の RSA 鍵を使用する必要があります。
ステップ 1: Play アプリ署名を設定する
- Google Play Console を開き、[Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])に移動します。
- ヒント: このページには [アプリの完全性] ページ([リリース] > [アプリの完全性])からアクセスすることもできます。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
- Play アプリ署名の利用規約に同意していない場合は、内容を確認して [同意する] を選択します。
ステップ 2: 元の鍵のコピーを Google に送信してアップロード鍵を作成する
- 元のアプリ署名鍵の場所を確認します。
- Google Play Console を開き、[Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])に移動します。
- リリース プロセスに最適なエクスポートとアップロードのオプションを選択し、既存のアプリ署名鍵をアップロードします。
ステップ 3: アップロード鍵を作成する(省略可、推奨)
- アップロード鍵を作成し、Google Play に証明書をアップロードします。
- アプリ署名鍵をアップロード鍵として引き続き使用することもできます。
- アプリ署名証明書のフィンガープリント(MD5、SHA-1、SHA-256)をコピーします。
- テストを行うには、証明書のフィンガープリントとアプリ署名鍵を使用して、アップロード鍵の証明書を API プロバイダに登録することが必要な場合があります。
ステップ 4: 次のアプリのアップデートにアップロード鍵で署名する
アプリのアップデートをリリースするには、アップロード鍵でアップデートに署名する必要があります。
- 新しいアップロード鍵を生成していない場合: 引き続き元のアプリ署名鍵を使用して App Bundle に署名し、Google Play にアップロードします。元のアプリ署名鍵を紛失した場合は、新しいアップロード鍵を生成して Google に登録し、アプリの更新を続行できます。
- 新しいアップロード鍵を生成した場合: 新しいアップロード鍵を使用して App Bundle に署名し、Google Play にアップロードします。Google はアップロード鍵を使用して、デベロッパーの本人確認を行います。アップロード鍵を紛失した場合は、サポートに連絡してリセットすることができます。
既存の鍵を共有できない場合は、この手順をおすすめします。登録するアプリ署名鍵をアップグレードする前に、以下の点にご注意ください。
- この方法では、デュアル リリースが必要です。
- 各リリースで以前の鍵を使って署名した App Bundle と APK をアップロードする必要があります。Google Play はその App Bundle を使用して、Android R*(API レベル 30)以降を搭載したデバイス用に、新しい鍵を使って署名した APK を生成します。以前の APK は、古い Android リリース(API レベル 29 まで)に使用されます。
*アプリで sharedUserId を使用している場合は、Android T(API レベル 33)以降を搭載しているデバイスでのインストールとアップデートに鍵のアップグレードを適用することをおすすめします。これを設定するには、バンドルの構成で最小 SDK バージョンを正確に設定してください。
ステップ 1: 新しい鍵をアップロードし、proof-of-rotation を生成してアップロードする
Android デバイスで新しい鍵が信頼されるようにするには、リポジトリから新しい署名鍵をアップロードし、proof-of-rotation を生成してアップロードする必要があります。
- Google Play Console を開き、[Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])に移動します。
- ヒント: このページには [アプリの完全性] ページ([リリース] > [アプリの完全性])からアクセスすることもできます。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
- [アプリの署名] タブを選択します。
- [詳細オプションを表示] をクリックし、[新しいアプリ署名鍵を使用する(デュアル リリースを行っていることが必要)] を選択します。
- デベロッパー アカウントの別のアプリと同じアプリ署名鍵を使用するか、Android Studio、Java KeyStore、または別のリポジトリから新しいアプリ署名鍵をアップロードするかを選択します。
- 画面上の手順に沿って PEPK ツールをダウンロードして実行します。
- ZIP の準備が整ったら、[生成された ZIP ファイルをアップロード] をクリックして Google Play Console にアップロードします。
- [5. proof-of-rotation をアップロードすることで、Android デバイスで新しい鍵を信頼できるようになります] の横にある [手順を表示] をクリックします。
- APKSigner をダウンロードし、次のコマンドを実行して proof-of-rotation を生成します。
$ 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
- [生成された proof-of-rotation ファイルをアップロード] をクリックし、ステップ 8 で生成した proof-of-rotation をアップロードします。
- [保存] をクリックします。
アップロード鍵を作成し、キーストアを更新する
セキュリティを強化するために、アプリ署名鍵ではなく新しいアップロード鍵を使用してアプリに署名することをおすすめします。
アップロード鍵は、Play アプリ署名を有効にするときに作成するか、後で [Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])にアクセスして作成することができます。
アップロード鍵を作成する際は下記をご覧ください。
- デベロッパー向け Android サイトの手順に沿ってアップロード鍵を作成します。鍵は安全な場所に保管してください。
- アップロード鍵の証明書を PEM 形式でエクスポートします。以下の下線付きの引数を置き換えてください。
$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
-
リリース プロセス中、指示に沿って、証明書をアップロードして Google に登録します。
アップロード鍵を使用すると:
- アップロード鍵はアプリ作成者の認証の目的でのみ Google に登録されます。
- この署名はアップロードした APK がユーザーに送信される前に削除されます。
- 2,048 ビット以上の RSA 鍵であること。
アップロード鍵を作成した後、以下の場所の確認と更新が必要になることがあります。
- ローカルマシン
- ロックされたオンサイト サーバー(各種 ACL)
- クラウドマシン(各種 ACL)
- 専用の秘密管理サービス
- (Git)リポジトリ
アプリ署名鍵をアップグレードする
状況によっては、アプリ署名鍵のアップグレードをリクエストできます。
アプリ署名鍵のアップグレードをリクエストする理由は次のとおりです。
- 暗号化を用いたより安全性の高い鍵を使用する必要がある。
- アプリ署名鍵が不正使用された。
重要: 鍵のアップグレードは、App Bundle を使用するアプリでのみサポートされます。
Google Play Console で鍵のアップグレードをリクエストする前に、下記の鍵のアップグレードをリクエストする前の重要な考慮事項をお読みください。鍵のアップグレードをリクエストする方法について詳しくは、下記のその他のセクションを開いてご確認ください。
鍵のアップグレードをリクエストする前の重要な考慮事項鍵のアップグレードをリクエストする前に、アップグレードの完了後に行う必要のある変更について理解しておくことが重要です。
- アプリ間でコードやデータを共有するために複数のアプリで同じアプリ署名鍵を使用している場合は、新旧両方のアプリ署名鍵の証明書を認識するようにアプリを更新する必要があります。Android S(API レベル 32)以前を搭載しているデバイスでは、以前のアプリ署名鍵の証明書のみが、データ/コードの共有を目的として Android プラットフォームによって認識されます。
- アプリで API を使用している場合は、アップデートを公開する前に、新旧両方のアプリ署名鍵の証明書を API プロバイダに登録して、API が引き続き動作するようにしてください。証明書は Google Play Console の [Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])で確認できます。
- ユーザーがピアツーピア共有でアップデートをインストールする場合、そのユーザーがインストールできるのは、インストール済みのアプリのバージョンと同じ鍵で署名されたアップデートのみとなります。異なる鍵で署名されたバージョンのアプリをインストールしているためにアプリを更新できない場合は、アプリをアンインストールしてから再インストールして、アップデートを取得するという方法があります。
各アプリは、Android N(API レベル 24)以降でのすべてのインストール用に、毎年 1 回アプリ署名鍵をアップグレードできます。
この鍵のアップグレード リクエストが完了すると、すべてのインストールとアプリのアップデートの署名に新しい鍵が使用されます。Android T(API レベル 33)以降を搭載したデバイスでは、アップグレードされた鍵の使用が Android プラットフォームによって強制されます。Android S(API レベル 32)以前を搭載したデバイスでは、Android プラットフォームはこのアップグレードされた鍵の使用を強制せず、以前の署名鍵をアプリの署名鍵として認識します。これには、アプリの署名キーに依存する Android プラットフォーム機能(カスタム権限の共有など)も含まれます。Android N(API レベル 24)から Android S(API レベル 32)までのいずれかを搭載したデバイスでは、ユーザーが設定をオフにしない限り、アップグレードされた鍵でアプリ アップデートが署名されていることを Google Play プロテクトが確認します。Android S(API レベル 32)以前を搭載したデバイスでは、アップグレードされた鍵の使用が Android プラットフォームによって強制されないため、これによって追加の検証が行われます。
- Google Play Console を開き、[Play アプリ署名] ページ([リリース] > [設定] > [アプリの署名])に移動します。
- ヒント: このページには [アプリの完全性] ページ([リリース] > [アプリの完全性])からアクセスすることもできます。[アプリの完全性] ページには、アプリやゲームで意図したとおりのユーザー エクスペリエンスを実現するための完全性と署名のサービスが含まれています。
- [アプリ署名鍵のアップグレード] カードで、[鍵のアップグレードをリクエスト] を選択します。
- Android N 以降でのすべてのインストールに対してアプリ署名鍵をアップグレードするオプションを選択します。
- Google で新しいアプリ署名鍵を生成するか(推奨)、アプリ署名鍵をアップロードします。
- アプリ署名鍵とアップロード鍵に同じ鍵を使用していた場合は、アプリ署名鍵をアップグレードした後、これまでのアプリ署名鍵をアップロード鍵として使い続けるか、新しいアップロード鍵を生成することができます。
- アプリ署名鍵のアップグレードをリクエストする理由を選択します。
- 必要に応じて、API プロバイダに新しいアプリ署名鍵を登録します。
ヒント: アプリを複数の配信チャネルで配信している場合、ユーザーのためにアプリのアップデートの互換性を最大限に確保するには、各配信チャネルで鍵をアップグレードすることをおすすめします。Google Play の鍵のアップグレードに対応するには、Android SDK ビルドツール(リビジョン 33.0.1 以降)にバンドルされている ApkSigner ツールを使用します。
$ apksigner sign --in ${INPUT_APK}
--out ${OUTPUT_APK}
--ks ${ORIGINAL_KEYSTORE}
--ks-key-alias ${ORIGINAL_KEY_ALIAS}
--next-signer --ks ${UPGRADED_KEYSTORE}
--ks-key-alias ${UPGRADED_KEY_ALIAS}
--lineage ${LINEAGE}
詳しくは、アプリのアップデートの仕組みをご覧ください。
ベスト プラクティス
- Google Play 以外でもアプリを配信している、または配信する予定があり、同じ署名鍵を使用したい場合には、次の 2 つのオプションがあります。
- Google で鍵を生成して(推奨)、署名済みのユニバーサル APK を App Bundle エクスプローラからダウンロードして、Google Play の外部に配布します。
- または、すべてのアプリストアで使用するアプリ署名鍵を生成し、Play アプリ署名を設定する際に、その鍵のコピーを Google に転送することもできます。
- アカウントを保護するため、Google Play Console にアクセスできるすべてのアカウントで 2 段階認証プロセスを有効にしてください。
- App Bundle をリリース トラックに公開した後は、App Bundle エクスプローラにアクセスすると、Google が App Bundle から生成したインストール可能な APK にアクセスできます。次のことが可能です。
- 内部アプリ共有リンクをコピーして共有できます。このリンクを使用すると、Google Play によってさまざまなデバイスで App Bundle からインストールされる内容を 1 回タップするだけでテストできます。
- 署名済みのユニバーサル APK をダウンロードできます。この単一の APK は Google が保持するアプリ署名鍵で署名されており、アプリがサポートするすべてのデバイスにインストール可能です。
- 特定のデバイス用のすべての APK を含む ZIP アーカイブをダウンロードできます。この APK は Google が保持するアプリ署名鍵で署名されており、ZIP アーカイブ内の APK は、
adb install-multiple *.apk
コマンドを使用してデバイスにインストールできます。
- セキュリティを強化するには、アプリ署名鍵とは異なる新しいアップロード鍵を生成してください。
- Google API を使用している場合は、Google Cloud Console でアプリのアップロード鍵とアプリ署名鍵の証明書を登録することをおすすめします。
- Android アプリリンクを使用している場合は、ウェブサイトの対応するデジタル アセット リンクの JSON ファイル内の鍵を更新してください。
アップロード鍵の紛失または不正使用
非公開のアップロード鍵を紛失した場合、または不正使用された場合は、新しい鍵を作成できます。デベロッパー アカウントの所有者は、Google Play Console でキーのリセットを開始できます。
サポートチームによる新しいアップロード鍵の登録が完了すると、アカウント所有者とグローバル管理者に詳細情報が記載された受信トレイ メッセージとメールが届きます。その後、キーストアを更新して API プロバイダに新しい鍵を登録できます。
アカウント所有者は、Google Play Console でリセット リクエストをキャンセルすることもできます。
重要: アップロード鍵をリセットしても、ユーザーに配信する前に Google Play が APK の再署名に使用するアプリ署名鍵には影響はありません。
APK 署名スキーム v4
Android 11 以降のデバイスは、新しい APK 署名スキーム v4 に対応しています。新しいデバイスで利用可能な最適化された配信機能にアクセスできるよう、Play アプリ署名は対象のアプリで v4 署名を使用します。デベロッパー様の方でなんらかの措置を講じていただく必要はありません。v4 署名によるユーザーへの影響もありません。
関連コンテンツ
- Google Play Console の完全性と署名のサービスについてご確認ください。
- Android デベロッパー サイトの完全性と署名のサービスについてご確認ください。