Android のセキュリティーを理解する

サンドボックス、アプリケーションへの署名、パーミッションを使用してアプリケーションのセキュリティーを強化する

Android アプリケーションを開発する場合、セキュリティーに関連するいくつもの側面に対処しなければなりません。例えば、アプリケーションのプロセスとサンドボックス、コードやデータの共有、アプリケーションに署名することによるシステム保護、パーミッションの使い方などを考慮する必要があります。この記事では、サンプル・コードを扱いながら、こうした Android アプリケーション開発におけるセキュリティーの側面に焦点を当てます。

はじめに

Android の構成要素には、アプリケーション・フレームワーク、アプリケーション・ライブラリー、Dalvik 仮想マシン・ベースのランタイムがあり、それらがすべて Linux® カーネル上で実行されます。Linux カーネルを活用することで、Android はオペレーティング・システムによるサービスをいくつも利用しています。例えばプロセスやメモリーの管理、ネットワーク・スタック、ドライバー、ハードウェア抽象化レイヤー、そしてこの記事のトピックに関連するセキュリティー・サービスなどを利用しています。

よく使われる頭文字語

  • ADT: Android Development Tools
  • API: Application Program Interface
  • IDE: Integrated Development Environment
  • JDK: Java Development Kit
  • URI: Uniform Resource Identifier
  • XML: Extensible Markup Language

前提条件

この記事の内容に従って読み進めていくためには、以下のスキルやツールが必要です。

  • Java™ 技術の基礎知識と Eclipse (または読者のお気に入りの IDE) の使い方に関する基礎知識
  • Java Development Kit (バージョン 5 または 6 が必要です)
  • Eclipse (バージョン 3.4 または 3.5)
  • Android SDK と ADT プラグイン

ダウンロードとセットアップに関しては、この記事の最後にある「参考文献」セクションを参照してください。


サンドボックス、プロセス、パーミッション

Linux と Android でのユーザー ID の違い

ユーザー ID は、Linux ではユーザーを特定しますが、Android ではアプリケーションを特定します。Android では、ユーザー ID はアプリケーションがインストールされると割り当てられ、そのアプリケーションが Android 機器上に存在している限り維持されます。パーミッションというのは、機器上のリソースへのアクセスを (ユーザーに対してではなく) アプリケーションに対して許可または制限することを言います。

Android はサンドボックスという概念を使用してアプリケーション間を強制的に分離し、またパーミッションの概念を使用してアプリケーションから機器のリソース (ファイルおよびディレクトリー、ネットワーク、センサー、API 全般など) へのアクセスを許可または拒否しています。このように Android では、プロセス・レベルのセキュリティーや、アプリケーションに関連付けられたユーザー ID とグループ ID、アプリケーションによって実行可能な処理を制限するためのパーミッション、といった Linux の機能を利用しています。

サンドボックスの概念は図 1 のように表わすことができます。

図 1. 2 つの Android アプリケーションが、それぞれ独自の基本的なサンドボックスまたはプロセス上で実行されている様子
2 つの Android アプリケーションが、それぞれが独自の基本的な (異なるユーザー ID の) サンドボックスまたはプロセス上で実行されている様子を示す図

Android アプリケーションはそれぞれ独自の Linux プロセス上で実行され、また一意のユーザー ID が割り当てられます。デフォルトで、アプリケーションは基本的なサンドボックス・プロセスの中で実行され、何もアクセス許可が付与されません。そのため、それらのアプリケーションがシステムやリソースにアクセスすることはできません。ただし Android アプリケーションは、そのアプリケーションのマニフェスト・ファイルを使ってアクセス許可を要求することができます。

Android アプリケーションは他のアプリケーションに対し、そのアプリケーションのリソースへのアクセスを許可することができます。そのための方法には以下の 2 つがあります。

  • マニフェストの中で適切なパーミッションを宣言する
  • 信頼できる他のアプリケーションと同じプロセス内で実行し、アプリケーションのデータとコードへのアクセスを共有する。

後者の方法を示したものが図 2 です。

図 2. 2 つの Android アプリケーションが同じプロセス上で実行されている様子
2 つの Android アプリケーションが同じプロセス上で実行されている図 (デジタル署名と Linux ユーザー ID は 2 つのアプリケーションで同じです)

