セキュリティの境界
memories 0.1 は開発段階のソフトウェアです。テストスイートの成功を、独立したセキュリティ監査や本番環境のセキュリティ認証と見なさないでください。
保護の対象
- Vault 同期リレーによるアセット内容の読み取りや偽造、明示的なフィンガープリント検証後のピア ID の差し替え、認証済み暗号文の改変。
- ローカルパスワード、または明示的に登録した場合の独立した無人利用用ラッピングキーなしで、コピーしたローカルデータベースを読み取ること。モバイルのローカル認証要素は、さらにプラットフォームのセキュアストレージに依存します。
- 閲覧者による書き込みの偽造、管理者による所有権の変更、失効したデバイスがユーザー ID キーを使って自分自身に新しい認可済みデバイスを発行すること。
- 通常の CLI/MCP が保存済み認証情報を誤って出力すること、コマンドラインでパスワードを受け取ること、MCP ケイパビリティがターミナルの権限昇格を継承すること。明示的な無人認証情報読み取りは、意図的に平文バイトを渡します。
- 署名済みリビジョンや監査エントリの検出されない改変、チェーンの欠落、残存する現在のデータベース状態に対するチェックポイントの切り詰め。
意図的な制限
-
ホスト型セルフサービスアカウントは、ソルト付き Argon2id パスワードハッシュと独立した Vault を使用します。ただし、運用者は引き続きホスト型ストレージを制御し、復号できます。メール登録では、パスワード設定前に、単回使用で有効期限のあるメールボックス確認コードが必要です。ユーザー名モードには検証済みの連絡先アドレスがありません。SMTP は証明書検証付き TLS を必須とし、認証情報は保護されたサービス設定に保持します。ログイン許可は 1 時間後に失効し、オフライン時のブラウザログアウトによる失効はベストエフォートです。認証のスロットリングはプロセス内に限定され、上限があり、粗い制御です。CPU/メールの悪用を抑制しますが、分散型の悪用防止サービスではありません。設定と復旧の制限については
docs/center.mdを参照してください。 -
Memories Web はホスト型 Center のクライアントであり、ブラウザ内のローカル暗号化 Vault ではありません。Bearer トークンと返された内容をページメモリに保持し、切断、バックグラウンド移行、ページ終了、または 5 分間のアイドル状態で消去し、ブラウザストレージには永続化しません。JavaScript メモリの消去は保証されず、拡張機能やデバッグツールで検査でき、ダウンロードしたファイルはディスクに残ります。トークンは選択した HTTPS オリジンに結び付けられます(開発時はループバック HTTP)。リダイレクトと Cookie は無効です。許可された Web オリジンは、認可された Bearer でホスト型コンテンツ API にアクセスできますが、管理ルートやチケット管理ルートにはアクセスできません。CORS はサーバー側の認可の代わりにはなりません。スクリプトを提供する Web ホストはトークンを扱う信頼対象です。その信頼境界を求める場合は、Center に同梱された同一オリジンの
/app/を使用してください。Web クライアントガイドを参照してください。 -
オプションの Center ホストモード(
memories-center --data)は独立したサーバー側暗号化 Vault であり、エンドツーエンド暗号化されたデバイスストレージではありません。運用者が保持するMEMORIES_CENTER_VAULT_PASSWORDがデーモン形式の Store を開きます。ホスト運用者と、パスワードおよびディスクを持つ人は、ホスト上のすべての平文を読めます。ホスト型許可 RPC は、操作ごとの権限昇格を持つ閉じた Vault コンテンツ用インターフェースで、非公開/ファイル/保護対象の書き込みと明示的な認証情報の受け渡しを含みます。デーモン MCP は権限昇格せず、変更されません。管理 Bearer だけでは Vault API を使えませんが、管理者は別のスコープ付き許可や永続メンバーを発行できます。ホスト型管理ロックは Store キーを破棄し、解除には信頼できる HTTPS 経由の運用者パスワードが必要です。所有者のみがアクセスできるmembers.json内の永続メンバートークンは平文の認証情報であり、Vault キーではありません。そのファイル、バックアップ、単回提示のレスポンスを保護してください。Center 発行の解除チケットはデバイスパスワードを預託せず、デバイス/MCP の権限を昇格しません。SaaS 設定のデーモンクライアントは注入されたホスト型 Bearer を共有しますが、ローカル MCP ケイパビリティは継承できません。従来のノート移行では平文のmemories.json.bakが残るため、検証後に保護/削除してください。完全な脅威モデルと意図的な違いはdocs/center.mdを参照してください。 -
侵害されたエンドポイント、OS 管理者、悪意ある認可済みプログラム、メモリ検査、キーロガー、ユーザーによる意図的な平文コピーは機密性の境界外です。Rust のキーバッファは所有している範囲でゼロ化しますが、OS のスワップ、クラッシュダンプ、依存ライブラリの割り当て、Dart のガベージコレクション対象の文字列の消去は保証されません。デスクトップの無人利用向けキー保管には Windows DPAPI、macOS Keychain、Linux Secret Service、owner-file バックエンドがあります。これらは OS アカウントによる保護を提供し、ハードウェアによる保管保証ではありません。owner-file はラッピングキーを所有者のみがアクセスできる平文として保存します。提供されるどのバックエンドも、ハードウェアに裏付けられたデスクトップのキー保管を保証しません。
- リレーはトラフィックのメタデータを観測し、接続を遮断し、暗号文を独自に記録し、失効を遅延させたり、デバイス群を分断したりできます。提供されるサーバーはアセットを書き込みませんが、悪意あるサーバーにトラフィックを記録しないよう強制することはできません。Vault のピア同期(
/v1/channel)はエンドツーエンド暗号化されます。一方、リモートデーモンのリレー RPC(/v1/rpc/{room}/{slot})は認証済み JSON を運ぶため、リレーや TLS 終端は共有リッスントークンとリクエスト/レスポンスのペイロードを読めます。 - オフラインの失効では、過去の平文、キー、バックアップを消去できません。失効を受け取っていないエンドポイントは、古いローカルコピーを引き続き使えます。失効済みと分かっているデバイスへのエクスポートは拒否され、新しいエポックでは新しいキーを使います。失効はキュー内のクラウドエクスポートも破棄し、次のオブジェクト操作前に取得済みの作業を無効化します。開始済みのネットワークリクエストは取り消せません。
- 監査が証明するのは、既知の状態に対する署名済みコンテンツと連続性であり、侵害されたデバイスがすべてのアクセスを記録したことではありません。データベース全体とすべてのローカル証拠を古い整合性のあるバックアップに置き換えた場合、より新しいピアチェックポイントや外部アンカーなしでは検出できません。信頼できるタイムスタンプサービスはありません。
- 利用可能な認可済みローカル署名 ID が解除されている場合、失敗した操作も監査されます。完全にロックされている間の試行にはレート制限がありますが、永続的な署名済み監査記録は作成しません。突然のクラッシュでは、結果を作り上げる代わりに、すでにコミットされた受け渡し/実行の意図が残ります。
- 同一ユーザーのプロセスはローカル OS アカウントの境界内にあります。IPC は OS ユーザーを認証し、ターミナルの権限昇格は追加で親 PID を使います。これは同じユーザーで動く悪意あるプロセスからの隔離でも、PID 再利用に耐える永続的なセッション ID でもありません。IPC は最大 16 クライアントの同時接続を受け付けます。Windows 名前付きパイプのフレーミングはブロッキングのままです。停止した同一ユーザークライアントが接続枠を占有できますが、1 クライアントの停止やクラウド転送が他のすべての接続を妨げることはありません。Unix のフレーム I/O には期限があります。信頼済み子プロセスの実行を含む、書き込みロックを保持するサービス操作は引き続き直列化されます。実行バインディングは例外で、サービスはロック中に認可、復号、監査を行い、バインドされたプログラムの実行中はロックを解放します。
- 実行バインディング(
credential bind)は、1 プログラムに対する権限昇格の境界を、sudo の認可を受けて明示的に広げるものです。バインディングが有効期限内(既定 8 時間、最大 720)で Store が解除されている間、同一ユーザーの任意のcli:呼び出し元は、昇格なしでそのプログラムをバインド済み認証情報とともに実行できます。呼び出し元は、認証情報そのものではなく、認証情報の完全一致箇所が置換されたプログラム出力を受け取ります。ただし、プログラム、そのプラグイン/拡張機能、子孫プロセスは平文を受け取り、エンコードした出力、ネットワーク、ファイルを通して漏えいできます。バインディングはデバイスローカルの暗号化状態で、同期されず、バックアップ復元時に消去され、MCP、リモート(ws:/relay:)、無人利用、モバイルの呼び出し元には拒否されます。deny ルールは、プログラムが実際に受け取る引数に対してサービスが適用します。ask ルールは Claude Code フックだけが適用します。このフックは利便性のためのルーターであり、境界ではありません。見逃したコマンドは認証情報なしで動き、同一ユーザーのプロセスはrun --bindingを直接呼べます(フックは観測できる直接呼び出しも確認します)。無人で実行してはいけないものは deny ルールに入れてください。 - オプションの HTTP/WebSocket リッスンとリレー RPC は、共有シークレットの提示後、同じフレーム付き
service::Requestプロトコルを公開します(WebSocket バイナリ JSON: AuthFrame の後に Wire)。リッスントークンは--listen-token/MEMORIES_LISTEN_TOKENからのみ提供します(または生成して 1 回出力します)。TOML には保存しません。比較は定数時間です。Store のロック時にトークンを消去します。リモート呼び出し元は固定の昇格名前空間ws:remote/relay:remoteを使い、ローカルターミナルのcli:{pid}昇格を継承できません。そのトランスポートでの unlock/sudo は、後続の単発接続のためにリモート名前空間を昇格します。デスクトップの HTTP/リレーホストは unlock/sudo 後、同じ昇格チェックのもとで通常のローカル IPC 操作セット(Run、CryptoJob、MCP 許可、リモートセッション、プロキシ、認証情報コピー、バックアップを含む)を公開します。したがってトークン保持者は、そのホストの昇格済みローカルクライアントと同等の能力を持ちます。相応にトークンを保護してください。モバイル FFI と Share はモバイルの拒否リストを維持します(携帯では Run/CryptoJob/MCP 許可/リモート/プロキシを禁止し、Share は認証情報の平文コピーとバックアップダンプも拒否します)。HTTP リッスンの既定はループバックです。非ループバックアドレスへのバインドには--allow-non-loopbackが必要で、警告を出力します。平文 HTTP/WS に証明書は不要です。必要な場合は--tls-cert/--tls-keyで HTTPS/WSS を有効にします。リレー RPC は、非ループバックリレーでは WSS、43 文字の高エントロピーなルーム ID、リッスントークンを必要とします。Vault 同期は引き続き/v1/channel、直接 RPC は/v1/rpc、リレー RPC は/v1/rpc/{room}/{slot}を使います。制限された WebUI インターフェースは別物であり、汎用 Request ブリッジにしてはいけません。 - オプションの 認可 Center(
[[centers]])は、エンドポイントを Center 管理デバイスにします。ローカルの自己ブートストラップ(init/restore)とローカル MCP 許可の発行は拒否されます。ブートストラップと許可は、設定済みのpublic_key値で検証する Center 署名チケットとして届きます。許可チケットには明示的なスコープ(allow_all、read、write、read_write、read_write_delete)があり、従来のwritebool チケットはread/read_writeに対応します。複数の Center を設定できますが、1 つでもあれば自己ブートストラップは禁止されます。Vault パスワードによる解除はローカルのままです。Center はポリシーを配布し、Vault キーは配布しません。Center の署名シークレットと管理トークンは root 認証情報と同様に保護してください。docs/center.mdを参照してください。 - 実行ファイルのフィンガープリントは起動直前に確認します。OS サンドボックス、署名済みコードの要件、ファイルハンドルによるアトミックな実行、子孫プロセスの封じ込めはありません。信頼済みの実行ファイルはプラグインを読み込んだり、作業を委任したりできます。
- 通常/非公開メモリのクリップボードコピー、明示的にコピーした認証情報、エクスポートしたファイルは、ユーザー操作によって暗号化 Store の外へ出ます。
credential_copyは認証情報出力制限に対する、ローカルで sudo 認可を受けた明示的な例外です。認証済みクライアントはシステムクリップボード向けの UTF-8 平文を受け取ります。CLI はコピー状態だけを出力し、モバイルはシークレットを表示せずに確認と成功を表示します。MCP はコピーを要求できません。クリップボード内容はロック後も残り、OS の履歴/同期や他のアプリに保持される可能性があります。クリップボードの消去は保証されません。credential generateは Vault 内でキー素材を作り、その生成レスポンスとcredential publicは公開キーや証明書を返し、秘密キーは返しません。明示的な認証情報コピーは、同じ認可境界のもとで、保存済み UTF-8 秘密キー素材をクリップボードに渡せます。RSA キーは 3072 または 4096 ビットです。 file execは、既存のファイル読み取り権限と受け渡し監査を使う、CLI 側の認可済みファイルエクスポートと、それに続くローカル実行です。認証情報を読んだり、MCP/モバイルの権限を広げたりできません。ユーザーが選択したプログラムは、所有者のみがアクセスできる一時ディレクトリ内の平文スナップショットを受け取り、CLI の環境とストリームを継承し、出力の秘匿化なしで内容を漏えいできます。エクスポートしたファイルを手動実行する場合と同じく、実行ファイルのフィンガープリントは固定されません。ロック/失効ではこのコピーを回収できません。正常な子プロセス終了、起動失敗、処理された割り込みでは削除しますが、強制終了、電源断、Windows コンソール終了では平文が残る可能性があります。削除は安全な消去ではありません。監督するのは直接のフォアグラウンド子プロセスのみで、切り離された子孫は対象外です。ファイル実行はデーモンのサービスロックを保持しません。- HTTPS 認証情報アダプターは Bearer と Cookie の GET/POST をサポートし、任意のレスポンスデータではなく状態だけを返します。デーモンが所有する SSH、FTP、TCP、MySQL、Redis、PostgreSQL セッションには sudo と、命令ごとの propose/approve/exec が必要です。未承認チケットは実行できません。SSH ホストキーは SHA-256 で固定します。SSH クライアント認証は保存済みパスワードまたはインポートした OpenSSH 秘密キーを使い、保存済み OpenSSH 証明書を添付できます。暗号化秘密キーと SSH エージェント署名は未実装です。認証情報は出力せず、リモート出力には上限があります。MCP はリモートセッションを開いたり承認したりできません。ループバック SSH とデータベースプロキシは sudo で開始し、127.0.0.1 のみにバインドし、保存済みシークレットで上流を認証するため、エージェントはキーを受け取りません。ローカルポートに接続できる任意のプロセスは、コマンドごとの承認なしで認可済みリモートアカウントを使えます。ループバックは OS ユーザー認証ではありません。ローカルのデータベース通信は平文です。ロック、Vault のアイドル期限切れ、停止はリスナーとアクティブ接続を閉じます。プロキシは活動の有無に関係なく 30 分で失効します。MCP はプロキシの開始、一覧表示、停止を行えません。各プロキシは最大 16 接続を受け付け、認証には 30 秒の期限とハンドシェイクパケットの上限があります。プロキシのデータベース TLS は rustls を使い、PostgreSQL/MySQL のプロトコル交渉も含みます。PostgreSQL SCRAM はサーバー署名を検証します。MySQL の完全な SHA-256 パスワード認証は検証済み TLS なしでは拒否され、RSA パスワード交換は未実装です。PostgreSQL のキャンセル/起動オプション転送と MySQL の圧縮は非対応です。データベースセッションは既定で TLS 付きパスワード認証を使います(ホスト名検証、任意の追加 PEM CA 認証情報)。
--no-tlsは明示的な選択です。証明書ピンニングとクライアント証明書は未実装です。 - 権限は Vault 全体に適用されます。閲覧者はそのアセットを復号できます。クライアント UI は、メンバーがすでに許可された内容を読むこととコピーすることの間に、暗号学的な区別を強制できません。
デスクトップの無人利用権限
無人 CLI/MCP は、通常の MCP 許可や sudo セッションとは別の、オプトイン式ローカル Bearer 権限です。登録には対話型ターミナル、ENABLE の入力による同意、パスワードでの解除とパスワード sudo が必要です。その後の読み取りには、繰り返すパスワード入力ではなく、明示的に選択したクライアントファイルが必要です。Vault スコープは通常および非公開のメモリ/カード、元のファイルバイト、稼働中の Vault 履歴を含み、明示的に要求した保存済み認証情報の UTF-8 平文も含みます。汎用読み取りは認証情報を拒否し、保護カードの参照は自動解決しません。隔離されたリビジョンは拒否されます。アセット変更、実行、管理、同期、バックアップダンプ、検索/モデル実行、OTP カウンター更新のインターフェースはありません。読み取りごとに現在のデバイス所属と許可スコープを確認し、出力前に署名済み受け渡し意図を保存し、監査/ストレージの失敗時は受け渡しを拒否します。
独立したマスターキーラッパーは、パスワードによる解除/復旧を維持します。そのラッピングキーは、明示的に選択した windows-dpapi(現在のユーザーの DPAPI)、macos-keychain(同期しない Keychain)、または linux-secret-service(セッションバスの Secret Service)で別に保管します。owner-file は、保護を弱める明示的な選択肢で、平文ラッピング素材を OS アカウント権限だけで保護します。自動フォールバックはありません。起動時の読み取りはキーリング解除や認証 UI を要求しません。保管先が利用不能、ロック済み、承認待ちの場合は安全側に拒否します。プロトコルクライアントはプロバイダー固有の任意の UI 動作を制御できません。これらのバックエンドは同一アカウントのプロセスや OS 管理者に対する秘匿性も、ハードウェアによる保管保証も確立しません。
無人起動に成功すると、通常の認可はロックされたままキーを読み込みます。通常の CLI/MCP、sudo、クラウド、RAG 操作は解除しません。手動の lock はキーを消去し、再起動をまたいで無人起動を永続的に禁止します。パスワード解除だけでは再開しません。unattended resume にはパスワード認可済みのローカルターミナル管理が必要です。revoke は 1 つの許可を永続的に削除し、disable はバックエンドのクリーンアップ前に権限を無効にしてすべての許可を失効させます。永続ロックの書き込み失敗はエラーを返すため、書き込み不能なデバイスでの永続性は約束できません。すでに渡した平文はロック、失効、無効化では回収できません。
クライアントファイルは秘密の Bearer ケイパビリティで、通常の MCP 許可ファイルとは別であり、選択した Store に結び付けられます。ラッピングキーは正規化された Store/ヘッダー ID に結び付けられます。無人利用権限は論理バックアップ、デバイスペアリング、Vault 同期に含まれません。生データベース全体をコピーすると補助のラッパー/権限テーブルもコピーされ、クライアントファイルや保管素材のコピーでも権限が残る可能性があります。デバイス全体のロールバックと安全な消去は保証外です。これらのファイルをソース管理、ログ、共有バックアップに入れないでください。
Center 管理 Store は無人利用権限を拒否します。HTTP/WebSocket、リレー RPC、モバイル FFI/Share、WebUI は、通常の昇格があってもこの経路を使えません。通常の mcp serve --grant-file の権限と認証情報制限は変更されません。別の mcp serve-unattended --client-file は、受信クライアントに意図的にシークレットを公開します。Base64url はエンコードであり暗号化ではありません。AI プロバイダー、会話記録、ツールログ、キャッシュは、デコードされたシークレットやエンコード値を保持または送信できます。読み取り専用アクセスでもシークレット漏えいが無害になるわけではありません。
Linux のエンドツーエンド検証は、実際のデーモンと CLI/MCP で owner-file 保管を使います。隔離された Linux Secret Service プロトコルのフィクスチャは、実際のデスクトップキーリングのテストではありません。Windows DPAPI、macOS Keychain、実際のキーリング/ネイティブの UI なし検証は引き続きリリース条件であり、独立したレビューは未完了です。利用方法と検証の詳細を参照してください。
検索とモデルサービス
BM25 インデックスと正規化ベクトルは、認可された通常のメモリ/カードの、サイズに上限のあるメモリ内キャッシュです。ポリシー/コンテンツ変更で無効になり、ロックで消去されます。インデックスには認証情報の本文や明示的な非公開コンテンツを含めず、ファイルアセットと未解決/競合リビジョンも除外します。テキスト/Markdown 文書を明示的に取り込むと通常の知識カードが作られるため、運用者は機密テキストを Vault 内に公開される通常データとしてインポートしてはいけません。検索用の SQLite 一時ストレージはメモリに固定され、キャッシュ内容はバックアップやクラウドエクスポートに含まれません。プロセスメモリの制限は引き続き適用されます。
ローカル EmbeddingGemma はネイティブ推論ライブラリを使ってプロセス内で動作します。公開モデルファイルは明示的なインストールコマンドでのみダウンロードするか、ローカルから提供します。推論セッション作成前に ONNX テレメトリを明示的に無効にします。組み込みダウンロードはリポジトリのリビジョンを固定し、公開前にすべてのファイルを SHA-256 で検証します。モデルファイルには固有の Gemma ライセンスがあります。秘密素材ではなく、独立した監査を受けたセキュリティ境界でもありません。
リモート埋め込み URL を設定すると、認可された RAG 操作は適格なすべての文書チャンクをそのエンドポイントに送れます。生成は質問と選択したソースチャンクを送り、学習型リランキングは候補を送ります。利用者は設定したモデルプロバイダーとプロキシを信頼する必要があります。デバイス専用 Vault では、非ループバックプロバイダーを対象とするモデルステップを推論前に拒否します。ローカル推論と明示的に設定したループバックサービスは利用可能です。通常の MCP クライアントはツール引数でプロバイダー URL、認証情報、プロキシ設定を選択できず、許可の Vault と通常コンテンツ権限の範囲に留まります。API キーは環境変数名で参照し、設定や CLI のリテラル値にはしません。失敗した HTTP レスポンス本文は抑制し、生成回答に認証素材が直接再出力される場合は拒否します。悪意ある設定済みプロバイダーは、引き続きローカルの機密性境界外です。
リモートモデル URL には HTTPS が必要で、HTTP はループバックでのみ許可します。モデル API のリダイレクトは拒否します。ループバックリクエストはプロキシを迂回し、その他のリクエストは HTTP(S)/SOCKS プロキシやプロキシ環境設定を使えます。再試行には上限があり、一時的な接続/読み取り失敗、HTTP 429、一部の 5xx レスポンスに限定します。再試行ではモデル計算/課金が繰り返される可能性があります。TLS 検証は無効化しません。
モデル処理はサービスの書き込み mutex を保持しません。ロック、期限切れ/失効した許可、ソース状態の変更は遅れて届く結果を抑制し、後続ステップを防ぎます。実行中のリクエスト/推論は完了する場合があり、すでにリモートへ開示したテキストは回収できません。検索ソースはデータであり命令ではなく、生成にはアプリケーションツールがありません。有効な引用 ID は回答が事実に基づくことを証明せず、信頼できないソーステキストからのプロンプトインジェクションのリスクも排除しません。
デスクトップ状態ダッシュボード
ローカル TOML 設定には、秘密でないストレージ/リレー/デスクトップ設定だけを含めます。明示的に指定されたファイルの欠落、不明なキー、不正な値は Store を開く前に拒否します。相対ストレージパスは、選択したファイルの隣を基準に解決します。パス変更は別の Store を選択するだけで、データを移行しません。リレー URL 検証は、既存のリモート TLS 要件と URL 内認証情報禁止を維持します。
オプションの WebUI は 127.0.0.1 だけでリッスンします。GET /api/status と制限された POST /api/cards エディターは、プロセスごとに生成するランダムな 256 ビットトークンで保護します。ランチャーはトークンを URL フラグメントに入れ、ページはアドレスバーから除去してタブのセッションストレージに保持し、Authorization ヘッダーを使います。完全な起動 URL はダッシュボードのケイパビリティであり、共有してはいけません。予期しない Host、外部 Origin、クロスサイトのフェッチメタデータを持つリクエストは拒否します。CORS アクセス、サードパーティーリソース、フレーム埋め込みは提供しません。状態表示は引き続き読み取り専用です。カード編集は同じ CLI 内の別の明示的な許可リストを使い、同時リクエストは最大 4、リクエスト上限は 1 MiB です。通常のカード/型操作を許可し、解除、sudo、ファイル読み取り、認証情報読み取り、シークレット表示、許可、プロセス実行は許可しません。カード内容を返す前に非公開アセットを確認します。機密フィールドはマスクし、その内部構造化本文は決して返しません。ブラウザの生体認証/PIN 登録は未実装です。検証済みのネイティブモバイル/CLI 経路で機密値を処理します。起動トークンは現在、通常のカード書き込みとテンプレート CRUD も認可するため、相応に保護してください。これは汎用 IPC ブリッジではありません。
ローカルモニターは通常の認証済み IPC を使い、短命のサブプロセスからデーモンを調査します。Windows パイプの読み取りがブロックする時間を制限するため、期限は 3 秒です。調査に失敗した場合は詳細を消去し、ロック時は次のポーリングで詳細を隠します。ポーリングは解除のアイドル時間を更新せず、昇格も許可しません。デスクトップ状態は引き続き MCP ケイパビリティから利用できません。同じ OS アカウントの悪意あるプログラムは既存のローカル信頼境界内です。
トレイは明示的なメニュー操作でローカルデーモンを起動できます。トレイ/ダッシュボードを閉じると HTTP リスナーと監視を停止しますが、独立して動いているデーモンを停止したり解除したりしません。認証は CLI のままです。
デスクトップ暗号ジョブ
crypto_job にはローカルターミナルの昇格と、正確な公開計画、入力/ツールのフィンガープリント、認証情報参照を結び付けるダイジェストが必要です。MCP とモバイル FFI は呼び出せません。認証情報は認可済み Vault に属する必要があります。外部実行前に署名済み意図をコミットし、成功/失敗を監査します。ツールチェーンは信頼された OS アカウントの境界内にあり、実行ファイルのハッシュはライブラリ、ヘルパー、子プロセス、ネットワークアクセスを制約しません。
秘密キー/パスワードは、所有者のみがアクセスできる作業領域(Unix 権限または保護された Windows DACL)に一時ファイルとして実体化します。引数はファイルパスを含み、注入した認証情報値は含みません。ツール出力は抑制します。通常のクリーンアップは作業領域を削除し、該当する場合は GPG-agent/一時 Keychain のクリーンアップを行います。突然の終了では平文やヘルパープロセスが残る可能性があり、安全な消去やプロセスツリーの封じ込めは保証しません。iOS の一時 Keychain は空のパスワードを持ち、作業領域の権限に依存します。ハードウェアによるキー保管ではありません。明示的に復号した出力は平文ファイルです。
最初の iOS アダプターは、frameworks/dylibs を含む 1 つのプロビジョニング済み .app をサポートし、入れ子のアプリ/拡張機能やリンクはサポートしません。コード署名検証は Apple のプロビジョニング適格性を検証しません。OpenPGP 出力は分離署名または暗号化データであり、PGP/MIME を自動構築しません。形式とプラットフォームの制限は暗号ジョブを参照してください。
CLI 認証情報の取り込み
catch は、プロンプト表示、stdin 読み取り、明示的な取得元コマンドの起動前に、ターミナルの既存 sudo セッションを必要とします。サービスは認証情報保存時に再度認可を確認します。取り込みは保護された認証情報ストレージへのインポートだけを行い、それ自体が CLI や MCP 経由の認証情報読み取り/エクスポートを公開することはありません。
コマンド取り込みは stdout だけを読み、子プロセスの stdin を閉じ、stderr を破棄します。取得したテキストとパーサーエラーは出力しません。失敗したコマンド、タイムアウト、過大な入力、曖昧な正規表現結果、重複した JSON オブジェクトキーでは認証情報を保存しません。解析した JSON 文字列は成功時と解析失敗時に消去します。依存ライブラリ所有の作業バッファには上記メモリ制限が引き続き適用されます。呼び出し元は選択したプログラムを信頼する必要があります。通常の OS 権限を保持し、独自のファイル、ログ、ネットワーク通信を書き出せます。タイムアウト時のクリーンアップは直接の子プロセスを終了させ、子孫は終了させません。取り込みは明示的な入力/コマンド処理であり、他のターミナルやキー入力の監視ではありません。既存の取得元ファイルとシェル履歴は変わりません。テストには合成データを使い、シークレットをコマンド引数に入れないでください。
クラウド認可
クラウドログインは PKCE と state 検証を備えたブラウザ認可コードを使います。モバイルは AppAuth と登録済みネイティブリダイレクトを使います。バックグラウンド移行で Vault をロックし、ブラウザから戻った場合はトークン交換前に新しいローカル認可が必要です。モバイルのアクセス/リフレッシュトークンは Rust 内に留まります。フォアグラウンド同期は FFI レジストリとサービスロックの外で動き、バックグラウンドロックは遅れて届くインポート、トークン更新、レスポンスを無効にします。CLI はサービス mutex の外で固定 HTTPS エンドポイントとコードを交換し、ローカル認証済み IPC でトークンを送信します。サービスには、呼び出し元/プロバイダー/クライアント ID と現在の sudo に結び付けられた、単回使用で期限のあるチケットが必要です。ロックとログアウトは、実行中のネットワークリクエストからのレスポンスも含めてチケットを無効にします。ローカル CLI は信頼された OS アカウントの境界内に留まります。
OAuth トークン/クライアントシークレットはデバイスローカル状態内で暗号化し、エクスポートするバックアップ、デバイスペアリング、Vault 同期、検索、MCP から除外します。状態表示はアカウントのメタデータと有効期限だけを公開します。ログアウトはローカルトークンを削除しますが、プロバイダー側の同意やローカル暗号化データベースの過去のコピーは削除しません。リモート失効にはプロバイダーの接続済みアプリ設定を使います。アカウント認可は Vault アクセスを付与しません。不変オブジェクトのランナーは、OneDrive と Google Drive のアプリケーションフォルダーを通して、受信者向けに暗号化した Vault エンベロープをキューに入れて適用します。プロバイダーアダプターとトークン更新はローカルフィクスチャでテストしていますが、実際のプロバイダーアカウントは検証していません。送信箱/受信箱の受領記録は暗号化されたデバイスローカル状態に留まり、バックアップ、ペアリングパッケージ、MCP から除外します。ロックとログアウトは実行中の転送確認を無効にし、未完了ジョブは解除後に再開できます。クラウドオブジェクト名は暗号文のハッシュであり、Vault タイトルやアカウント識別子ではありません。
保護カードの境界
保護カードの作成/置換には sudo が必要で、公開メタデータカードと認証情報をアトミックに保存します。アカウントパスワード、dotenv 値、HTTP トークン、OTP シードは通常の全文インデックスに入りません。Dotenv プレビューはすべての値を固定の *** でマスクし、汎用読み取りやエクスポートはシークレットを返しません。明示的なローカル認証情報コピー操作は、上記クリップボード境界のもとで、保護カードのシード/トークン/パスワードにも対応します。通常の MCP は通常の要約を検索できますが、保護シークレットの作成、OTP コードの生成、認証済みリクエストの送信はできません。メタデータと完全なリビジョン内容は、保存時と同期中に暗号化されたままです。
Web サイトログインのインポートとエクスポート
Web サイトログインは login 保護カードです(公開サイト URL とユーザー名を持ち、パスワードは保存済み認証情報です)。login_import には sudo と書き込み可能なロールが必要です。ブラウザ CSV(crates/core で解析)、読み取り専用 Firefox プロファイル、Windows Credential Manager、復号済みエクスポートを同じインポート経路に正規化します。重複排除はサービス境界内で既存ログインの復号済みパスワードを定数時間比較します。同一ログインはスキップし、同一サイト/ユーザー名でパスワードが異なるログインは、--update が指定されない限り別カードになります。1 回のインポートは 2000 行が上限です。ノートは通常のインデックスに入るため、明示的に要求しない限りブラウザの note 列を破棄します。Firefox の直接読み取りは、3DES-CBC ログイン値と既知または空のプライマリーパスワードを使う、最新の PBES2(PBKDF2-HMAC-SHA256 + AES-256-CBC)key4.db ラッピングだけをサポートします。従来の 3DES-PKCS#12 ラッピングは報告しますが復号しません。ブラウザ自身の Store の読み取りは、そのブラウザの保護を弱めず、上記 OS アカウント境界に従います。
login_export には sudo が必要で、デバイス専用 Vault は拒否します。暗号化形式(memories/logins/v1)は独立したパスワードのもとで Argon2id と XChaCha20-Poly1305 を使ってエントリを封印し、任意の Vault にインポートできます。Chromium 互換 CSV 形式は暗号化 Store の外へ出る平文です。credential_copy と同様の明示的なローカル例外であり、ローカルの cli: 呼び出し元にのみ許可します(MCP、HTTP/リレーのリモート、モバイル FFI/Share には決して許可せず、呼び出し元許可リストとモバイル拒否リストの両方で強制します)。平文を返す前に署名済み受け渡し意図をコミットし、スプレッドシートの数式インジェクションを無害化した、所有者のみがアクセスできるファイルを書き込みます。運用者はそのファイルを保護し、削除する必要があります。
TOTP と HOTP の生成は、明示的に認可された短命コードの出力であり、シードのエクスポートではありません。コードやシードを含めずに生成を監査します。HOTP は生成ごとに、増分したカウンターをカードリビジョンとともに永続化します。相互運用性のため標準 SHA-1 OTP をサポートします。それ以外では、既存の最新の認証付き暗号化と署名アルゴリズムを使います。TOTP には正しいローカル時計が必要です。このクライアントは、検証者が受理済みコードを再利用することを防げません。otpauth:// URI インポートは totp/hotp 型のみ受け付けます。otpauth-migration:// インポートは Google Authenticator の MigrationPayload エクスポートを totp/hotp カードだけにデコードし、検索や通常の MCP でシードを公開しません。明示的な無人認証情報読み取りは保存済みシードを開示できます。
クライアントが制御するデバイス専用 Vault ID は暗号化状態に永続化します。その内容はデバイスペアリングとエクスポートするバックアップから除外し、同期/メンバーエクスポートを拒否します。マシンの侵害や変更された信頼済みクライアントは、これらのアプリケーションレベルの制御を迂回できます。共有 Vault の暗号キーをすでに持つ認可済みメンバーに対する秘匿性は主張しません。
テンプレートは専用シークレットフィールドを保護します。ユーザーは通常のタイトル、ノート、タグ、ソースフィールドにシークレットを入れないでください。インポートは既存の dotenv ファイル、クリップボード内容、過去のシェル履歴を安全に消去しません。
Wiki シークレット参照
protect_secret にはローカル sudo と書き込みアクセスが必要です。認証情報をアトミックに作成し、1 つの現在のメモリ/カード本文内で、指定した空でないシークレットの完全一致箇所をすべて {{secret:LABEL}} に置換します。同一 Vault 内の型付きマッピングがラベルを認証情報に解決し、マーカーだけではアクセスを付与しません。ラベルは 1-64 文字の ASCII 英字、数字、アンダースコア、ハイフンです。メタデータにも含まれるシークレット、競合した文書、再利用されたラベルは拒否します。通常の編集はマッピングを保持し、汎用書き込みでは参照を添付または変更できません。読み取り、検索、一覧、グラフ、MCP はこれらの参照を解決しません。コピーは認可後に現在の認証情報を解決し、ローカルクライアントに平文を返す前に、シークレットなしの監査受け渡し意図をコミットします。この意図は、その後の OS クリップボード書き込みの成功を証明しません。クリップボードコピーには NUL バイトを含まない UTF-8 が必要です。OTP カードのコピーは生成したワンタイムコードではなくシードを渡します。
置換は現在の本文だけに影響し、署名済みリビジョン履歴、復旧アーカイブ、他の文書、バックアップ、以前に共有したコピーには影響しません。自動シークレット検出でも、プロバイダー側のキーローテーションでもありません。すでに露出したキーは発行元で失効/ローテーションする必要があります。新しい保護参照には更新したクライアントが必要で、古いクライアントは追加されたコンテンツフィールドをデコードできません。置換ルールとクライアント動作は利用ガイドを参照してください。
リソースと運用の制限
- Argon2id: 64 MiB、3 回の反復、1 レーン、32 バイト出力。固定されたバージョン付きパラメーター、16 バイトのランダムソルト。アプリケーションレベルのパスワード長制限はありません。
- XChaCha20-Poly1305 はランダムな 24 バイト nonce を使い、マスターキー、状態、チェックポイント、バックアップ、トランスポート、256 KiB コンテンツチャンクに独立した認証コンテキストを使います。
- リビジョンごとのエンコード済みアセット本文は最大 16 MiB です(バイナリインポートには base64 のオーバーヘッドがあります)。暗号化状態全体を SQLite 内でトランザクションとして書き直します。小規模ライブラリ向けであり、数ギガバイト規模のファイルストレージ向けではありません。
- 完全同期エンベロープ: リレー上限は 32 MiB。同時 4 ルーム、各 2 ピア、上限付きキュー、毎秒 16 受信フレーム、受信アイドル上限 60 秒、接続の最大寿命 10 分です。オフライン受け渡しはありません。
- 処理中の信頼済み子プロセスは、ローカルサービスを最大 5 分間占有できます。実行バインディングの子プロセスは、その間、自身の IPC 接続だけを占有します。HTTPS 操作のタイムアウトは 30 秒です。保持は追記専用で、監査/バージョンの削減と差分同期は後回しです。
- 権限競合の解決には、同じ所有者が両方のブランチで引き続き認可されている必要があります。より複雑な所有権紛争は安全側に拒否し、将来の明示的な復旧手順を必要とします。
デプロイ
リレーは TLS の背後でループバックにバインドしてください。リバースプロキシのリクエスト/レスポンス本文ログ、ディスクバッファリング、コアダンプ、永続コンテナボリュームを無効にしてください。TLS は中間ネットワークからトランスポートのメタデータを保護し、エンドツーエンド暗号化は TLS 終端からもアセットを保護します。サンプルコンテナは root 以外のユーザーを使います。
バックアップはクライアントから行ってください。リレーはバックアップシステムではありません。独立したバックアップパスワードを別に保管し、バックアップに依存する前に復旧をテストしてください。
セキュリティ上の欠陥はリポジトリ所有者に非公開で報告してください。公開 issue に本物のパスワード、認証情報値、復号済み内容、完全な本番パケットを含めないでください。