Google Play アプリ署名を使用する

アプリ署名は、Android アプリを安全に更新するためのメカニズムです。すべての Android アプリは、デベロッパーまたは Google Play の秘密鍵を使用した暗号化によって署名されます。秘密鍵には必ず公開鍵証明書が関連付けられています。端末またはサービスはこの公開鍵証明書を利用することで、信頼できる提供元の秘密鍵によって署名されたアプリであることを確認できます。端末は、すでにその端末にインストールされているアプリと署名が一致する場合のみ更新を許可します。こうして、すべてのアプリの更新における信頼性も確保されます。Android でのアプリ署名について詳しくは、アプリの署名をご覧ください。

Google Play アプリ署名にオプトインすることで、Google が代わりにデベロッパーのアプリの署名鍵を管理して保護し、APK の配信時に署名に使用します。Google Play アプリ署名には次のようなメリットがあります。

  • Android App Bundle で Google Play が提供する Dynamic Delivery のメリットを活用できます。Android App Bundle ではアプリのサイズを減らし、リリースを簡略化できるだけでなく、動的な機能と Instant 機能を利用できます。

  • アプリの APK の署名に使用する鍵のセキュリティが強化され、アプリ証明書鍵とは別のアップロード鍵を使用して、Google Play にアップロードする App Bundle に署名できます。アプリ証明書鍵とは別のアップロード鍵を使用することで、鍵の紛失や不正使用があった場合にアップロード鍵のリセットをリクエストできます。Google Play アプリ署名にオプトインせずにアプリの署名鍵を紛失すると、アプリの更新ができなくなります。

鍵の種類と用語の定義

鍵、アーティファクト、ツールなどの重要な要素を次に示します。

  • アプリ署名鍵: ユーザーの端末に配信される APK の署名に Google Play が使用する鍵。Google Play アプリ署名にオプトインする場合は、既存のアプリ署名鍵をアップロードするか、Google Play が代わりにアプリ署名鍵を生成するかを選択します。Android の安全な更新モデルでは、アプリの全期間にわたってアプリ署名鍵を変更することはできません。アプリ署名鍵は非公開にする必要があります。アプリ署名鍵の公開鍵証明書は誰とでも共有できます。

  • アップロード鍵: App Bundle または APK を Google Play にアップロードするための署名に使用する鍵。アップロード鍵は非公開にする必要があります。アップロード鍵の公開鍵証明書は誰とでも共有できます。アップロード鍵は次のいずれかの方法で生成できます。

    • オプトイン時に Google が代わりにアプリ署名鍵を生成するように選択した場合は、初回リリースの署名時にアップロード鍵を使用するように指定されます。

    • 新規または既存のアプリをオプトインするときに Google にアプリ署名鍵を提供する場合は、オプトイン時に新しいアップロード鍵を生成することも、オプトイン後にアップロード鍵を生成することもできます。これにより、セキュリティを強化できます。

    • 新しいアップロード鍵を生成しない場合は、独自のアプリ署名鍵をアップロード鍵として各リリースの署名に引き続き使用できます。

鍵のセキュリティを維持するには、アプリ署名鍵とアップロード鍵にそれぞれ別の鍵を使用することが重要です。
  • 証明書(.der または .pem): 証明書には、公開鍵と、鍵の所有者に関する追加の識別情報が含まれています。公開鍵証明書により、誰でも App Bundle または APK の署名者を確認できます。Play Console の [アプリの署名] ページからアプリ署名鍵とアップロード鍵の公開鍵証明書をダウンロードすることで、API プロバイダに鍵を登録できます。公開鍵証明書は誰とでも共有できます。公開鍵証明書には秘密鍵は含まれていません。

  • 証明書フィンガープリント: 証明書を表す一意の短い値の情報です。API プロバイダは、そのプロバイダのサービスを利用するアプリケーションを登録するためにパッケージ名と合わせて証明書フィンガープリントをリクエストします。アップロード鍵とアプリ署名鍵の証明書の MD5、SHA-1、SHA-256 フィンガープリントは、Play Console の [アプリの署名] ページで確認できます。他のフィンガープリントは、同じページから元の証明書(.der)をダウンロードして計算することもできます。

  • Java Keystore(.jks または .keystore): セキュリティ証明書と秘密鍵のリポジトリです。

  • Play Encrypt Private Key(PEPK)ツール: Java Keystore から秘密鍵をエクスポートして暗号化し、Google Play に転送するために使用します。Google が使用するアプリ署名鍵を提供する際に、[Java Keystore から鍵をエクスポートしてアップロードする] を選択し、指示に沿ってこのツールをダウンロードして使用します。または [鍵をエクスポートしてアップロードする(Java KeyStore は使用しない)] を選択して PEPK ツールのオープンソース コードをダウンロードし、確認した後に使用します。

権限とアクセス

Play Console アカウントの所有者または「製品版のリリース」のグローバル権限を持つユーザーであれば、Google Play アプリ署名を有効にできます。デベロッパー アカウントごとに利用規約に同意する必要があります。利用規約に同意すると、個々のアプリをプログラムに登録できるようになります。