異なるアプリケーションを同じプロセス内で実行させることができます。この方法を使う場合、まず同じ秘密鍵を使ってそれらのアプリケーションに署名し、さらにマニフェスト・ファイルを使ってそれらのアプリケーションに同じ Linux ユーザー ID を割り当てる必要があります (そのためにはマニフェスト・ファイル内の属性 android:sharedUserId に同じ値あるいは同じ名前を指定する必要があります)。


開発者をアクターとするユースケース

図 3 は、Android アプリケーションを開発する場合の、開発者をアクターとするセキュリティー関連のユースケースを示しています。

図 3. Android アプリケーションをプログラミングする際に考えられるセキュリティー領域
Android アプリケーションをプログラミングする際に考えられるセキュリティー領域が示された図
  • アプリケーションまたはコードへの署名というのは、秘密鍵と公開鍵の生成、公開鍵の証明書の生成、アプリケーションへの署名、アプリケーションの最適化、といったプロセスを指します。
  • パーミッションは Android プラットフォームのセキュリティー・メカニズムです。パーミッションにより、アクセス制限のある API やリソースに対してアプリケーションからアクセスできるか、あるいはアクセスが制限されるかが指定されます。デフォルトで、Android アプリケーションにはアクセス許可が付与されません。そのため、アプリケーションはデフォルトでは機器上の保護された API やリソースにアクセスすることができず、これらの API やリソースの安全が保たれます。アクセス許可は必要に応じて要求しなければならず、カスタムでパーミッションを定義し、ファイルやコンテンツのプロバイダーを保護しなければなりません。また、実行時には必ずパーミッションのチェック、適用、そしてアクセス許可の付与や取り消しが行われるようにする必要があります。

次に、各セキュリティーの領域を詳細に調べてみましょう。


アプリケーションへの署名

すべての Android アプリケーションには署名が必要です。アプリケーションまたはコードへの署名というのは、指定されたアプリケーションに対し、秘密鍵を使ってデジタル署名するプロセスを指します。このプロセスの目的は以下のとおりです。

  • コードの作成者を識別する
  • アプリケーションが変更されていないかどうかを検出する
  • アプリケーション間の信頼関係を確立する

この信頼関係により、アプリケーション同士がセキュアな方法でコードとデータを共有することができます。

同じデジタル署名を使って署名されたアプリケーション同士は、互いに署名ベースの API へのアクセスを許可します。またそれらのアプリケーション同士がユーザー ID を共有している場合には、それらのアプリケーションは同じプロセス内で実行することができ、互いに相手のコードとデータにアクセスすることができます。

アプリケーションに署名する場合には、まず秘密鍵と公開鍵のペア、そして関連する公開鍵証明書 (デジタル証明書とも呼ばれます) を生成します。

Android アプリケーションを扱う場合、アプリケーションのビルド方法にはデバッグ・モードとリリース・モードがあります。

  • Android のビルド・ツール (コマンドラインと Eclipse ADT) を使ってビルドされたアプリケーションはデバッグ用の秘密鍵を使って自動的に署名され、これらのアプリケーションはデバッグ・モードのアプリケーションと呼ばれます。デバッグ・モードのアプリケーションはテスト用であり、配布すべきものではありません。署名されていないアプリケーションやデバッグ用の秘密鍵を使って署名されたアプリケーションを Android マーケットを通じて配布することはできないことに注意してください。
  • アプリケーションをリリースする準備が整ったら、そのアプリケーションのリソース・モードのバージョンを作成する必要があります。つまり秘密鍵によってそのアプリケーションに署名する必要があります。

Android でのコードへの署名は、他のモバイル・プラットフォームの場合よりもはるかに単純に行われます。Android では自己署名の証明書を使用することができます。つまり認証機関が必要ありません。この手法によって公開プロセスが単純になり、それに伴う作業が省かれます。

次に、Android アプリケーションに手動で署名する方法として、コマンドラインから行う方法と Eclipse ADTを使って行う方法を説明します。この記事では、第 3 の方法である Ant を使う方法については説明しません。

秘密鍵と公開鍵、公開鍵証明書を手動で作成する

ここで、デバッグ・モードのアプリケーションはデバッグ用の鍵と証明書を使ってビルド・ツールによって自動的に署名されることを思い出してください。リリース・モードのアプリケーションに署名するためには、まず秘密鍵と公開鍵のペア、そして公開鍵証明書を生成する必要があります。アプリケーションに手動で署名することも、Eclipse ADT を使って署名することもできます。どちらの場合にも、鍵と証明書の管理ユーティリティーとして Java Developer Kit (JDK) の keytool を使用します。

