~~NOCACHE~~ ~~DISCUSSION~~ ## Bookmark Vault [[https://drive.google.com/file/d/164aCrjd-g5H7Lwatru_jqZSyZTEH2XZm/view?usp=drive_linkk|Bookmark Vault]] ## 概要 ブラウザ標準のブックマークは、URL一覧が丸見えのままローカルに保存されており、パスワード保存機能と同様に「PCへの覗き見・不正アクセス」への耐性がありません。 Bookmark Vaultは、パスワードでブックマークをAES-256-GCMで暗号化して保存するChrome拡張機能です。外部通信は一切行わず、すべてローカルのAPIだけで完結します。 ## 画面イメージ ### ポップアップ(登録・呼び出し画面) 拡張機能アイコンをクリックすると出る画面。パスワードを入力し、「bookmark」で今開いているタブを保存、「view」で一覧タブを開きます。 {{.:pasted:20260907-145147.png?nolink 200}} ### 一覧画面(タブ) 左にグループ一覧、右に選択中グループのブックマーク一覧。 {{.:pasted:20260907-145248.png?direct 500}} --- ## 主な機能 ### 🔑 パスワードごとに独立した「複数の一覧」 - パスワードが違えば、まったく別のブックマーク一覧として扱われます。 - 「どのパスワードがどの一覧に対応するか」を示す索引は一切保存しない。 - 未使用のパスワードを入力した場合はエラーにはならず、その場で新しい空の一覧が作られる。 - 「パスワードが正しいか」を画面上で判定・表示すること自体をしない設計にしており、覗き見や総当たりに対してヒントを一切出さない。 ### 🗂 グループ管理(ドラッグ操作) - ブックマークをグループ行へドラッグ&ドロップするだけで移動。 - 同じグループ内でもドラッグして並び替え可能。 - プルダウンやボタンでの移動操作は無く、ドラッグのみに統一。 ### 🗑 ゴミ箱(復元可能な削除) - ブックマーク・グループどちらの削除も、即消去せず「ゴミ箱」に一旦退避する。 - ゴミ箱はブックマークのみのフラット一覧で、それぞれ「元々どのグループにいたか」を表示。 - 復元すると、元のグループが既に無い(グループごと削除された等)場合はグループごと復元し、ある場合はそのままそこへ戻る。 - 「完全に削除」は取り消せないため、ボタンを2回押す(1回目で確認表示に変わる)方式で誤操作を防止。ブラウザ標準の確認ダイアログは使わない。 ### 💾 書き出し/読み込み(バックアップ・端末移行) - 書き出しは「今開いている一覧」だけを対象にする(他のパスワードの一覧は含まれない)。 - 読み込み時は、そのファイルを書き出した時のパスワードを別途確認したうえで、 - 今開いている一覧の内容をそのパスワードの中身で上書きする。 - 別端末に移す場合、新しい端末側では好きなパスワードで一覧タブを開いておき、 - そこへ元端末で書き出したファイルを読み込めばよい(パスワードを揃える必要はない)。 ### 🔄 更新ボタン - 別タブ(ポップアップでの追加など)で加えた変更を、再ログインせずその場で反映できる - 「更新」ボタンをタブ内に用意。ページ遷移を伴わないため、認証をやり直す必要がない。 ### 🕶 シークレットモード対応 - `incognito: split` を指定しており、通常ウィンドウとシークレットウィンドウで - 保存データ・セッションが完全に分離される。 - Chromeの仕様上、拡張機能の詳細画面で「シークレットモードでの実行を許可する」を - 手動でONにする必要がある(拡張機能側からは自動許可できない)。 --- ## 基本操作 ### 初回セットアップ 1. `chrome://extensions` で「パッケージ化されていない拡張機能を読み込む」→ 展開済みフォルダを選択 2. 拡張機能アイコンをクリック 3. 好きなパスワードを入力して「bookmark」(保存)または「view」(一覧を開く)を押す。このパスワードが、以後この内容を呼び出すための鍵になる ### ブックマークの登録 - 保存したいページを開いた状態で拡張機能アイコンをクリック - パスワードを入力して「bookmark」を押すだけ。同じURLを再度保存した場合はタイトル・更新日時のみ上書きされる(ゴミ箱に入っていた場合はここで自動的に復元される) ### 一覧の閲覧・整理 - 拡張機能アイコン→パスワード入力→「view」で一覧タブが開く - 左のグループをクリックして絞り込み、検索欄でタイトル・URLを部分一致検索 - ブックマークカードをグループ行へドラッグして移動、同じグループ内でドラッグして並び替え - グループの追加は左ペイン最下部の「+ グループ追加」 ### 削除・復元 - ブックマーク・グループどちらも「削除」ボタンでゴミ箱へ移動(即消去ではない) - ゴミ箱で「復元」すると元の場所(元のグループが無ければグループごと)に戻る - ゴミ箱で「完全に削除」を押すと確認表示に変わり、もう一度押すと完全に削除される ### 別タブでの変更を反映したいとき - 一覧タブを開いたまま、別タブ(ポップアップ)でブックマークを追加した場合は、 - 一覧タブ上部の「更新」ボタンを押すと反映される(再ログイン不要) ### 別端末への移行 1. 元端末の一覧タブで「書き出し」→ ファイルがダウンロードされる 2. 新しい端末に拡張機能を入れ、好きなパスワードで一覧タブを開く(初回は空の状態で開かれる) 3. 「読み込み」で書き出したファイルを選択 4. 表示されたモーダルに、書き出した時のパスワードを入力 5. 一致すれば、今開いている一覧の中身がその内容で上書きされる --- ## トラブルシューティング ### Q. 一覧タブが「Vault はロックされています」の案内だけになる - パスワードの入力欄はポップアップにしかない(一覧タブ側には置いていない)。 - 拡張機能のアイコンをクリックし、パスワードを入力して「view」を押し直してください。 - ブラウザを再起動した場合や、その一覧タブをリロード(F5)した場合、URLを直接開いた場合は、 - 仕様として自動では開かない(下記セキュリティ設計メモを参照)。必ずポップアップからやり直す ### Q. 別タブで追加したブックマークが一覧に出てこない - 一覧タブは開いた時点の内容を保持しているだけなので、他のタブでの追加は自動反映されない。上部の「更新」ボタンを押してください ### Q. パスワードを忘れた - パスワードはどこにも保存されておらず、復元する手段はない。別のパスワードとして新規に一覧を作り直すことになる(以前の内容にはアクセスできない) ### Q. 拡張機能を入れ直したら中身が空になった - 読み込み元のフォルダを移動・再作成すると、Chromeからは別の拡張機能として扱われ、データが引き継がれない。事前に「書き出し」しておいたファイルがあれば読み込みで復元できる --- ## セキュリティ設計メモ - 暗号化はPBKDF2(25万回, SHA-256)でパスワードから鍵を導出し、AES-256-GCMで暗号化。 - 外部通信は行わず、すべてWeb Crypto APIのみで完結する。 - 平文のパスワードはどこにも保存しない。ポップアップからタブへの受け渡しは`chrome.storage.session`(メモリのみ・ブラウザ終了で消える)を使う - 一覧タブ側が読み込んだ時点で即座に消す使い捨て方式。そのため:同じタブのリロード(F5)、URLを直接開くなど必ずポップアップからやり直す必要がある - どのパスワードが正しいかを示す索引を持たない設計。パスワードの正誤判定結果を画面に一切出さないため、総当たりや覗き見に対するヒントが生まれない。 - ブックマーク・グループの削除確認や読み込み時のパスワード確認は、すべて拡張機能内の独自モーダルで行い、ブラウザ標準の`alert`/`confirm`/`prompt`は使用しない。 ## 開発情報 - **開発**: 個人利用ツール - **バージョン**: 0.5.0 - **対応環境**: Google Chrome(Manifest V3) - **権限**: storage, activeTab - **生成AI**: Claude ## 更新履歴 - **v0.5.0**: 書き出し/読み込みを「開いている一覧単位」に変更。読み込み時のパスワード確認・エラー表示を自前モーダル化し、ブラウザ標準ダイアログを廃止 - **v0.4.1**: セッションの自動解錠を使い捨て方式に変更(リロード・URL直開きでの自動解錠を廃止)。シークレットモード対応(incognito: split) - **v0.4.0**: ゴミ箱機能を追加。グループ削除時も中身ごとゴミ箱へ退避し、復元時はグループが無ければ再作成 - **v0.3.0**: ドラッグ&ドロップでのグループ移動・グループ内並び替えに対応。フォルダ選択プルダウンを廃止 - **v0.2.0**: パスワードごとに独立した複数の一覧に対応。「パスワードの正誤」を画面に出さない設計に変更 - **v0.1.0**: 初回リリース(パスワードでのAES-256-GCM暗号化、単一の一覧、グループ分け、書き出し/読み込み) {{tag>Claude Chrome 拡張機能}}