🔒 Monica Android ローカルストレージ&暗号化技術ドキュメント
ゼロ知識アーキテクチャ (Zero-Knowledge Architecture)
Monica Android は、ローカルでの永続化および WebDAV バックアップ処理において、ユーザーの機密資産(パスワード、クレジットカード番号、2FA 鍵、セキュアノートなど)の絶対的な安全を確保するため、多層構造のフルディスクおよびフィールド(項目)レベルの階層型暗号化アーキテクチャを採用しています。システムコアは ゼロ知識アーキテクチャ(Zero-Knowledge) の原則に厳格に準拠しています。万が一デバイスを紛失したり、データベースファイルが抽出されたりした場合でも、攻撃者がユーザーのマスターパスワードを知らない限り、いかなる明文データも逆向(復元)することは不可能です。
1. ローカルデータストレージ
Monica は、明文での SQLite ストレージや信頼性の低い Key-Value(KV)構成を排除し、構造化されたデータ管理のために Google が推奨する Modern Android Development (MAD) のアーキテクチャ実践を全面的に取り入れています:
- コア永続化層:
Room Persistence Library(SQLite 上の高度な抽象化レイヤー)を介して実装され、高い凝集度を持つデータアクセスオブジェクト(DAO)を維持します。 - 物理ファイルの構造:データは、サンドボックス内に隔離された
password_database.dbファイルおよび関連する WAL(Write-Ahead Logging)ファイルに直接書き込まれます。 - 物理的隔離境界 隔離:データは、アプリケーションのプライベートな安全ディレクトリ(
/data/data/takagi.ru.monica/databases/)内に厳格に封じ込められます。ルート(Root)化されていないデバイスでは、外部の悪意あるプロセスはこのサンドボックス境界を越える権限を持たず、アクセスする手段もありません。
2. コア暗号化アーキテクチャ
2.1 アルゴリズム選定:AES-256-GCM
Monica のコア暗号化エンジンは、工業級の対称暗号化アルゴリズムである AES-256-GCM (Advanced Encryption Standard with Galois/Counter Mode) を採用しています。
なぜ GCM モードを選択するのか?
CBC などの伝統的なモードは機密性しか提供できず、ビット反転(Bit-flipping)攻撃などの改ざんに対して脆弱です。対照的に、GCM は AEAD (Authenticated Encryption with Associated Data) モードであり、以下の機能を提供します:
- 認証付き暗号:ペイロードを暗号化すると同時に、16 バイトの認証タグ(Authentication Tag)を生成します。
- 完全性検証:解凍(解読)時にランタイムが自動的にタグを検証します。暗号文または IV への微小な改ざんも即座に検知され、ランタイムのサーキットブレーカーが作動して復号処理を強制遮断(熔断)し、改ざんや中間者(MitM)注入を完全に無効化します。
2.2 機密データパイプライン (SecurityManager)
Room データベースの PasswordEntry 表内にある極めて機密性の高いフィールド(パスワード、秘密の質問の答えなど)に対して、Monica は I/O(読み書き)操作中に以下のライフサイクルルーチンをリアルタイムで実行します:
[明文データ] ➔ 12BのランダムIVを付与 ➔ [AES-256-GCM エンジン] ➔ (IV + 暗号文) として結合 ➔ Base64 エンコード ➔ DBへ書き込み- 永続化前の暗号化:エンジンは
SecurityManagerを介して生の文字列をインターセプトし、12 バイトの高エントロピーなランダム IV(初期化ベクトル)を動的に注入します。 - 複合ストレージ構造:ペイロードは、
Base64(IV + CipherText)としてフォーマットされた複合文字列として SQLite のセルに安全に書き込まれます。 - 読み込み時の復号:Room からデータを取得すると、エンジンは自動的に Base64 デコードを実行 ➔ 先頭 12 バイトの IV と後続の暗号文を分離 ➔ ハードウェア鍵と連携して明文を復元します。
3. マスターパスワードの派生とハードウェア級の鍵管理
3.1 高強度な鍵派生 (PBKDF2)
レインボーテーブルの照合やオフラインでの総当たり(ブルートフォース)攻撃を無効化するため、ユーザーのマスターパスワードはローカルに永続化されず、そのハッシュ値が保存されることもありません。代わりに、動的な鍵派生の最高源流(ルートシード)としてのみ機能します:
- コアプリミティブ:暗号学標準である
PBKDF2WithHmacSHA256(Password-Based Key Derivation Function 2) アルゴリズムを利用します。 - 反復指標 対総当たり攻撃:高額な
100,000回の暗号学的ハッシュ反復が設定されており、攻撃者がオフライン攻撃を行うための計算および時間コストを指数関数的に引き上げます。 - 動的ソルト保護:デバイスの初期化時に、16 バイトの暗号学的ソルト(Salt)がランダムにプロビジョニングされます。これにより、たとえ 2 人のユーザーが全く同じマスターパスワードを使用していても、派生される下位のルートキーは完全に独立したものになります。
3.2 ハードウェア安全区域による防衛 (Android KeyStore)
派生されたワークキー(作業鍵)や機密性の高いランタイム構成は、Jetpack Security インフラ(EncryptedSharedPreferences および MasterKey)によって強力に保護されています:
IMPORTANT
TEE / SE によるハードウェア隔離 根本となるマスターキー(Master Key)の生成およびその暗号化演算処理は、完全に隔離されたハードウェア境界内部、すなわち TEE(高度に隔離された信頼できる実行環境) または SE(セキュアエレメント) チップ内で閉鎖的に実行されます。したがって、たとえ Android OS のランタイムレイヤーが突破されたり、悪意をもってルート(Root)化されたりした場合でも、暗号化鍵を物理的なハードウェア基盤から剥離・抽出することはできません。
TIP
生体認証認可(BiometricPrompt) ランタイムは、ハードウェアの指紋認証モジュールや 3D 構造光による顔認証とスムーズに連携します。生体認証に成功すると、ハードウェアの安全区域が制限時間付きでワークキーを解放するため、長いマスターパスワードを頻繁に露出させる必要がなく、極上の利便性と厳格な安全性を両立できます。
4. 遠隔バックアップ暗号化仕様 (WebDAV)
自動または手動によるクラウド向けの WebDAV 非同期バックアップタスクがトリガーされると、Monica の AutoBackupWorker は独立した暗号化パイプラインを立ち上げます:
[サンドボックス内のコア JSON クラスタ]
⬇
[標準のバイナリ ZIP ストリームへパック]
⬇
[ユーザーが設定したバックアップパスワードを取得] ➔ [PBKDF2 100k反復による鍵派生]
⬇
[強固な AES-256-GCM 暗号化を注入]
⬇
[マジックヘッダー MONICA_ENC_V1 を付加] ➔ 独立した .enc.zip を生成 ➔ WebDAV へアップロード- アンチリプレイと脱関連化(防追跡):バックアップが実行されるたびに、高エントロピーなソルト(Salt)と固有の IV が個別に再生成されます。たとえバックアップするデータ内容が連続して全く同一であっても、クラウド上に生成される
.enc.zipアーカイブのバイナリ構造は完全に別物になり、クラウドプロバイダーがファイルサイズの物理的特徴などからユーザーのデータをプロファイリング(プライバシー逆向)するのを防ぎます。
5. 暗号化安全マトリクス概要
| セキュリティレイヤー | 採用技術・コンポーネント | 防御対象となる脅威ベクトル |
|---|---|---|
| ローカルデータの永続化 | AES-256-GCM (256-bit) | データベース抽出(ドラッグアウト)攻撃、物理的なビット反転改ざん、サイドチャネル注入 |
| マスターパスワード保護 | PBKDF2 + HMAC-SHA256 (100,000回反復) | オフラインの総当たり(ブルートフォース)攻撃、レインボーテーブル照合、辞書攻撃 |
| ランタイムキー保護 | Android KeyStore (TEE/SE 境界保護) | メモリダンプ(収集)攻撃、ルート権限によるファイル境界の越境窃取、物理チップの剥離・抽出 |
| クラウドデータストリーム | MONICA_ENC_V1 バイナリ流強暗号化 | クラウドインフラ(堅果雲/Nextcloudなど)の侵害、バックアップ通信経路における傍受・盗聴 |