秘密鍵と公開鍵の情報を手動で生成するためには、コマンドラインでリスト 1 のように keytool を使用します。

リスト 1. keytool を使って秘密鍵と公開鍵、証明書を生成する
keytool -genkey -v -alias <alias_name> -keystore <keystore.name> 
-keyalg RSA -keysize 2048 -validity <number of days>

注:リスト 1 は、JDK がコンピューターにインストールされていること、また JAVA_HOME パスが JDK のディレクトリーを指すように適切に定義されていることを前提にしています (ダウンロードとセットアップに関しては「参考文献」を参照してください)。

リスト 1 で、-genkey は公開鍵と秘密鍵のペアのエントリー、そして X.509 v1 による単一要素の自己署名証明書チェーン (ここには生成された公開鍵が含まれます) を示します。-v は詳細モードを示します。-alias は、生成された秘密鍵と証明書を保存する鍵ストアのエントリーとして使われるエイリアスです。-keystore は使用する鍵ストアの名前を示します。-keyalg は鍵のペアを生成するために使われるアルゴリズムです。-keysize は生成される鍵のサイズであり、デフォルトは 1024 ですが、2048 が推奨のサイズです。そして -validity は日数で表した有効期限です。1000 を超える値が推奨です。

注: 鍵を生成したら、秘密鍵を保護することが非常に重要です。秘密鍵を共有してはならず、またコマンドラインやスクリプトで秘密鍵を指定してはなりません (keytool や jarsigner では、パスワードの入力が促されることに注意してください)。こうしたヒントや他のヒントに関しては、Android Developers サイトの「秘密鍵のセキュリティ設定」を参照してください (「参考文献」にリンクがあります)。

keytool で入力を要求される項目には、苗字と名前、組織、市町村、州、X.500 識別名が生成された国 (詳細は「参考文献」を参照)、秘密鍵と鍵ストア自体を保護するためのパスワードがあります。

有効期限に関しては、対象のアプリケーションや関連アプリケーションの想定存続期間を超える期限を指定するようにします。Android マーケットにアプリケーションを公開する場合には、有効期限が切れるのは 2033年 10月 22日以降になるようにしなければなりません。そうしないとアプリケーションをアップロードすることができません。また、証明書の有効期限が長ければ、アプリケーションをアップグレードする際に楽です。幸い、Android マーケットではそうしたことを踏まえ、有効期限の長い証明書を強制しています。

アプリケーションに手動で署名する

次に、署名されていないアプリケーションに対し、JDK の一部である jarsigner ツールを使って署名します。

jarsigner -verbose -keystore <keystore.name> <my_application.apk> <alias_name>

上記のコードで、-verbose は詳細モードを示し、-keystore は使用する鍵ストアの名前を示しています。それに続くのはアプリケーションの名前 (.apk) であり、最後は秘密鍵用に使用するエイリアスです。

jarsigner は鍵ストアと秘密鍵を使うためのパスワードを入力するように促します。

アプリケーションには、異なる鍵を使って何度も署名することができます。また同じ秘密鍵を使って署名されたアプリケーション同士は相互に信頼関係を確立することができ、同じプロセス内で実行すること、そしてコードとデータを共有することができます。

アプリケーションを手動で最適化する

署名プロセスの最後のステップとして、アプリケーションを最適化します。これにより、ファイルの先頭に合わせてデータ境界のメモリー・アライメントが行われます。この手法によって実行時のパフォーマンスが向上し、メモリーの使い方が改善されます。アプリケーションのアライメント調整をするためには zipalign を使用します。

zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

上記のコードで、-v は詳細出力を示します。数字の 4 は、4 バイトのアライメントを使用する (常に 4 バイトを使用する) ことを示しています。次の引数は、入力される署名済みアプリケーション (.apk) のファイル名です。このアプリケーションは秘密鍵を使用して署名されている必要があります。そして最後の引数は出力のファイル名です。既存のアプリケーションを上書きする場合には -f を追加します。

アプリケーションが署名されていることを手動で検証する

アプリケーションが署名されていることを検証するためには jarsigner を使用し、この場合は -verify フラグを渡します。

jarsigner -verify -verbose -certs my_application.apk

上記のコードで、-verify はアプリケーションを検証することを示します。-verbose は詳細モードを示します。-certs は鍵を作成した人の CN フィールドを示し、最後の引数は検証対象の Android アプリケーション・パッケージの名前です。

