# Android のデータストレージ

## 概要

この章では、モバイルセキュリティに不可欠な、認証トークンや個人情報など、機密データを保護することの重要性を説明します。ローカルデータストレージ用の Android API に注目し、ベストプラクティスを共有します。

ローカルストレージでの機密データを制限するか、可能な限り避けることが望ましいのですが、実際のユースケースではユーザーデータの保存が必要になることがよくあります。たとえば、ユーザーエクスペリエンスを向上するために、アプリは認証トークンをローカルにキャッシュし、アプリを起動するたびに複雑なパスワード入力を必要とすることを回避します。また、アプリは個人を識別できる情報 (PII) やその他の機密データを保存する必要があることもあります。

機密データは、デバイスや外部 SD カードなど、さまざまな場所に保存される可能性があり、適切に保護されていない場合、脆弱になる可能性があります。モバイルアプリで処理される情報を特定し、機密データとみなされるものを分類することが重要です。データ分類の詳細については「モバイルアプリケーションのセキュリティテスト」の章の [「機密データの特定」](https://coky-t.gitbook.io/owasp-mastg-ja/tesutogaido/0x04b-mobile-app-security-testing#identifying-sensitive-data) のセクションをご覧ください。包括的な情報については Android 開発者ガイドの [Security Tips for Storing Data](https://developer.android.com/training/articles/security-tips.html#StoringData) を参照してください。

機密情報開示のリスクには、情報解読、ソーシャルエンジニアリング攻撃 (PII が開示された場合)、アカウントハイジャッキング (セッション情報や認証トークンが開示された場合)、決済オプションのあるアプリの不正利用などがあります。

データ保護に加えて、あらゆるストレージソースからのデータを検証してサニタイズします。これは、データ完全性のために、正しいデータ型のチェックや、HMAC などの暗号制御の実装を含みます。

Android は、ユーザー、開発者、アプリケーションに合わせて調整された、さまざまな [データストレージ](https://developer.android.com/training/data-storage) 手法を提供しています。一般的な永続ストレージ技法には以下があります。

* 共有プリファレンス
* SQLite データベース
* Firebase データベース
* Realm データベース
* 内部ストレージ
* 外部ストレージ
* キーストア

さらに、データ保存をもたらす可能性があり、テストする必要があるその他の Android 機能には以下があります。

* ログ記録機能
* Android バックアップ
* プロセスメモリ
* キーボードキャッシュ
* スクリーンショット

適切なテストケースを実行するには、関連する各データ保存機能を理解することが不可欠です。この概要では、これらのデータ保存手法の概要を提示し、テスト担当者にさらに関連ドキュメントを示します。
