0.前回までの実施内容
前回の記事(Androidアプリ公開方法まとめ 【第三回】アプリ公開準備 画像編)では、
アプリを公開するために必要な画像の準備をおこないました。
今回は、アプリ公開するために必要なアプリファイル(APKファイル)の準備を行います。
第一回で説明したアプリ公開手順は以下となります。
【アプリ公開手順】
- デベロッパーアカウントの取得
- アプリのスクリーンショット(2枚)の準備
- アイコンの準備
- 宣伝用画像の準備
- アプリへ署名付与
- アプリの登録
今回は、「5. アプリへ署名付与」の署名付与の概要を説明していきます。
1.署名付与とは?
アプリを公開するためには、アプリに対し署名を付与する必要があります。
署名付与はどういう意味があり、なぜ必ず必要なのかということについて、調査しまとめたいと思います。
- 署名とは?
- 受信者が持っている公開鍵に対する秘密鍵を知っているのは送信者のみであり、送信者以外にはデータのハッシュ値を暗号化して送付することは不可能(送信元の認証)
- 送信データから算出されるハッシュ値と受け取ったハッシュ値が同一ということは、受信したデータは送信者が意図したデータから変更がない(改ざん不可)
- アプリ署名の役割
- アプリケーションの作者を識別する
- アプリケーション間で信頼関係を確立する手段
まずは署名とは何なのかという説明をします。
一般的な署名は、書類などの提出の際に自分の名前を書き本人であることを証明します。
PCでもあるデータを受け渡すときに、受け渡し元が本人であることを証明するために署名をします。
それがディジタル署名です。アプリの署名付与ではディジタル署名をします。
ディジタル署名の役割は、送信元や発信元の保障、データの改ざん防止の役目を担っています。
ディジタル署名の仕組みについて、下記の図を使用し概要を説明をしていきます。
【ディジタル署名仕組み】
① 送信者はデータからハッシュ値を作成します。
② ハッシュ値は偽装できないように秘密鍵で暗号化します。
③ 元データだけでなく暗号化されているハッシュ値をディジタル署名として一緒に送付します。
④ 受信者は、暗号化されているハッシュ値を公開鍵で復号化します。
⑤ データからハッシュ値を生成します。
⑥ その二つを比較することで、送信者が正しいこととデータが改ざんされていないことを検証します。
手順⑥で送信者が正しいこととデータが改ざんされていないことが検証できる理由は下記になります。
署名付与する理由を調べると、下記の理由があることがわかります。
・アプリケーションの作者を識別する
証明書(署名されたデータが公開鍵のペアとなる秘密鍵で作成されたという証明)の
使用箇所を調べるとアプリのバージョンアップ時に使用されます。
初期インストール時には署名されていることを確認しますが、そこで直接使用されるわけではないようです。
署名をバージョンアップ時に検証する理由は下記のことからだと思われます。
Androidのアプリはソースに戻すことが容易かつGoogle Play以外でも配布することが可能です。
その状況で署名がない場合、悪意を持った攻撃者がアプリの改ざんを行ったサイトを準備し、
そこからアプリをアップデートさせることが可能となってしまいます。
そのようなことを防ぐために、アプリバージョンアップ時には署名を使用し、
作者が意図したアップデートであることを検証しています。
そのため、バージョンアップ時のアプリの署名では、初期バージョンと同一の証明書を付与します。
バージョンアップ前の証明書とバージョンアップ後の証明書が同一であることを検証することで、
その署名が正しいことを保障し、その署名で改ざんがないかどうかチェックすることができます。
・アプリケーション間で信頼関係を確立する手段
証明書の使用箇所を調べると、アプリ間のデータアクセス制御やユーザIDの共有時に使用されます。
あるアプリのデータを別のアプリと共有したい場合は同じ証明書であることを
確認することで制御しています。
そのため、アプリでのデータ共有等を考えている場合、各アプリ登録時に同一の証明書で
署名する必要があります。
2.次回の予定について
今回はアプリをGoogle Play にアップロードするAPKファイルに付与する署名について説明しました。
次回はAPKファイルの作成手順を説明します。