注: CN を読み取った結果が「Android Debug」の場合には、そのアプリケーションはデバッグ用の鍵を使って署名されていることを意味し、そのアプリケーションを公開することはできません。アプリケーションを Android マーケットに公開する予定の場合には、秘密鍵を使うことを忘れないでください。

ここまでは秘密鍵と公開鍵を手動で作成する方法と、アプリケーションへの署名とアプリケーションの最適化を手動で行う方法を説明しました。次は、Eclipse ADT を使って自動的に秘密鍵と公開鍵を作成する方法と、アプリケーションへの署名とアプリケーションの最適化を自動的に行う方法を調べてみましょう。


Eclipse ADT を使って鍵と証明書を作成し、アプリケーションへの署名とアプリケーションの最適化を行う

Eclipse ADT を使って鍵を生成するためには、アプリケーションをエクスポートする必要があります。Eclipse からアプリケーションをエクスポートするには以下の 2 つの方法があります。

  • 署名されていないアプリケーションをエクスポートする方法 (手動でアプリケーションに署名する必要があります)
  • 署名済みのアプリケーションをエクスポートする方法 (ADT がすべてのステップを行ってくれます)

署名されていないアプリケーションをエクスポートする

署名されていないため、手動で署名が必要なアプリケーションをエクスポートすることができます。そのためには、手動で keytool を実行し (先ほど説明した方法で鍵を生成し)、Jarsigner を実行し (アプリケーションに署名し)、zipalign ツールを使ってアプリケーションを最適化する必要があります。これは先ほど説明したとおりです。

署名されていないアプリケーションを ADT を使ってエクスポートするためには、そのプロジェクトを右クリックし、「Android Tools (Android ツール)」 > 「Export Unsigned Application Package (署名されていないアプリケーション・パッケージをエクスポート)」の順に選択します (図 4)。

図 4. 署名されていないアプリケーションをエクスポートする
署名されていないアプリケーションをエクスポートする画面のスクリーン・キャプチャー

対象のアプリケーションを選択すると、ADT は署名されていないアプリケーションのエクスポート先のディレクトリーを指定するように促します。先ほど説明したように、アプリケーションをエクスポートしたら、アプリケーションへの署名とアプリケーションの最適化を手動で行う必要があることを忘れないでください。

署名済みのアプリケーションをエクスポートする

Eclipse ADT を使用すると、署名済みのアプリケーションをエクスポートすることができます。この方法を使う場合、ADT では以下の情報を入力するように要求されます。

  • 既存の鍵ストアを使うために必要な情報、または保護された新しい鍵ストアを作成するために必要な情報
  • 保護された秘密鍵を作成するために必要な情報
  • 公開鍵証明書を生成するために必要な情報

署名済みのアプリケーションをエクスポートするためには、そのプロジェクトを右クリックしますが、この場合はメニュー項目として「Android Tools (Android ツール)」 > 「Export Signed Application Package (署名済みのアプリケーション・パッケージをエクスポート)」の順に選択します (図 5)。

図 5. 署名済みのアプリケーションをエクスポートする
署名済みのアプリケーションをエクスポートする画面のスクリーン・キャプチャー

この時点でエクスポート・ウィザードが実行されます (図 6)。

図 6. エクスポート・ウィザード
エクスポート・ウィザードのスクリーン・キャプチャー

図 7 のように、既存の鍵ストアを使うか、あるいは新しい鍵ストアとクレデンシャルを作成して使うかのいずれかを選択します。

図 7. エクスポート・ウィザード: 鍵ストアを選択する
エクスポート・ウィザードで鍵ストアを選択する画面のスクリーン・キャプチャー

図 8 のように、秘密鍵とデジタル証明書を作成するための情報を入力します。

図 8. エクスポート・ウィザード: 秘密鍵とデジタル証明書を作成する
エクスポート・ウィザードで秘密鍵とデジタル証明書を作成する画面のスクリーン・キャプチャー

図 9 のように、エクスポート先のファイルのパスと名前を入力し、有効期限を確認します。

図 9. エクスポート先のファイルのパスと名前を入力する
エクスポート先のファイルのパスと名前を入力する画面のスクリーン・キャプチャー

以上を終了すると、リリース・モードで署名され、最適化されたアプリケーションができあがり、このアプリケーションを公開することができます。

