實作 bear vault 指令群(unlock/list/get/create/edit/delete/folders/sync/status;對接 bear#39 P3) #17

Closed
opened 2026-09-10 22:49:01 +08:00 by ceo · 1 comment
Member

父 issue:alterminal/bear#39(密碼管理功能規劃,P3 階段)。P1(伺服器核心,#41/#44)與 P2(帳戶設定+Web Vault,#47/#48/#49)皆已完成合併,伺服器端就緒,現開立 bear-cli 端 的 vault 指令群實作。

範圍

對接 alterminal/bear 的 /api/v1/vault JSON API(PAT Bearer,issue #41):

bear vault status [--json]                  # GET  /api/v1/vault/profile(初始化狀態、kdf 參數)
bear vault unlock [--json]                  # 互動輸入主密碼 → PBKDF2-SHA512 60 萬次 → 解開 K_user(僅記憶體)
bear vault lock                             # 丟棄 K_user
bear vault list [--folder UUID] [--json]    # GET  /ciphers(顯示 name;解密需先 unlock)
bear vault get <uuid> [--json]              # GET  /ciphers/:uuid
bear vault create --type login|secure_note|card|identity [--folder UUID]
              # 互動輸入欄位 → 客戶端加密 → POST /ciphers
bear vault edit <uuid>                      # 互動編輯 → 客戶端加密 → PUT  /ciphers/:uuid
bear vault delete <uuid>                    # POST /ciphers/:uuid/delete(進回收桶)
bear vault restore <uuid>                   # POST /ciphers/:uuid/restore
bear vault purge <uuid>                     # DELETE /ciphers/:uuid/purge(永久刪除,需確認提示)
bear vault folders [list|create|rename|delete]  # /folders CRUD(name 客戶端加密)
bear vault sync [--json]                    # GET+POST /sync(revision 對照;離線衝突以伺服器為準)
bear vault password change                  # 解鎖後重新包裝 wrapped_user_password 上傳(不動 cipher)
bear vault rescue                           # 助記詞救援:解開 K_user → 設新主密碼 → 重新包裝上傳

實作要點

  • 端到端加密全在客戶端:加解密、PBKDF2 推導、BIP39 助記詞不得呼叫伺服器或相依伺服器程式碼;格式必須與 Web Vault 一致——加密字串 "2.<iv_b64>.<ct_b64>.<mac_b64>"(AES-256-CBC+HMAC-SHA-256、PKCS#7、encrypt-then-MAC、先驗 MAC 再解密)、K_user 為隨機 64-byte(前 32 enc_key/後 32 mac_key)、KDF 參數以 GET /api/v1/vault/config 公告為準(不寫死)。
  • 交叉驗證:以 bear 倉庫 Bear.Vault.Crypto(Elixir)產生的密文樣本驗證 CLI 解密、CLI 加密後 Web Vault 可開,兩方向都要測。
  • 主密碼/助記詞以互動提示讀取(不回顯、不進 shell history、不接受命令列明文參數);K_user 僅存記憶體(本版不做 OS keyring 快取,文件同步移除 keyring 敘述)。
  • 助記詞只顯示一次的規則僅適用設定(Web Vault P2 已完成);CLI 不提供重新顯示。
  • --json 輸出與其他指令群一致;退出碼沿用 docs/commands.md §4 總表(401→3、403→8、404/422→1、網路→6)。
  • 先在 docs/commands.md 補 §3.x 規格(選項、行為、輸出、退出碼),再實作;規格與實作可同一 PR,但文件須先行審閱。
  • 測試比照 cli_test.exs 注入 fake API;加解密單元測試用 Bear.Vault.Crypto 樣本。

驗收

  • 上列指令可用、--json 一致、mix test 全綠;與 Web Vault(P2)互操作(同一 vault 兩端可互相解密);docs/commands.md 與 README 同步更新。
父 issue:alterminal/bear#39(密碼管理功能規劃,P3 階段)。P1(伺服器核心,#41/#44)與 P2(帳戶設定+Web Vault,#47/#48/#49)皆已完成合併,伺服器端就緒,現開立 **bear-cli 端** 的 vault 指令群實作。 ## 範圍 對接 alterminal/bear 的 `/api/v1/vault` JSON API(PAT Bearer,issue #41): ``` bear vault status [--json] # GET /api/v1/vault/profile(初始化狀態、kdf 參數) bear vault unlock [--json] # 互動輸入主密碼 → PBKDF2-SHA512 60 萬次 → 解開 K_user(僅記憶體) bear vault lock # 丟棄 K_user bear vault list [--folder UUID] [--json] # GET /ciphers(顯示 name;解密需先 unlock) bear vault get <uuid> [--json] # GET /ciphers/:uuid bear vault create --type login|secure_note|card|identity [--folder UUID] # 互動輸入欄位 → 客戶端加密 → POST /ciphers bear vault edit <uuid> # 互動編輯 → 客戶端加密 → PUT /ciphers/:uuid bear vault delete <uuid> # POST /ciphers/:uuid/delete(進回收桶) bear vault restore <uuid> # POST /ciphers/:uuid/restore bear vault purge <uuid> # DELETE /ciphers/:uuid/purge(永久刪除,需確認提示) bear vault folders [list|create|rename|delete] # /folders CRUD(name 客戶端加密) bear vault sync [--json] # GET+POST /sync(revision 對照;離線衝突以伺服器為準) bear vault password change # 解鎖後重新包裝 wrapped_user_password 上傳(不動 cipher) bear vault rescue # 助記詞救援:解開 K_user → 設新主密碼 → 重新包裝上傳 ``` ## 實作要點 - **端到端加密全在客戶端**:加解密、PBKDF2 推導、BIP39 助記詞不得呼叫伺服器或相依伺服器程式碼;格式必須與 Web Vault 一致——加密字串 `"2.<iv_b64>.<ct_b64>.<mac_b64>"`(AES-256-CBC+HMAC-SHA-256、PKCS#7、encrypt-then-MAC、先驗 MAC 再解密)、K_user 為隨機 64-byte(前 32 enc_key/後 32 mac_key)、KDF 參數以 `GET /api/v1/vault/config` 公告為準(不寫死)。 - 交叉驗證:以 bear 倉庫 `Bear.Vault.Crypto`(Elixir)產生的密文樣本驗證 CLI 解密、CLI 加密後 Web Vault 可開,兩方向都要測。 - 主密碼/助記詞以互動提示讀取(不回顯、不進 shell history、不接受命令列明文參數);K_user 僅存記憶體(本版不做 OS keyring 快取,文件同步移除 keyring 敘述)。 - 助記詞只顯示一次的規則僅適用設定(Web Vault P2 已完成);CLI 不提供重新顯示。 - `--json` 輸出與其他指令群一致;退出碼沿用 docs/commands.md §4 總表(401→3、403→8、404/422→1、網路→6)。 - 先在 docs/commands.md 補 §3.x 規格(選項、行為、輸出、退出碼),再實作;規格與實作可同一 PR,但文件須先行審閱。 - 測試比照 cli_test.exs 注入 fake API;加解密單元測試用 `Bear.Vault.Crypto` 樣本。 ## 驗收 - 上列指令可用、`--json` 一致、`mix test` 全綠;與 Web Vault(P2)互操作(同一 vault 兩端可互相解密);docs/commands.md 與 README 同步更新。
alex was assigned by ceo 2026-09-10 22:49:01 +08:00
Member

開始處理:我(alex)接手這個 issue。將先閱讀 bear-cli 與 bear 倉庫的規範與既有實作(Bear.Vault.Crypto、vault API),先補 docs/commands.md 規格再實作。

開始處理:我(alex)接手這個 issue。將先閱讀 bear-cli 與 bear 倉庫的規範與既有實作(Bear.Vault.Crypto、vault API),先補 docs/commands.md 規格再實作。
ceo closed this issue 2026-09-10 23:36:30 +08:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alterminal/bear-cli#17