Androidにおけるセキュリティ設計と動作(前編)
3.2.2 署名が使用される場面
アプリケーションに付加された署名は、さまざまな場所で使用されます。具体的には、次のような場所で使用されます。
- アンドロイドマーケットでアプリケーションをバージョンアップするとき
アンドロイドマーケットでアプリケーションをバージョンアップする際、証明書が一致しているかどうかチェックされます。前のバージョンと証明書が異なる場合、新しいアプリケーションをアップロードすることはできません。このため、証明書(キーストアファイル)をなくしてしまうとバージョンアップができなくなります。 - 端末にインストールされたアプリケーションをバージョンアップするとき
アンドロイド端末にインストールされたアプリケーションをバージョンアップする際に、署名を照合することで同じ開発者が開発した同じアプリケーションであるかどうかがチェックされます。署名が一致した場合、以前のバージョンで作成されたファイルに新しいバージョンのアプリケーションがアクセスしてもセキュリティ上問題はないものと見なされるため、それらのファイルは削除されません。このような仕組みにより、バージョンアップ時に設定値などを維持することが可能になっています(図3-2)。
図3-2:バージョンアップダイアログ(クリックで拡大) |
- Googleマップを使用するとき
MapViewを利用して地図を表示する際には、Googleが提供しているGoogleマップサービスを利用する必要があります。サービスを利用するためには、証明書のMD5ハッシュ値をGoogleに提出してAPIキーを取得する必要があります。MapViewだけでなく他のサービスを組み合わせる場合についても、証明書のハッシュ値を使用する方式が増えていくものと予想されます。 - 複数のアプリケーションで同じユーザIDを指定したいとき
通常は、アプリケーションのインストール時にアプリケーション固有のユーザIDが割り当てられ、他のアプリケーションの情報にアクセスできないようになっています。ただし、証明書が一致している場合は、複数のアプリケーションを同じユーザIDで実行できます。この仕組みにより、特定のアプリケーション間で互いのデータに自由にアクセスできるようになります。 - 証明書によるアクセス制限をかけたいとき
特定の証明書で署名されているアプリケーションにのみ機能を提供したいときに使用します。コンテントプロバイダやサービスなど、他のアプリケーションに提供可能な機能を実装している場合は、同じ証明書を持つアプリケーションだけがその機能にアクセスできるように制限をかけられます。
3.2.3 デバッグキー
開発時にリリース証明書を使用する場合は、開発者全員にリリース証明書とパスワードを配布する必要があります。リリース証明書は厳重に管理する必要があるため、開発時に使用することは推奨されません。このため、アンドロイドでは開発時にデバッグ証明書を使用します。EclipseのADT(Android Development Tools)プラグインを利用すれば、デバッグ証明書が自動的に作成されるため、証明書の手配について心配する必要はありません。なお、このデバッグ証明書で署名されたアプリケーションをアンドロイドマーケットに公開することはできません。
デバッグキーが存在しない状態でアプリケーションをコンパイルすると、デバッグキーが自動的に作成されます。Windowsの場合は、C:\Users\\.android\debug.keystoreというファイルが作成されます※1。デバッグキーの内容はJDKに含まれているkeytoolを用いて確認できます。パスワードはandroidです。
※1 デバッグキーを作り直したい場合は、このファイルを削除してから再びコンパイルすると、新しいキーが作成されます。
リスト3-1 デバッグ証明書の内容
> keytool -list -v -keystoredebug.keystore キーストアのパスワードを入力してください: キーストアのタイプ: JKS キーストアのプロバイダ: SUN キーストアには1エントリが含まれます。 別名: androiddebugkey 作成日: 2011/07/14 エントリタイプ: PrivateKeyEntry 証明連鎖の長さ: 1 証明書[1]: 所有者: CN=Android Debug, O=Android, C=US 発行者: CN=Android Debug, O=Android, C=US シリアル番号: 4e1e636f 有効期間の開始日: Thu Jul 14 12:33:03 JST 2011 終了日: Sat Jul 06 12:33:03 JST 2041 証明書のフィンガープリント: MD5: 3D:07:DD:FB:D2:A3:2E:91:EA:10:1C:9B:80:DE:F0:D1 SHA1: 72:A2:E1:69:05:5D:7F:9A:AA:2C:68:67:C0:73:88:E0:5C:3A:BC:0C 署名アルゴリズム名: SHA1withRSA バージョン: 3
自動生成されたデバッグキーの有効期限は、以前は1年でしたが、現在は30年に変更されています。開発を1人で行う場合はユーザディレクトリに作成されたdebug.keyを使用しますが、開発者が複数いる場合は次のような問題があります。
- Googleマップを使用する場合の問題
Googleマップを使用する場合は、証明書のハッシュ値を使ってGoogleマップサービスからAPIキーを取得する必要があります。開発者ごとに別々の証明書を使用している場合は、開発者ごとにAPIキーを取得することになります。APIキーはソースコード内に記載する必要があるため、ソースコードが開発者ごとに異なってしまい、ソースコードの管理が複雑になります。 - 上書きインストールの問題
アプリケーションをテストする際には、テスト対象のアプリケーションを繰り返し作成することになります。証明書が異なる場合、他の開発者が作成したAPKを上書きインストールできないので、テスト担当者がアプリケーションを一度削除してから再度インストールするといった手間が発生します。
開発者が複数いる場合は、共通のデバッグキーを作成してすべての開発者が同じデバッグキーを使用するようにすることで、これらの問題に対処できます。各自のEclipseから[Window]→[Preferences]→[Android]→[Build]タブにアクセスし、[Custom Debug keystore]フィールドに共通のデバッグキーを設定できます(図3-3)。
図3-3:Eclipseのデバッグキーの設定画面(クリックで拡大) |