安全邊界
memories 0.1 是開發中的軟體。請勿將測試套件通過視為獨立安全稽核或正式環境安全認證。
防護範圍
- 防止保存庫同步中繼讀取或偽造資產內容、在明確驗證指紋後替換對等端身分,或修改經過驗證的密文。
- 防止在沒有本機密碼,或明確註冊時使用的獨立無人值守包裝金鑰的情況下,讀取複製的本機資料庫。行動裝置的本機驗證因素另外依賴平台安全儲存空間。
- 防止讀取者偽造寫入、管理員變更擁有權,或遭撤銷的裝置使用其使用者身分金鑰為自己簽發新的已授權裝置。
- 防止一般 CLI/MCP 意外印出已儲存的憑證、接受命令列密碼,或讓 MCP 能力繼承終端機的權限提升。明確啟用的無人值守憑證讀取會刻意傳送明文位元組。
- 防止已簽署修訂版本或稽核項目的修改、鏈結缺口,以及相對於剩餘目前資料庫狀態的檢查點截斷未被偵測。
刻意設定的限制
-
託管自助帳號使用加鹽的 Argon2id 密碼雜湊及獨立保存庫;營運者仍控制託管儲存空間,且能解密。電子郵件註冊必須先取得一次性、具有效期限的信箱驗證碼,才能設定密碼。使用者名稱模式沒有已驗證的聯絡地址。SMTP 強制使用經憑證驗證的 TLS;憑證保留在受保護的服務設定中。登入授權一小時後到期;離線時瀏覽器登出的撤銷僅盡力而為。驗證節流是行程本機、有限且粗略的機制:它限制 CPU/郵件濫用,但不是分散式濫用防制服務。設定及復原限制請參閱
docs/center.md。 -
Memories Web 是託管 Center 的用戶端,不是瀏覽器本機加密保存庫。它將 bearer 權杖與回傳內容保存在頁面記憶體中,於中斷連線、進入背景、離開頁面或閒置五分鐘時清除,不會持久儲存於瀏覽器儲存空間。不保證 JavaScript 記憶體抹除;擴充功能及偵錯工具可以檢查記憶體,而下載的檔案會留在磁碟上。權杖綁定選定的 HTTPS 來源(開發時使用回送 HTTP);重新導向及 Cookie 皆已停用。允許的 Web 來源可以使用已授權 bearer 存取託管內容 API,不能存取管理或票證管理路由。CORS 不能取代伺服器授權。提供指令碼的網頁主機受信任可接觸權杖;若這是預期的信任邊界,請使用 Center 隨附、同來源的
/app/。請參閱 Web 用戶端指南。 -
選用的 Center 託管模式(
memories-center --data)是獨立的伺服器端加密保存庫,不是端對端加密的裝置儲存空間。營運者持有的MEMORIES_CENTER_VAULT_PASSWORD可開啟 daemon 格式的 Store;主機營運者,以及同時持有密碼與磁碟的任何人,都能讀取所有託管明文。託管授權 RPC 是封閉的保存庫內容介面,使用限於該操作的權限提升,包括私密/檔案/受保護寫入及明確的憑證傳送。Daemon MCP 維持未提升權限且不變。僅有管理員 bearer 無法使用保存庫 API,但管理員可以簽發獨立、具範圍的授權或長期成員。託管管理員鎖定會卸除 Store 金鑰;解鎖需要透過可信任 HTTPS 傳送營運者密碼。僅擁有者可存取的members.json中,長期成員權杖是明文憑證,不是保存庫金鑰:請保護其檔案、備份及一次性回應。Center 簽發的解鎖票證不會託管裝置密碼,也不會提升裝置/MCP 權限。設為 SaaS 的 daemon 用戶端共用注入的託管 bearer;本機 MCP 能力不能繼承它。舊版筆記移轉會保留明文memories.json.bak;驗證後請保護或移除它。完整威脅模型與刻意保留的差異請參閱docs/center.md。 -
遭入侵的端點、作業系統管理員、惡意已授權程式、記憶體檢查、鍵盤側錄器及刻意複製明文的使用者,均位於機密性邊界之外。Rust 會將其擁有的金鑰緩衝區歸零;作業系統交換空間、當機傾印、相依套件配置及 Dart 垃圾回收管理的字串不保證抹除。桌面無人值守金鑰保管提供 Windows DPAPI、macOS Keychain、Linux Secret Service 及 owner-file 後端。這些提供作業系統帳號保護,不保證硬體支援的保管;owner-file 將包裝金鑰以僅擁有者可存取的明文儲存。任何已提供的後端都不保證硬體支援的桌面金鑰保管。
- 中繼可以觀察流量中繼資料、封鎖連線、自行記錄密文、延遲撤銷或分割裝置群。隨附的伺服器不寫入資產,但無法強制惡意伺服器不記錄流量。保存庫對等端同步(
/v1/channel)採端對端加密。遠端 daemon 中繼 RPC(/v1/rpc/{room}/{slot})則傳送經驗證的 JSON:中繼或 TLS 終結端能讀取共用的監聽權杖及請求/回應酬載。 - 離線撤銷無法抹除過去的明文、金鑰或備份。尚未收到撤銷的端點仍能使用舊的本機副本。禁止匯出至已知遭撤銷的裝置,且新的金鑰世代使用全新金鑰。撤銷也會捨棄佇列中的雲端匯出,並在下一次物件操作前使已擷取的工作失效。已開始的網路請求無法收回。
- 稽核能證明已簽署內容及相對於已知狀態的連續性,不能證明遭入侵的裝置記錄了每次存取。若將整個資料庫及所有本機證據替換成較舊且一致的備份,沒有較新的對等端檢查點或外部錨點便無法偵測。沒有可信任的時間戳記服務。
- 當可用、已授權的本機簽署身分已解鎖時,失敗的操作會被稽核。完全鎖定時的嘗試會受速率限制,但不會建立持久的已簽署稽核紀錄。突發當機會留下先前已提交的傳送/執行意圖,不會憑空建立結果。
- 相同使用者的行程位於本機作業系統帳號邊界內。IPC 驗證作業系統使用者;終端機權限提升另外使用父行程 PID。這無法隔離以相同使用者執行的惡意行程,也不是免受 PID 重複使用影響的持久工作階段身分。IPC 最多接受 16 個並行用戶端。Windows 具名管道框架處理仍會阻塞:停滯的同使用者用戶端可能占用這些名額,但單一停滯用戶端或雲端傳輸不會阻塞所有其他連線。Unix 框架 I/O 有有限的期限。持有寫入鎖的服務操作,包括可信任子行程執行,仍會循序處理。執行綁定是例外:服務持鎖時進行授權、解密及稽核,然後在綁定程式執行期間釋放鎖。
- 執行綁定(
credential bind)是刻意經 sudo 授權、針對單一程式擴大權限提升邊界的機制。綁定尚未到期(預設 8 小時,最多 720 小時)且儲存區已解鎖時,任何同使用者的cli:呼叫者都能使用綁定憑證執行該程式,無須提升權限。這些呼叫者收到的程式輸出會替換憑證的所有完全相符出現位置,而非直接收到憑證;但程式、其外掛/擴充功能及其後代行程會收到明文,並能洩露它(編碼輸出、網路、檔案)。綁定是裝置本機加密狀態,永不同步,備份還原時清除,且拒絕 MCP、遠端(ws:/relay:)、無人值守及行動呼叫者使用。拒絕規則由服務對程式實際收到的引數強制執行;詢問規則僅由 Claude Code hook 執行,它是便利的路由器,不是安全邊界:漏掉的命令會在沒有憑證的情況下執行,同使用者行程也能直接呼叫run --binding(hook 也會檢查其能看到的直接呼叫)。凡是絕不可無人值守執行的項目,請放入拒絕規則。 - 選用的 HTTP/WebSocket 監聽及中繼 RPC,在提供共用祕密後會公開相同、具框架的
service::Request協定(WebSocket 二進位 JSON:先 AuthFrame,再 Wire)。監聽權杖只能透過--listen-token/MEMORIES_LISTEN_TOKEN提供(或產生並只印出一次);絕不儲存在 TOML 中。比較採固定時間。儲存區鎖定時會抹除權杖。遠端呼叫者使用固定的權限提升命名空間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 及監聽權杖。保存庫同步繼續使用/v1/channel;直接 RPC 使用/v1/rpc,中繼 RPC 使用/v1/rpc/{room}/{slot}。受限 WebUI 介面是獨立的,不得成為通用 Request 橋接。 - 選用的授權 Center(
[[centers]])會將端點變成由 Center 管理的裝置:拒絕本機自行初始化(init/restore)及本機 MCP 授權簽發。初始化及授權以 Center 簽署票證送達,並依設定的public_key值驗證。授權票證攜帶明確範圍(allow_all、read、write、read_write、read_write_delete);舊版write布林票證對應至read/read_write。可設定多個 Center;只要有任何一個便足以禁止自行初始化。保存庫密碼解鎖仍在本機進行,Center 散發的是政策,不是保存庫金鑰。請像保護 root 憑證一樣保護 Center 簽署祕密及管理員權杖。請參閱docs/center.md。 - 可執行檔指紋在啟動前立即檢查。沒有作業系統沙箱、簽署程式碼要求、原子檔案控制代碼執行或後代行程隔離。可信任的可執行檔可以載入外掛或委派工作。
- 一般/私密記憶的剪貼簿副本、刻意複製的憑證及匯出檔案,會因使用者操作而離開加密儲存區。
credential_copy是刻意設定、經 sudo 授權的本機憑證輸出限制例外:經驗證的用戶端會收到供系統剪貼簿使用的 UTF-8 明文。CLI 只印出複製狀態;行動端顯示確認及成功訊息,不顯示祕密。MCP 不能要求複製。鎖定後剪貼簿內容仍會存在,且可能被作業系統歷程/同步或其他應用程式保留;不保證剪貼簿抹除。credential generate在保存庫內建立金鑰材料;其產生回應及credential public只回傳公鑰或憑證,絕不回傳私鑰。刻意複製憑證可在相同授權邊界下,將已儲存的 UTF-8 私鑰材料傳送至剪貼簿。RSA 金鑰為 3072 或 4096 位元。 file exec是 CLI 端經授權的檔案匯出,隨後在本機執行,使用現有檔案讀取權限及傳送稽核。它不能讀取憑證或擴大 MCP/行動權限。使用者選定的程式會收到位於僅擁有者可存取暫存目錄中的明文快照,繼承 CLI 環境及串流,且可能洩露內容而不經輸出遮蔽。未固定可執行檔指紋,與手動執行匯出檔案相同。鎖定/撤銷不能收回此副本。正常子行程結束、啟動失敗及已處理的中斷會觸發移除;強制終止、斷電或關閉 Windows 主控台可能留下明文。移除不等於安全抹除。只監督直接的前景子行程,不監督脫離的後代行程。檔案執行不持有 daemon 的服務鎖。- HTTPS 憑證介接器支援 Bearer 與 Cookie GET/POST,只回傳狀態,不回傳任意回應資料。Daemon 擁有的 SSH、FTP、TCP、MySQL、Redis 及 PostgreSQL 工作階段需要 sudo,且每個指令都需 propose/approve/exec。未核准票證不能執行。SSH 主機金鑰以 SHA-256 固定。SSH 用戶端驗證使用已儲存密碼或匯入的 OpenSSH 私鑰,也可附加已儲存的 OpenSSH 憑證。尚未實作加密私鑰及 SSH agent 簽署。不會印出憑證;遠端輸出有限制。MCP 不能開啟或核准遠端工作階段。回送 SSH 及資料庫代理以 sudo 啟動,只繫結 127.0.0.1,並使用已儲存祕密向上游驗證,讓代理程式永遠不會收到金鑰。任何能連線至本機連接埠的行程,都能使用已授權遠端帳號,無須逐命令核准;回送不是作業系統使用者驗證。本機資料庫流量是明文。鎖定、保存庫閒置到期及停止會關閉監聽器與作用中的連線。代理無論是否有活動,都會在 30 分鐘後到期。MCP 不能啟動、列出或停止代理。每個代理最多接受 16 個連線;驗證有 30 秒期限及有限的交握封包。代理資料庫 TLS 使用 rustls,包括 PostgreSQL/MySQL 協定協商。PostgreSQL SCRAM 會驗證伺服器簽章。未使用經驗證 TLS 時,拒絕 MySQL 完整 SHA-256 密碼驗證;尚未實作 RSA 密碼交換。不支援 PostgreSQL 取消/啟動選項轉送及 MySQL 壓縮。資料庫工作階段預設使用 TLS 密碼驗證(主機名稱驗證;可選額外 PEM CA 憑證)。
--no-tls是明確選擇。尚未實作憑證固定及用戶端憑證。 - 權限套用至整個保存庫。讀取者可以解密其資產;用戶端 UI 無法在密碼學上區分成員讀取與複製已授予該成員的內容。
無人值守桌面授權
無人值守 CLI/MCP 是獨立、需主動啟用的本機 bearer 授權,不是一般 MCP 授權或 sudo 工作階段。註冊需要互動式終端機、輸入 ENABLE 表示同意、密碼解鎖及密碼 sudo。後續讀取需要明確選定的用戶端檔案,不必反覆提示密碼。其保存庫範圍包括一般及私密記憶/卡片、原始檔案位元組及現用保存庫歷程,也包括明確要求的已儲存憑證 UTF-8 明文。通用讀取拒絕憑證;受保護卡片參照不會自動解析。拒絕隔離中的修訂版本。沒有資產變更、執行、管理、同步、備份傾印、搜尋/模型執行或 OTP 計數器推進介面。每次讀取都會檢查目前裝置成員資格及授權範圍;輸出前會儲存已簽署傳送意圖,稽核/儲存失敗會拒絕傳送。
獨立的主金鑰包裝保留密碼式解鎖/復原。其包裝金鑰透過明確選定的 windows-dpapi(目前使用者 DPAPI)、macos-keychain(不同步的 Keychain)或 linux-secret-service(工作階段匯流排 Secret Service)獨立保管。owner-file 是刻意提供的較低保護選項:明文包裝材料只受作業系統帳號權限保護。沒有自動回退。啟動讀取不要求鑰匙圈解鎖或驗證 UI;保管不可用、已鎖定或需要核准時,採拒絕存取方式處理。協定用戶端不能控制任意供應者特定 UI 行為。這些後端不保證對同帳號行程或作業系統管理員的機密性,也不保證硬體支援的保管。
無人值守啟動成功時會載入金鑰,而一般授權仍保持鎖定。它不會解鎖一般 CLI/MCP、sudo、雲端或 RAG 操作。手動 lock 會清除金鑰,並持久禁止跨重新啟動的無人值守啟動;單靠密碼解鎖不會恢復它。unattended resume 需要經密碼授權的本機終端機管理。revoke 持久移除單一授權;disable 在清理後端前停用授權並撤銷所有授權。持久鎖定寫入失敗會回傳錯誤,因此無法保證在不可寫入的裝置上持久生效。已傳送的明文無法透過鎖定、撤銷或停用收回。
用戶端檔案是祕密 bearer 能力,與一般 MCP 授權檔案分開,並綁定選定的儲存區。包裝金鑰綁定標準化的儲存區/標頭身分。無人值守授權不包含在邏輯備份、裝置配對或保存庫同步中。複製整個原始資料庫仍會複製其輔助包裝/授權資料表;複製用戶端檔案或保管材料也可能保留授權。整部裝置回復至舊狀態及安全抹除仍不在保證範圍內。請勿將這些檔案放入原始碼版本控制、記錄或共用備份。
Center 管理的儲存區拒絕無人值守授權。HTTP/WebSocket、中繼 RPC、行動 FFI/Share 及 WebUI 即使有一般權限提升,也不能使用此路徑。一般 mcp serve --grant-file 的權限及憑證限制不變。獨立的 mcp serve-unattended --client-file 會刻意向接收用戶端揭露祕密。Base64url 是編碼,不是加密:AI 供應者、對話紀錄、工具記錄及快取可以保留或傳送解碼後的祕密或編碼值。唯讀存取並不代表祕密揭露無害。
Linux 端對端涵蓋使用 owner-file 保管及真正的 daemon 與 CLI/MCP。隔離的 Linux Secret Service 協定測試環境不是實際桌面鑰匙圈測試。Windows DPAPI、macOS Keychain 及實際鑰匙圈/原生無 UI 驗證仍是發布關卡;獨立審查尚待進行。請參閱使用及驗證詳情。
檢索與模型服務
BM25 索引及正規化向量是已授權一般記憶/卡片的有限記憶體快取。政策/內容變更會使其失效,鎖定時會清除。索引絕不包含憑證本文或刻意設為私密的內容;檔案資產及未解決/衝突的修訂版本仍被排除。明確匯入文字/Markdown 文件會建立一般知識卡片,因此操作者不得將機密文字當作保存庫內公開的一般資料匯入。搜尋用的 SQLite 暫存儲存空間強制位於記憶體;快取內容不包含在備份或雲端匯出中。行程記憶體限制仍適用。
本機 EmbeddingGemma 使用原生推論程式庫在行程內執行;其公開模型檔案只會由明確的安裝命令下載,或由本機提供。ONNX 遙測會在建立推論工作階段前刻意停用。內建下載固定儲存庫修訂版本,並在發布前以 SHA-256 驗證每個檔案。模型檔案具有自己的 Gemma 授權條款。它們不是祕密材料,也不是經獨立稽核的安全邊界。
設定遠端嵌入 URL 會允許已授權 RAG 操作將所有符合資格的文件區塊傳送至該端點。生成會傳送問題及選定的來源區塊;學習式重新排序會傳送其候選項目。客戶必須信任已設定的模型供應者及代理。僅限裝置的保存庫會在推論前拒絕以非回送供應者為目標的模型步驟。本機推論及明確設定的回送服務仍可使用。一般 MCP 用戶端不能在工具引數中選擇供應者 URL、憑證或代理設定,且仍限於其授權的保存庫及一般內容權限。API 金鑰以環境變數名稱參照,絕不使用設定或 CLI 中的字面值。失敗的 HTTP 回應本文會被隱藏,生成答案中直接回顯驗證材料的情況會被拒絕;惡意的已設定供應者仍位於本機機密性邊界之外。
遠端模型 URL 要求 HTTPS;只有回送允許 HTTP。拒絕模型 API 重新導向。回送請求略過代理;其他請求可使用 HTTP(S)/SOCKS 代理或代理環境。重試次數有限,且只適用於暫時連線/讀取失敗、HTTP 429 及部分 5xx 回應。重試可能重複模型運算/計費。不會停用 TLS 驗證。
模型工作不持有服務寫入互斥鎖。鎖定、到期/撤銷的授權或來源狀態變更會抑制延遲結果並阻止後續步驟。進行中的請求/推論可以完成,而已向遠端揭露的文字無法收回。檢索來源是資料,不是指令;生成沒有應用程式工具。有效引用 ID 不能證明答案有事實根據,也不能消除不可信任來源文字造成的提示注入風險。
桌面狀態儀表板
本機 TOML 設定只包含非祕密的儲存/中繼/桌面設定。明確指定卻不存在的檔案、未知金鑰及格式錯誤的值,會在開啟儲存區前遭拒絕。相對儲存路徑以選定檔案所在位置解析。變更路徑會選擇另一個儲存區,不會移轉資料。中繼 URL 驗證保留現有遠端 TLS 及禁止 URL 內憑證的限制。
選用的 WebUI 只監聽 127.0.0.1。GET /api/status 及受限的 POST /api/cards 編輯器由每個行程建立的隨機 256 位元權杖保護。啟動器將權杖放在 URL 片段;頁面將它從網址列移除,保留在分頁工作階段儲存空間,並使用 Authorization 標頭。完整啟動 URL 是儀表板能力,不應分享。Host 非預期、Origin 為外部來源或帶有跨站擷取中繼資料的請求會被拒絕。不提供 CORS 存取、第三方資源或嵌入框架。狀態投影仍為唯讀。卡片編輯使用同層 CLI 中獨立、明確的允許清單,最多四個並行請求,請求上限 1 MiB。它允許一般卡片/類型操作,不允許解鎖、sudo、檔案讀取、憑證讀取、祕密顯示、授權或行程執行。回傳卡片內容前會檢查私密資產。敏感欄位會遮蔽,且絕不回傳其內部結構化本文。尚未實作瀏覽器生物辨識/PIN 註冊:敏感值由經驗證的原生行動/CLI 路徑處理。啟動權杖現在授權一般卡片寫入及範本 CRUD;請妥善保護它。這不是通用 IPC 橋接。
本機監視器透過正常、經驗證的 IPC,在短期子行程中探測 daemon,使用三秒期限限制阻塞的 Windows 管道讀取。探測失敗時清除詳細資料;鎖定會在下次輪詢隱藏詳細資料。輪詢不會更新解鎖閒置時間或授予權限提升。桌面狀態仍不開放給 MCP 能力。同作業系統帳號中的惡意程式仍位於現有本機信任邊界內。
系統匣可以透過明確的選單操作啟動本機 daemon。關閉系統匣/儀表板會停止其 HTTP 監聽器及監視;不會停止或解鎖獨立執行的 daemon。驗證仍在 CLI 中進行。
桌面密碼學工作
crypto_job 需要本機終端機權限提升,以及綁定精確公開計畫、輸入/工具指紋及憑證參照的摘要。MCP 及行動 FFI 不能呼叫它。憑證必須屬於已授權保存庫。在外部執行前會提交已簽署意圖,並稽核成功/失敗。工具鏈仍位於可信任作業系統帳號邊界內;可執行檔雜湊不會限制程式庫、輔助程式、子行程或網路存取。
私鑰/密碼會在僅擁有者可存取的工作空間中具體化為暫存檔案(Unix 權限或受保護的 Windows DACL)。引數只包含檔案路徑,絕不注入憑證值。工具輸出會被隱藏。正常清理會移除工作空間,並在適用時執行 GPG-agent/暫存 Keychain 清理。突然終止可能留下明文或輔助行程;不保證安全抹除或行程樹隔離。iOS 暫存 Keychain 使用空密碼,依賴工作空間權限。這不是硬體支援的金鑰保管。刻意解密的輸出是明文檔案。
第一個 iOS 介接器支援一個已佈建、包含 frameworks/dylibs 的 .app,不支援巢狀應用程式/擴充功能或連結。程式碼簽章驗證不驗證 Apple 佈建資格。OpenPGP 輸出是分離式簽章或加密資料,不會自動組成 PGP/MIME。格式及平台限制請參閱密碼學工作。
CLI 憑證擷取
catch 在提示、讀取 stdin 或啟動明確選定的來源命令前,需要終端機既有的 sudo 工作階段。服務在儲存憑證時會再次檢查授權。擷取只會匯入受保護的憑證儲存空間;擷取本身不會透過 CLI 或 MCP 開放憑證讀取/匯出。
命令擷取只讀取 stdout、關閉子行程 stdin,並捨棄子行程 stderr。絕不印出擷取文字及剖析器錯誤。命令失敗、逾時、輸入過大、正規表示式結果不明確及重複 JSON 物件鍵都不會儲存憑證。已剖析 JSON 字串在成功及剖析失敗時都會清除;相依套件擁有的暫存緩衝區仍受上述記憶體限制約束。呼叫者必須信任選定程式:它保有一般作業系統權限,可能寫入自己的檔案、記錄或網路流量。逾時清理會終止直接子行程,不會終止其後代行程。擷取是明確的輸入/命令處理,不是監視其他終端機或鍵盤輸入。既有來源檔案及 Shell 歷程不變。測試請使用合成資料,並避免將祕密放入命令引數。
雲端授權
雲端登入使用瀏覽器授權碼搭配 PKCE 及 state 驗證。行動端使用 AppAuth 及已註冊的原生重新導向;進入背景會鎖定保存庫,從瀏覽器返回後需要重新取得本機授權,才能交換權杖。行動存取/更新權杖保留在 Rust 中。前景同步在 FFI 登錄表及服務鎖之外執行;背景鎖定會使延遲匯入、權杖更新及回應失效。CLI 在服務互斥鎖之外,與固定 HTTPS 端點交換授權碼,然後透過本機經驗證 IPC 提交權杖。服務要求一次性、具有效期限且綁定呼叫者/供應者/用戶端 ID 的票證,以及目前 sudo。鎖定及登出會使票證失效,包括進行中網路請求的回應。本機 CLI 仍位於可信任作業系統帳號邊界內。
OAuth 權杖/用戶端祕密在裝置本機狀態內加密,並排除於匯出備份、裝置配對、保存庫同步、搜尋及 MCP 之外。狀態只公開帳號中繼資料及到期時間。登出移除本機權杖,不會移除供應者端同意或本機加密資料庫的歷史副本。遠端撤銷使用供應者的已連線應用程式設定。帳號授權不會授予保存庫存取權。不可變物件執行器透過 OneDrive 及 Google Drive 應用程式資料夾,排入佇列並套用以接收者金鑰加密的保存庫封裝。供應者介接器及權杖更新已透過本機測試環境測試;尚未驗證實際供應者帳號。寄件匣/收件匣收據保留在加密裝置本機狀態中,並排除於備份、配對套件及 MCP 之外。鎖定及登出會使進行中的傳輸確認失效;未完成工作在解鎖後仍可恢復。雲端物件名稱是密文雜湊,不是保存庫標題或帳號識別碼。
受保護卡片邊界
建立/替換受保護卡片需要 sudo,並以原子方式儲存公開中繼資料卡片及憑證。帳號密碼、dotenv 值、HTTP 權杖及 OTP 種子絕不進入一般全文索引。Dotenv 預覽以固定 *** 遮蔽每個值;通用讀取及匯出絕不回傳祕密。明確的本機憑證複製操作也支援受保護卡片,包括其種子/權杖/密碼,並受上述剪貼簿邊界約束。一般 MCP 可以搜尋一般摘要,但不能建立受保護祕密、產生 OTP 驗證碼或傳送經驗證的請求。中繼資料及完整修訂內容在靜態儲存及同步期間都維持加密。
網站登入資料匯入與匯出
網站登入資料是 login 受保護卡片(公開網站 URL 及使用者名稱;密碼是已儲存憑證)。login_import 需要 sudo 及可寫入角色;它將瀏覽器 CSV(在 crates/core 剖析)、唯讀 Firefox 設定檔、Windows 認證管理員或已解密匯出正規化至相同匯入路徑。去除重複項目時,會在服務邊界內以固定時間比較既有登入資料解密後的密碼;相同登入資料會略過,相同網站及使用者名稱但密碼不同的登入資料會成為另一張卡片,除非指定 --update,且單次匯入有上限(2000 列)。瀏覽器 note 欄位預設捨棄,除非明確要求,因為筆記會進入一般索引。Firefox 直接讀取只支援現代 PBES2(PBKDF2-HMAC-SHA256 + AES-256-CBC)key4.db 包裝、3DES-CBC 登入值,以及已知或空白的主密碼;舊版 3DES-PKCS#12 包裝只會回報,不會解密。讀取瀏覽器自己的儲存區不會削弱瀏覽器保護,並受上述作業系統帳號邊界約束。
login_export 需要 sudo,並拒絕僅限裝置的保存庫。加密格式(memories/logins/v1)使用 Argon2id 及 XChaCha20-Poly1305,以獨立密碼封存項目,可匯入任何保存庫。與 Chromium 相容的 CSV 格式是離開加密儲存區的明文:它與 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 公開種子。明確的無人值守憑證讀取可以揭露已儲存種子。
由用戶端控制、僅限裝置的保存庫 ID 會持久儲存在加密狀態中。其內容排除於裝置配對及匯出備份之外,且拒絕同步/成員匯出。機器遭入侵或可信任用戶端遭修改,可以繞過這些應用程式層級控制。對已持有共用保存庫密碼學金鑰的已授權成員,不宣稱具有機密性。
範本保護專用祕密欄位。使用者必須避免將祕密放入一般標題、筆記、標籤及來源欄位。匯入不會安全抹除既有 dotenv 檔案、剪貼簿內容或先前 Shell 歷程。
Wiki 祕密參照
protect_secret 需要本機 sudo 及寫入權限。它以原子方式建立憑證,並將單一目前記憶/卡片本文中,與提供的非空祕密完全相符的所有位置替換為 {{secret:LABEL}}。具型別、同保存庫的對應關係將標籤解析至其憑證;標記本身不授予存取權。標籤為 1-64 個 ASCII 字母、數字、底線或連字號。若祕密也出現在中繼資料中會遭拒絕,衝突文件及重複使用的標籤亦然。一般編輯保留對應關係;通用寫入不能附加或變更參照。讀取、搜尋、清單、圖譜及 MCP 不會解析這些參照。複製在授權後解析目前憑證,並在回傳明文給本機用戶端前提交不含祕密的稽核傳送意圖。此意圖不證明後續作業系統剪貼簿寫入成功。剪貼簿複製要求不含 NUL 位元組的 UTF-8;複製 OTP 卡片會傳送其種子,而非產生的一次性驗證碼。
替換只影響目前本文,不影響已簽署修訂歷程、復原封存、其他文件、備份或先前分享的副本。這不是自動祕密探索,也不是供應者端金鑰輪替。已曝光的金鑰必須向簽發者撤銷/輪替。新的受保護參照需要更新用戶端;舊用戶端不能解碼新增的內容欄位。替換規則及用戶端行為請參閱使用指南。
資源與操作限制
- Argon2id:64 MiB、三次迭代、一條通道、32 位元組輸出;固定且有版本的參數、16 位元組隨機鹽值。沒有應用程式層級密碼長度限制。
- XChaCha20-Poly1305 使用隨機 24 位元組 nonce;主金鑰、狀態、檢查點、備份、傳輸及 256 KiB 內容區塊使用獨立的驗證上下文。
- 每個修訂版本的編碼資產本文最多 16 MiB(二進位匯入有 base64 額外負擔)。整個加密狀態會在 SQLite 中以交易方式重寫;此設計適用於小型資料收藏,不適用於多 GB 檔案儲存。
- 完整同步封裝:中繼上限 32 MiB。四個同時使用的房間,每個兩個對等端,有限佇列,每秒 16 個傳入框架、60 秒接收閒置限制,以及最長十分鐘連線生命週期。不提供離線傳送。
- 忙碌的可信任子行程最多可占用本機服務五分鐘;執行綁定子行程在該期間只占用自己的 IPC 連線。HTTPS 操作逾時為 30 秒。保留採僅附加方式;稽核/版本修剪及增量同步延後實作。
- 權限衝突解決要求同一擁有者在兩個分支上都仍具授權。更複雜的擁有權爭議會採拒絕存取方式處理,並需要未來明確提供的復原程序。
部署
將中繼繫結至 TLS 後方的回送位址。停用反向代理請求/回應本文記錄、磁碟緩衝、核心傾印及持久容器磁碟區。TLS 保護傳輸中繼資料不被中間網路讀取;端對端加密保護資產,即使 TLS 終結端也無法讀取。範例容器使用非 root 使用者。
從用戶端備份。中繼不是備份系統。請分開保管獨立備份密碼,並在依賴備份前測試復原。
請私下向儲存庫擁有者回報安全缺陷。請勿在公開議題中包含真實密碼、憑證值、已解密內容或完整正式環境封包。