Yahoo! JAPANでAndroidアプリを開発している小和瀬 塁です。

今回は、Google I/O 2017で発表されたGoogle Play App Signingについて紹介します。

Google Play App Signingとは

Google Play App Signingとは、Google Playに鍵をアップロードすることで、アプリリリース時にアップロードするAPKに対してその鍵を利用して再署名し、ユーザーに配信できる機能です。

既存のフローとの比較は、「アプリ署名鍵を管理する - Play Console ヘルプ」のイラストがわかりやすいので、そちらをご覧ください。

アプリ署名鍵を管理する - Play Console ヘルプ」に掲載されている運用フロー

既存のフローには、次のようなリスクがありました。

  • リリース用の鍵を紛失した場合、アプリのアップデートができなくなる(新しいアプリとして新しいパッケージ名で公開する必要がある)
  • リリース用の鍵を盗難された場合、他人が偽物のアプリを作れるようになってしまう

Google Play App Signingを利用することで、これらのリスクを軽減することができます。

Google Play App Signingの使い方

新規アプリの場合

新規アプリの場合は簡単で、Google Play Consoleの「アプリのリリース」を開いて「次へ」を押すだけです。

「次へ」を押下すると即座に有効化されます。

他アプリで使っている署名鍵を再利用することもできます。

既存アプリの場合

1. Google Play Consoleのアプリの署名を開く

Google Play Consoleの左カラムの「リリース管理」の「アプリの署名」を開きます。

ちなみに「リリース管理」の「アプリのリリース」にも以下のような表示があるので「使ってみる」を押すと「アプリの署名」のページに遷移します。

2. 秘密鍵のエクスポートと暗号化

PEPK(Play Encrypt Private Key)ツールをダウンロードするボタンがあるのでダウンロードして秘密鍵のエクスポートと暗号化を行います。なお、PEPKツールは、Google Play アプリ署名への登録手続きの際に、秘密鍵をJava Keystoreからエクスポートし、Google Playへの送信前に暗号化するツールです。

PEPKツールをダウンロードしたら実行します。

$ java -jar pepk.jar --keystore=foo.keystore --alias=foo --output=encrypted_private_key_path --encryptionkey=*****
Enter store password:
Enter key password:

このコマンドで使われているオプションは以下のとおりです。

  • keystore : 秘密鍵のファイル名を指定します
  • alias : 秘密鍵のエイリアスを指定します
  • output : 暗号化されたアプリ署名の出力先を指定します
  • encryptionkey : 暗号化キーです(これはGoogle Play Consoleに記載されているものをそのまま指定します)

もしaliasが分からない場合はAndroid Studioのメニューから「Build > Generate Signed APK」を選択して確認できます。

3. 暗号化されたアプリ署名の秘密鍵をアップロード

アップロードホタンがあるので前の手順で作成した暗号化されたアプリ署名の秘密鍵をアップロードします。

4. アップロード鍵の生成

新しくアップロード鍵を生成します。

詳しくは「アプリの署名 | Android Studio」の「キーとキーストアを生成する」の項目を参照してください。

5. アップロード鍵の証明書をPEM形式でエクスポート

続いて、アップロード鍵の証明書をPEM形式でエクスポートします。

$ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
Enter keystore password:
Certificate stored in file <upload_certificate.pem>

このコマンドで使われているオプションは以下のとおりです。

  • keystore : アップロード鍵のファイル名を指定します
  • alias : アップロード鍵のエイリアスを指定します
  • file : アップロード鍵の証明書の出力先を指定します

6. アップロード鍵の証明書をアップロード

以下のようなアップロードホタンがあるのでクリックして、前の手順で作成したアップロード鍵の証明書をアップロードします。

アップロード後に登録ボタンを押下します。

登録後に以下の表示が出ていればOKです。

これらの操作によりGoogle Play App Signingを有効化した後は、今まで使っていた秘密鍵ではなくアップロード鍵で署名する必要があります。

注意点

Google Play App Signingを利用するうえでは、以下の2点に注意が必要です。

  • アプリ署名のオプトイン(Google Play App Signingの利用)は取り消しできません
  • アップロード鍵を紛失して再度登録(変更)したい場合は、「アプリ署名鍵を管理する - Play Console ヘルプ」に記載されている問い合わせ窓口へ連絡する必要があります

まとめ

今回は、Google Play App Signingについて紹介しました。

既存の鍵管理方法のリスクとGoogle Play App Signingのメリットおよび利用方法がおわかりいただけたかと思います。

アプリ署名キーとキーストアの管理を(Google Play App Signingを使わずに)自分で行う場合、アプリ署名キーの保護は、デベロッパーとユーザーの両者にとって非常に重要です。別の人にキーの使用を許可したり、キーストアとパスワードを第三者が使用できるような安全ではない場所に置いたりすると、作成者本人であるという保証がなくなり、ユーザーの信頼を失います。

また、第三者が開発者の知らないうちに、あるいは許可なくキーを取得した場合、本物のアプリを不正に置き換えたり、破損させたりした後に署名し、配布するおそれがあります。加えて、開発者のIDで他のアプリやシステム自体を攻撃したり、ユーザーデータを破損したり盗んだりするアプリに書き換えて、署名/配布する可能性もあります。

こういったリスクを軽減するためにも、既存の管理方法が適切なのか、再度チーム内で議論していただく必要があるでしょう。Google Play App Signingはそうした対策の一つになりうるツールです。ぜひ本稿を参考に検討してみてください。

鍵の管理は考慮すべきセキュリティリスクの一つです。Androidエンジニアにとって重要なポイントなので、常に情報をキャッチアップして、安全に利用できるアプリを開発していきましょう。

著者紹介


小和瀬 塁(こわせ るい)
- ヤフー 決済金融カンパニー Androidエンジニア

2012年にヤフーへ新卒入社。C向け決済サービス及び官公庁向けサービスの開発・運用に従事。2015年より金融系サービス開発・運用担当後、2016年より同サービスのAndroidアプリ開発を担当。