あるいは、Android Manifest ツールを使ってエクスポート・ウィザードを呼び出すこともできます (図 10)。

図 10. Android Manifest ツールを使ってエクスポート・ウィザードを呼び出す
Android Manifest ツールを使ってエクスポート・ウィザードを呼び出す画面のスクリーン・キャプチャー

アプリケーションへの署名が終わると、次のステップはアプリケーションに必要なパーミッションをマニフェストの中で定義することです。このプロセスを次に説明します。

Android Developers のサイトには、アプリケーションへの署名についての非常に優れたドキュメントがあることに注意してください。これらのドキュメントは Android プラットフォームの新しいリリースが公開されるたびに、常に最新の情報に更新されています (「参考文献」を参照)。


パーミッションを使用する

パーミッションは Android プラットフォームのセキュリティー・メカニズムです。パーミッションにより、アクセス制限のある API やリソースに対してアプリケーションからアクセスできるか、あるいはアクセスが制限されるかが指定されます。デフォルトで、Android アプリケーションにはアクセス許可が付与されません。そのため、アプリケーションはデフォルトでは機器上の保護された API やリソースにアクセスすることができず、これらの API やリソースの安全が保たれます。アプリケーションはマニフェスト・ファイルを通じてアクセス許可を要求します。アクセス許可を付与するかしないかは、そのアプリケーションのインストール時にユーザーによって決められます。

Android では、マニフェストにパーミッションの長いリストが定義されており、システムのさまざまな側面や他のアプリケーションを保護するための設定を行っています。アクセス許可を要求するためには、マニフェスト・ファイルの中で以下のように <user-permission> 属性を宣言します。

<uses-permission android:name="string" />

ここで、android:name はパーミッションの名前を指定しています。

Android のマニフェストで指定されるパーミッションの一覧については Manifest.permisson ページを参照してください。リスト 2 に示すマニフェスト・ファイルの例では、インターネットを使うためのパーミッションと外部ストレージに書き込むためのパーミッションを宣言 (アクセス許可を要求) しています。

リスト 2. パーミッションを宣言 (アクセス許可を要求) する
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      android:versionCode="1"
      android:versionName="1.0"
      package="com.cenriqueortiz.tutorials.datastore" 
      android:installLocation="auto">

    <application 
        :
        :
        :
    </application>

    <uses-permission 
        android:name="android.permission.INTERNET"/>
    <uses-permission 
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

アプリケーションは、アプリケーション独自のカスタム・パーミッションを定義してアプリケーションのリソースを保護することができます。あるアプリケーションによって保護されたリソースに他のアプリケーションからアクセスする場合には、アクセスを要求する側のアプリケーション自体のマニフェスト・ファイルを使って適切なアクセス許可を要求する必要があります。リスト 3 は、パーミッションを定義する方法の一例を示しています。

リスト 3. カスタムのパーミッションを宣言する
<permission
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:name="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
        android:description="@string/permission_description"
        android:label="@string/permission_label"
        android:protectionLevel="normal"
    >
</permission>

リスト 3 では、最低限の属性 (namedescriptionlabelprotectionLevel) を指定することでカスタムのパーミッションを定義しています。他にも属性を定義することはできますが、ここでは説明を省略します。

特に興味深いのは android:protectionLevel 属性です。この保護レベル属性は、アクセスを要求しているアプリケーションに特定のアクセス許可を付与する (または付与しない) 場合に、システムが従わなければならない指針を示します。保護レベルの例として、normal があります。normal では、自動的にアクセス許可を付与し (ただしユーザーはインストール前にいつでもアクセス許可を見直すことができます)、署名に基づいてアクセス許可を付与します (これはアクセスを要求しているアプリケーションとアクセス対象のアプリケーションが同じ証明書を使って署名されている場合です)。また dangerous という保護レベルは、そのパーミッションによって非公開データにアクセスできるようになるか、あるいはそれ以外にマイナスの影響がありうることを意味します。<permission> マニフェスト属性についての詳細は、<permission> のページを参照してください (「参考文献」を参照)。

アプリケーションは、そのアプリケーションへのアクセスや、そのアプリケーションが使用するシステム・コンポーネント (アクティビティー、サービス、コンテンツ・プロバイダー、ブロードキャスト・レシーバーなど) へのアクセスを制限することができます。そうした制限をするには android:permission 属性を定義するだけの簡単なものです (リスト 4)。この保護レベルでは、アプリケーションは他のアプリケーションからシステム・リソースへのアクセスを許可または制限することができます。