利用規約に同意しても、デベロッパー アカウントに関連付けられているすべてのアプリが自動的にアプリ署名に登録されるわけではありません。

Google Play アプリ署名の仕組み

Google Play アプリ署名を使用すると、Google が自社の鍵の保管に使用しているものと同じインフラストラクチャに鍵が保管されます。鍵は Google の Key Management Service によって保護されます。Google の技術インフラストラクチャについて詳しくは、Google Cloud Security ホワイトペーパーをご覧ください。

Android App Bundle を使用してアプリを公開するには、App Bundle をアップロードする前に Google Play アプリ署名に登録する必要があります。

Google Play アプリ署名はオプションのプログラムであるため、App Bundle ではなく APK をアップロードする場合は、独自の鍵を引き続き管理できます。ただし、キーストアを紛失した場合、またはキーストアの不正使用が疑われる場合はアプリを更新できず、新しいパッケージ名で新しいアプリを公開する必要があります。

署名プロセスの仕組みは次のとおりです。

  1. App Bundle または APK に署名して Play Console にアップロードします。

  2. 次のステップは何をアップロードするかによって異なります。

    • App Bundle: Google が App Bundle から最適化された APK を生成し、アプリ署名鍵を使用して署名します。

    • アップロード鍵で署名された APK: Google が署名を確認して APK からその署名を削除し、アプリ署名鍵を使用して APK に再署名します。

    • アプリ署名鍵で署名された APK: Google が署名を確認します。

  3. 署名された APK を Google がユーザーに配信します。

元のアプリ署名鍵によって署名された APK は、Google Play アプリ署名のオプトイン前またはオプトイン後にいつでもアップロードできます。これには、オープンテスト版トラック、クローズド テスト版トラック、内部テスト版トラックで App Bundle のテストを実施しながら、Google Play アプリ署名を使用せずに製品版トラックで既存の APK をリリースできるというメリットがあります。

新しいアプリをオプトインする

ステップ 1: アップロード鍵を作成する

  1. アプリ署名の手順に沿って、新しいアプリのアップロード鍵を作成します。

  2. 作成したアップロード鍵で新しい APK に署名します。

ステップ 2: リリースを準備して公開する

  1. 手順に沿ってリリースを準備して公開します。

  2. リリース トラックを選択したら、[Google でアプリ署名鍵の管理、保護を行う] セクションでアプリ署名を構成します。

  3. [続行] を選択して Google がアプリ署名鍵を管理するように設定するか、[詳細オプション] でアプリに最適なオプションを選択します。

  4. アプリに最適なアプリ署名の方法を以下から選択します。

    • Google Play が鍵を生成してアプリに署名するようにするには、[続行] を選択します。最初のリリースの署名に使用した鍵がアップロード鍵になり、それ以降のリリースの署名に使用されます。

    • 同じデベロッパー アカウントの別のアプリと同じ鍵を使用するには、[詳細オプション] > [オプション 2] を選択し、適切なアプリを選択します。

    • 既存のアプリ署名鍵をアップロードするには、[詳細オプション] > オプション 2~4 を選択し、アプリのリリース プロセスに最適なエクスポート オプションとアップロード オプションを選択します。アプリ署名鍵をアップロードした後、アップロード鍵を作成するか、そのアプリ署名鍵をアップロード鍵として引き続き使用できます。

利用規約に同意していない場合は、利用規約を確認し、[同意する] を選択して続行するように要求されます。この時点でアプリ署名へのオプトインを選択していない場合は、以下の手順に沿って既存のアプリをいつでもオプトインできます。

ステップ 3: API プロバイダにアプリ署名鍵を登録する

アプリで API を使用している場合は、通常、認証の目的で Google がアプリの署名に使用する鍵の証明書を登録する必要があります。一般に、これは証明書のフィンガープリントによって行われます。

APK の配信前の再署名に使用された鍵の証明書を確認する手順:

  1. Play Console にログインします。

  2. アプリを選択します。

  3. 左側のメニューで [リリース管理] > [アプリの署名] を選択します。

  4. このページでは、アプリ署名証明書の一般的なフィンガープリント(MD5、SHA-1、SHA-256)をコピーできます。API プロバイダで別のタイプのフィンガープリントが必要な場合は、元の証明書を DER 形式でダウンロードし、API プロバイダが要求する変換ツールを使用して実行することもできます。

既存のアプリをオプトインする

ステップ 1: Google Play アプリ署名に登録する

  1. Play Console にログインします。

  2. アプリを選択します。

  3. 左側のメニューで [リリース管理] > [アプリの署名] を選択します。

  4. 該当する場合は、利用規約を確認し、[同意する] を選択します。

ステップ 2: 元の鍵を Google に送信する

元の鍵を Google Play にアップロードしてアップロード鍵を作成する手順:

  1. 元のアプリ署名鍵の場所を確認しておきます。

  2. Play Console にログインします。

  3. アプリを選択します。

  4. 左側のメニューで [リリース管理] > [アプリの署名] をクリックします。

  5. 既存のアプリ署名鍵をアップロードします。リリース プロセスに最適なエクスポート オプションとアップロード オプションを選択します。

