Androidのデジタル署名についてまとめ
はじめに
Google Playにアプリをアップロードする際に署名をしていると思いますが、僕は今まで「おまじない」として思考停止で使っていました。同じような人は結構いるんじゃないでしょうか。
そこでGoogle Playでの署名についてちゃんと調べ、まとめてみました。
署名プロセス
署名プロセスの基本は、
ファイルを転送する際に
送信側がファイルに署名して転送
受信側が受け取ったファイルの署名を検証
という流れです。
アプリ開発者が作成したアプリがユーザのデバイスにインストールされるまでには2回のファイル転送があります。
開発者がアプリをGoogle Playにアップロード
ユーザがアプリをGoogle Playにダウンロード
従って、署名-検証のプロセスも2回必要です。
2つの署名プロセス
ここで、もし1と2で同じファイルが転送されるだけならば、2では
I Google Playは特に署名せず検証のみ行い、問題なければ転送
II ユーザはGoogle Playと同じ検証鍵で再度検証
で問題ありません。
しかし、現状のGoogle Playの配信の仕組みでは1と2で転送されるファイルは同じではありません。
1 ではApp Bundleという形式、2ではapkという形式のファイルが転送されます。
これらの違いはリンク先などを参照いただきたいですが、今回の文脈においては
開発者はApp Bundleをアップロードして、Google PlayがApp Bundleからユーザのデバイスに合ったapkを作成して配信する、と理解してください。
アップロード鍵とアプリ署名鍵
話を戻すと、2において転送されるファイルは1で転送されるファイルとは異なるので、別途署名が必要になります。
1において開発者がApp Bundle署名に用いるのがアップロード鍵です。これは開発者が自分で作成、管理します。
ふだんkeytoolsで作っているのはこれです。
2においてGoogle Playがapkの署名に用いるのがアプリ署名鍵です。これはGoogle Playが作成、管理します。
まとめ
まとめると以下のようになります。
開発者は、アップロード鍵を用いてApp Bundleに署名し、Google Playにアップロード
Google Playは、App Bundleを検証
Google Playは、App Bundleからapkを作成
Google Playは、アプリ署名鍵でapkに署名し、ユーザのデバイスに配信
Comments