Google Play App Signing
重い腰を上げてGoogle Play App Signingに手を出しました。手順はググればいろいろ出てくるので割愛して、App Signingについての自分なりの理解をまとめてます。
アプリとデジタル署名
Google Playで公開するアプリはデジタル署名が必要で、デジタル署名には鍵が必要です。
署名はデベロッパーを識別したり、アプリケーション間で信頼関係を確立したりするのに使われます。署名には自己署名証明書が使えるので認証機関は不要。
ここまでが前段。
デジタル署名方式の問題点
この方式の最大の問題点は、アプリ署名鍵を紛失するとゲームオーバーになること。鍵をなくすとアプリのバージョンアップができなくなり、別アプリとしてリリースするしかなくなります。Googleに依頼してもダメ。
絶対になくせないので、なくしても大丈夫なように鍵のコピーをあちこちに置いておこう!とか、いっそSCMにコミットしちゃえ!みたいな運用になりがち。そうすると今度は鍵が流出するリスクが高まります。
鍵が流出すると悪意のある第三者が嘘のアップデートを行う、みたいなことができちゃうんですね。それはそれでかなりマズい。
「鍵は厳密に秘匿し、かつ絶対に紛失してはならない」というハードルの高い行為をデベロッパーが頑張らなきゃならないのです。
Google Play App Signingとは
App Signingはアプリ署名鍵をGoogleに預けて管理してもらう仕組み。秘匿と紛失対策をデベロッパーに代わってGoogleが頑張ってくれるわけです。
デベロッパーはアプリ署名鍵の代わりにアップロード鍵を使ってアプリに署名します。Google Playはアップロード鍵での署名をチェックし、OKならアプリ署名鍵で署名し直してGoogle Playで公開してくれます。
アップロード鍵はGoogleに連絡すると再発行できます。紛失したり漏洩したりしたら古い鍵を無効化して新しい鍵に取り替えることができるんですね。
これで「アプリ署名鍵を紛失するとゲームオーバー」という悪夢を回避できるわけです。
個人的なApp Signingのポイントとしては
- アカウント単位ではなくアプリ単位で有効にできる
- 一度App Signingを有効にすると元に戻せない(無効にできない)
- Googleに依頼すればアップロード鍵をリセットできる
- Android App Bundleを利用する場合はApp Signingの利用もマスト
あたり。既存のアプリがたくさんあるのでアプリ単位で有効にできるのはありがたい限り。少しずつ移行していくつもりです。
手順
一度有効にすると後戻りできないので慎重に。
ちょっと罠だな、と思ったのは「Google で自動的にアプリ署名鍵を作成、管理する(推奨)」がデフォルトになっているところ。しかもほかの選択肢は隠されているんですよね。
鍵の生成からGoogleに任せたい場合はデフォルトでいいんですが、自分で生成した鍵を使いたい場合は明示的に設定してあげる必要があります。ここも後戻りできないっぽいんで要注意です。
参考URL
- アプリケーションへの署名 | Android Developers
- 【連載】ヤフーのエンジニアが教える! アプリ開発で気をつけたいAndroidのセキュリティ [4] Google Play App Signingで安全な鍵運用を|セキュリティ|IT製品の事例・解説記事
- 【Android】Google Play App Signingのススメ
- Google Play App Signing
- 既存アプリにGoogle Play App Signingを対応させてハマったこと - Qiita
- Google Play App Signing有効化して、脱apk->aabにする際にハマったポイント - Qiita
関連(するかもしれない)記事
おススメ