リスト 4. アクティビティーに対するパーミッションを定義する
<activity 
    android:name=".FriendsListActivity" 
    android:label="Friends List">
    android:permission="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
    <intent-filter>
        :
        :
    </intent-filter>        
</activity>

コンテンツ・プロバイダーとファイルのパーミッション

コンテンツ・プロバイダーは、そのプロバイダーのデータを一意に識別するパブリック URI を公開します (「参考文献」を参照)。そうしたコンテンツ・プロバイダーを保護するためには、呼び出し側はアクティビティーを開始する際に、あるいはアクティビティーの結果を返す際に、Intent.FLAG_GRANT_READ_URI_PERMISSIONIntent.FLAG_GRANT_WRITE_URI_PERMISSION を設定することにより、Intent の特定のデータの URI にアクセスする許可を受信側のアクティビティーに付与することができます。

アプリケーションのファイルはデフォルトで保護されています。ファイルはユーザー ID に基づいて保護されており、それらのファイルを所有するアプリケーション (それと同じユーザー ID を持つアプリケーション) のみがそれらのファイルにアクセスすることができます。先ほど説明したように、同じユーザー ID を共有する (そして同じデジタル証明書を使って署名された) アプリケーション同士は同じプロセスで実行され、従ってそれらのアプリケーションは互いのファイルにアクセスすることができます。

アプリケーションは、そのアプリケーションのファイルに対する他のアプリケーションまたはプロセスからのアクセスを許可することができます。そのためには、適切な動作モードとして MODE_WORLD_READABLEMODE_WORLD_WRITEABLE を設定し、ファイルへの読み書きアクセスを許可するか、あるいは MODE_PRIVATE を設定してプライベート・モードでファイルを開きます。動作モードを指定するためには、ファイルを作成する際または開く際に以下のメソッドを使用します。

  • getSharedPreferences(filename, operatingMode)
  • openFileOutput(filename, operatingMode)
  • openOrCreateDatabase(filename, operatingMode, SQLiteDatabase.CursorFactory)

ランタイム Permission API

Android には、実行時にパーミッションのチェック、適用、そしてアクセス許可の付与や取り消しが行われるようにするための API が用意されています。これらの API は、アプリケーション環境に関するグローバル情報を提供する android.content.Context クラスの一部です。例えば、グレースフルにパーミッションを処理する必要がある場合には、そのアプリケーションがインターネットへのアクセスを許可されているかどうかを判断します (リスト 5)。

リスト 5. 実行時にパーミッションをチェックするためのランタイム Permission API を使用する
if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
        != PackageManager.PERMISSION_GRANTED) {
            // The Application requires permission to access the  
            // Internet");
} else {
    // OK to access the Internet
}

実行時にパーミッションのチェック、適用、そしてアクセス許可の付与や取り消しが行われるようにするための他のパーミッション API に関しては、Context クラスを参照してください。


まとめ

この記事では Android プラットフォームのセキュリティーを紹介し、サンドボックス、アプリケーションへの署名、アプリケーションのパーミッション、ファイルやコンテンツ・プロバイダーのパーミッションなどを説明しました。次に、デジタル証明書を手動または Eclipse を使って作成する方法、アプリケーションのパーミッションを要求する方法、アプリケーションからファイルやコンテンツ・プロバイダーへのアクセスを許可または不許可にする方法を説明しました。また、実行時にパーミッションのチェック、適用、そしてアクセス許可の付与や取り消しが行われるようにするためのランタイム Permission API についても簡単に説明しました。

参考文献