ステップ 3: アップロード鍵を作成する(推奨)

  1. アップロード鍵を作成し、Google Play に証明書をアップロードするか、既存のアプリ署名鍵をアップロード鍵として引き続き使用します。

  2. 次の画面に、アプリの証明書のフィンガープリントが表示されます。テストを行うには、アプリ署名鍵の登録に加えて、証明書のフィンガープリントを使用してアップロード鍵の証明書を API プロバイダに登録する必要があります。

ステップ 4: アップロード鍵で次のアプリの更新に署名する

既存のアプリの更新はすべてアップロード鍵で署名する必要があります。

  • 新しいアップロード鍵を生成していない場合は、引き続き元のアプリ署名鍵を使用して各リリースに署名し、Google Play にアップロードします。アプリ署名鍵を紛失した場合は、新しいアップロード鍵を生成して Google に登録し、アプリの更新を続行できます。

  • 新しいアップロード鍵を生成した場合は、新しいアップロード鍵を使用して各リリースに署名し、Google Play にアップロードします。Google は、そのリリースがアップロード鍵で署名されていることを確認することで、デベロッパーの ID を確認します。アップロード鍵の紛失や不正使用があった場合は、デベロッパー サポートに連絡してリセットできます。

アップロード鍵を作成する

セキュリティを強化するために、アプリ署名鍵ではなく新しいアップロード鍵を使用してアプリと将来のリリースに署名することをおすすめします。このステップは Google Play アプリ署名にオプトインするときに行うか、後で [リリース管理] > [アプリの署名] にアクセスしてアップロード鍵の使用を開始することもできます。

アップロード鍵について

  • アップロード鍵は Google にのみ登録され、アプリ作成者の認証に使用されます。

  • アップロードされた APK がユーザーに送信される前に署名が削除されます。

アップロード鍵に関する制限

  • 2,048 ビット以上の RSA 鍵であること。

  • DSA 鍵、EC 鍵、2,048 ビット未満の RSA 鍵は使用不可。

アップロード鍵を作成する

  1. 新しいアップロード鍵を生成して安全に保管します。生成する際は、新しいアップロード鍵を生成する手順に沿ってください。

  2. 以下のコマンドを使用して、新しく生成したアップロード鍵の証明書を PEM 形式でエクスポートします。下線付きの引数は適宜置換する必要があります。

$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem

  1. 画面の表示に沿って、アップロード鍵の証明書をアップロードして Google に登録します。

キーストアを更新する

アップロード鍵を作成したら、キーストアを更新します。たとえば、次の場所を確認するといいでしょう。

  • ローカルマシン

  • ロックされたオンサイト サーバー(各種 ACL)

  • クラウドマシン(各種 ACL)

  • 専用の秘密管理サービス

  • (Git)リポジトリ

紛失または不正使用があった非公開のアップロード鍵をリセットする

非公開のアップロード鍵を紛失した場合、または秘密鍵が不正使用された場合は、新しく鍵を作成し、Google Play サポートチームに連絡して鍵のリセットを依頼します。

アップロード鍵をリセットしても、ユーザーに配信する前に Google Play が APK の再署名に使用するアプリ署名鍵には影響しません。

サポートチームに問い合わせる

サポートチームが鍵のリセットのリクエストを受け付けるのは、Play Console アカウントの所有者からのみです。

アカウント所有者はこちらのフォームに必要事項を入力してご連絡ください。その際は、必ず upload_certificate.pem ファイルを添付してください。

Google で新しいアップロード鍵を登録した後、メールが送信されます。その時点で、上記の手順に沿ってキーストアを更新して API プロバイダに登録できます。

おすすめの方法

  • Google Play 以外でもアプリを配信するか、その予定がある場合は、各アプリストアで使用するアプリ署名鍵を生成し、Google Play アプリ署名にオプトインするときに Google にアップロードできます。

  • デベロッパー アカウントを保護するには、Play Console にアクセスできるすべてアカウントで 2 段階認証プロセスを有効にすることをおすすめします。

  • App Bundle をテストトラックまたは製品版トラックに公開すると、App Bundle エクスプローラで特定の端末のすべての APK を含む ZIP アーカイブをダウンロードできます。これらの APK はアプリ署名鍵を使用して署名されています。ZIP アーカイブ内の APK は、bundletool コマンド ユーティリティを使用して端末にインストールできます。

  • Google Play アプリ署名にオプトインしたら、アプリの署名鍵とは別の新しいアップロード鍵を生成することで、セキュリティを強化できます。

  • アップロード鍵の紛失や不正使用があった場合は、Google に連絡してリセットできます。

  • アップロード鍵で署名された APK をテストする場合は、認証にアプリの署名を使用しているサービスまたは API(Google Maps API や Facebook SDK など)にアップロード鍵を登録する必要があります。Google API を使用している場合は、Google Cloud Console にアプリのアップロード証明書を登録することをおすすめします。

この記事は役に立ちましたか?
改善できる点がありましたらお聞かせください。