セキュリティアーキテクチャ
Rust/Tauri スタック、.rkvey v5 フォーマット、コンパートメント、遅延復号、脅威モデル。
QubKey のセキュリティは 多層アーキテクチャ と 多層防御(Defense in Depth) の原則に基づいています。ファイルシステム、.rkvey v5 フォーマット、暗号化、Rust アプリケーションコアが、保存からロック解除まで、あらゆる段階でシークレットを保護します。
各レイヤーは相互に補完する保証を提供します。システムレベルの保護(例:ディスク暗号化なし)が欠けていても、アプリケーション層と暗号化層は引き続きボルトを保護します。フォーマット v5 では、エントリのシークレットは 表示またはコピーするときだけ復号 されます — ボルトを開いたときや一覧表示時には復号されません。
インターフェース (React + Tauri)
- 保管庫
- フォルダー
- 検索
- ジェネレータ
- ワンタイムコード
- ダッシュボード
- 同期
- 共有
- ブラウザ拡張機能
Rust コア (QubKey コア)
- .rkvey v5 形式
- Argon2id の導出
- 認証された暗号化
- 検索インデックス
- 安全なコミット
- メモリーワイプ
- クラッシュリカバリー
ファイルシステム上の .rkvey v5 ファイル
- 前文
- 暗号化されたヘッダー
- 暗号化されたインデックス
- 秘密のコンパートメント
- 添付ファイル
- コミット履歴
セキュリティレイヤー
ロック解除フロー
ロック解除は厳密なパイプラインに従います:マスターパスワードが Rust コアに渡され、Argon2id がマスターキーを導出し、サブキーがヘッダーと B-Tree インデックスを復号します。エントリの コンパートメント(シークレット、添付)は暗号化されたままで、必要なときだけ 読み取られます。ロック時にはすべての鍵とシークレットがメモリから消去されます。
マスターパスワード + ソルト
.rkvey プリアンブル (平文)
- Rust コア (Tauri IPC) に組み込まれています - WebView に公開されることはありません
- プリアンブル (16 バイト) に格納されたランダム ソルト
Argon2id
- 64 MB RAM · 3 iter · p=4 (デフォルト `KdfParams`)
- GPU/ASIC耐性
- プラットフォームに応じて調整済み ~250 ~ 500 ミリ秒
マスターキー
256 ビット · `KeyManager::derive_master_key`
サブキーの導出
HKDF-SHA256(マスター、ソルト=ファイル∥エントリ、情報=種類)
ヘッダーキー
セキュアヘッダー
インデックスキー
B ツリー インデックス
コンパートメントキー
コンパートメント
AEAD復号化
- AES-256-GCM または XChaCha20-Poly1305
- ヘッダー、インデックス、コンパートメント (オンデマンド)
ロック解除後のメモリ
- リスト/ビュー: メタデータのみ
- シークレットと添付ファイルはオンデマンドでのみ復号化されます
ロック
- `KeyManager::clear_keys()` + ゼロ化
- シークレットが消去され、クリップボードがクリアされました
脅威モデル
QubKey はローカルパスワードマネージャーで最も一般的な脅威シナリオ向けに設計されています。下表は攻撃ベクトルと組み込みの対策(.rkvey v5 フォーマット)を示します。
| 脅威 | ベクトル | QubKey の対応 |
|---|---|---|
| 不正なファイルアクセス | .rkvey の盗難またはコピー | AEAD 暗号化 + Argon2id 導出 |
| ネットワーク窃取 | クラウド傍受 / MITM | Local-first:QubKey はシークレットをアップロードしません |
| データ破損 | 書き込み中のクラッシュ | 検証済み追記専用コミット + 起動時復旧 |
| ボルト改ざん | 手動でのファイル変更 | コンパートメントごとの AEAD 認証 + チェックサム |
| メモリダンプ(閲覧中) | ボルト解錠、一覧 / 表示 | 表示するまでシークレットは暗号化されたまま |
| 弱いマスターパスワード | オフライン総当たり | キャリブレーション済み Argon2id(約 500 ms)+ エントロピー計測 |
| パスワードの使い回し | 他サイトでの漏洩 | セキュリティダッシュボード(ローカル検出) |
| クリップボード漏洩 | シークレットのコピー | クリップボードタイムアウト(30 秒)+ ロック時消去 |
| サイドチャネル攻撃 | 暗号操作のタイミング | 定数時間実装(RustCrypto) |
ベストプラクティス
このモデルは、QubKey がアーキテクチャで直接対処する脅威をカバーします。最適な保護のため、QubKey とシステムのベストプラクティスを組み合わせてください:ディスク暗号化の有効化、OS の最新化、強力なマスターパスワード。
組み込み保護
| 領域 | QubKey がデータを保護する方法 |
|---|---|
| 保存時(at rest) | AEAD(AES-256-GCM / XChaCha20)、Argon2id 鍵、コンパートメントごとの独立鍵 |
| ボルト整合性 | 検証済み追記専用コミット、チェックサム、原子的書き込み |
| 機密性 | Zero-Knowledge:シークレットはデバイス上で暗号化されたまま |
| 遅延復号 | 一覧・表示ではシークレットなし;表示 / コピーは必要時のみ |
| 鍵導出 | キャリブレーション済み Argon2id(約 500 ms、64 MB)でマスターパスワードを保護 |
| アプリケーション | 分離された Rust コア、Tauri IPC 経由の UI、ロック時 Zeroization |
| ブラウザ拡張 | ローカル Native Messaging — 拡張機能はマスターパスワードを取得しません |
| 同期 | オプションの暗号化マルチデバイス同期(クラウドまたはセルフホスト)、または暗号化 .rkvey ファイル(クラウド、USB、NAS) |
信頼アーキテクチャ
Zero-knowledge
QubKey は複数の補完的なレベルで信頼を構成します:
-
アクセスはあなたが管理 — マスターパスワードと必要に応じて 復元キー がボルトへのアクセスを制御します。QubKey はそれらを読み取ったりリセットしたりできません。
-
システム統合 — QubKey は OS のセキュリティを利用します:ファイル権限、ディスク暗号化(FileVault、BitLocker、LUKS)、安全なストレージ(Keychain、Credential Manager)、プロセス分離。
-
Rust / UI 分離 — すべての暗号処理は Rust コア でコンパイル時メモリ安全性とともに実行されます。React UI は Tauri IPC で通信;WebView はマスターパスワードに直接アクセスできません。
-
慎重なメモリ処理(v5) — ロック解除時はヘッダーとインデックスのみ復号。シークレットと添付は明示的な操作(表示、コピー、ダウンロード)まで暗号化されたまま。ロック時:Zeroization とクリップボード消去。
-
ブラウザ拡張 — ローカル Native Messaging;拡張機能はマスターパスワードを取得しません。
保護機能
自動ロック
設定可能な非アクティブ時間後にボルトをロック(デフォルト:5 分)。Zeroization とクリップボード消去をトリガーします。
遅延復号
エントリのシークレットは表示またはコピーするときだけ復号されます。一覧と表示では保護フィールドは表示されません。
Zeroization
ロック時に RAM からシークレットを消去(Rust zeroize クレート);キャッシュをクリアし、必要時のみ一時的な復号。
クリップボードタイムアウト
30 秒後にクリップボードを自動消去。ボルト設定で変更可能。