学ぶために

  • Android Developers サイトで、Android の概要を説明した「What is Android?」の項目を読んでください。
  • Develop Android applications with Eclipse」(Frank Ableson 著、developerWorks、2008年2月) を読んでください。このチュートリアルからわかるように、Android アプリケーションを開発するために最も容易な方法は Eclipse を使う方法です。
  • Android 開発入門」(Frank Ableson 著、developerWorks、2009年5月) は Android プラットフォームを紹介し、基本的な Android アプリケーションのコーディング方法を説明しています。
  • X.509 証明書」で X.509 標準の資料を読んでください。X.509 標準には、どんな情報が証明書に入れられるのかが規定されており、それらの情報を書き込む方法 (データ・フォーマット) が説明されています。
  • 拡張パーミッションについての説明を読んでください。アプリケーションがユーザー・プロファイルの他の部分 (機密の場合もあります) にアクセスする必要がある場合、またはユーザーに代わって Facebook にコンテンツを公開する必要がある場合、そのアプリケーションは拡張パーミッションを要求する必要があります。
  • Android Developers サイトで「秘密鍵のセキュリティ設定」の項目を読み、秘密鍵のセキュリティーを維持する方法を学んでください。
  • Android Developers サイトで「アプリケーションへの署名」の項目を読み、モバイル機器ユーザーに公開する前に Android アプリケーションに署名する方法を学んでください。
  • Android Developers サイトの Manifest.permission のページには、Android のマニフェストによって定義されるパーミッションのすべてが一覧として説明されています。
  • Android Developers サイトで Content Providers の項目を読み、データの格納方法と取得方法、そしてすべてのアプリケーションからデータにアクセスできるようにする方法を学んでください。
  • Android Developers サイトで Context クラスの項目を読んでください。グローバル情報へのインターフェースである Context クラスを利用すると、アプリケーション専用のリソースとクラスにアクセスすることができます。
  • Android によるネットワーキング」(Frank Ableson 著、developerWorks、2009年6月) を読み、Android のネットワーク機能を学んでください。
  • Android で XML を扱う」(Michael Galpin 著、developerWorks、2009年6月) を読み、Android で XML を扱うためのオプションについて、またそれらのオプションを使って独自の Android アプリケーションを作成する方法を学んでください。
  • Under the Hood of Native Web Apps for Android」を読み、Android でのハイブリッド・アプリケーションについて学んでください。
  • Unlocking Android』(Frank Ableson 著、2010年 Manning Publications 刊) には Android 開発のすべての側面が説明されています。
  • Mobile Design and Development』(Brian Fling 著、2009年 O'Reilly Media 刊) を読み、モバイル製品を作成するための実用的なガイドライン、技術標準、手法、ベスト・プラクティスについて学んでください。
  • Android Developers サイトで Data Storage の項目を読み、アプリケーションのデータを永続化するための適切な方法を選択してください。
  • Android Developers サイトで Intent の項目を読み、実行すべき操作を抽象化して記述する方法を学んでください。
  • Android SDK のドキュメントから Android API に関する最新情報を入手することができます。
  • Android のスポンサーである、Open Handset Alliance のホームページを訪れてください。
  • developerWorks の XML ゾーンで XML に関するスキルを向上するためのリソースを入手してください。
  • My developerWorks で developerWorks のエクスペリエンスをパーソナライズしてください。
  • XML および関連技術において IBM 認定技術者になる方法については、IBM XML certification を参照してください。
  • developerWorks の XML ゾーンを XML の技術ライブラリーとして利用してください。広範な話題を網羅した技術記事やヒント、チュートリアル、技術標準、IBM Redbooks などが用意されています。また、他にも XML に関するヒント記事があります。
  • developerWorks の Technical events and webcasts で最新情報を入手してください。
  • 今すぐ Twitter に参加して developerWorks のツイートをフォローしてください。
  • developerWorks podcasts でソフトウェア開発者のための興味深いインタビューや議論を聞いてください。
  • developerWorks On demand demos をご覧ください。初心者のための製品インストール方法やセットアップのデモから、上級開発者のための高度な機能に至るまで、多様な話題が解説されています。

製品や技術を入手するために

  • マニフェスト・ファイルの説明の中の <permission> ページでパーミッションに関して学んでください。
  • 鍵と証明書の管理ツール、keytool を試してみてください。
  • JAR (Java Archive) ファイルに対する署名を生成し、また署名された JAR ファイルを検証するためのツール、jarsigner を入手してください。
  • 公式な Android Developers サイトを訪れ、Android SDK をダウンロードし、API の資料にアクセスし、また Android に関する最新ニュースを入手してください。バージョン 1.5 またはそれ以降であれば動作します。
  • Android open source project のサイトを訪れ、Android 互換の機器を作成するために必要なオープンソース情報とソース・コードを見つけてください。
  • Java Platform, Standard Edition の最新版、JDK 6 Update 21 を入手してください。
  • 最新の Eclipse IDE を入手してください。
  • IBM 製品の評価版をダウンロードするか、あるいは IBM SOA Sandbox のオンライン試用版で、DB2®、Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Open source
ArticleID=600360
ArticleTitle=Android のセキュリティーを理解する
publish-date=11162010