Memories / 文件

本頁目錄

多欄位憑證

憑證也是內建的 credential 卡片類型。通用欄位檢視會將一般憑證中繼資料對應至普通欄位,將機密主體欄位對應至 sensitive,讀取時不會改寫舊版位元組。memories card field 支援相同的有序結構;成功編輯文字欄位後,仍會保留既有使用端所用的結構化憑證主體。舊版二進位憑證會拒絕通用欄位遷移,以免遺失位元組。

一份憑證可以包含多個獨立的選填欄位。所有欄位都可以留空。

欄位 是否機密 儲存位置
username 否 Content.credential.username
url 否 Content.credential.url
notes 否 Content.credential.notes
自訂、secret: false 否 Content.credential.custom[]
password 是 加密主體
otp(base32 種子或 otpauth:// URI) 是 加密主體;種子參數位於 Content.credential.otp
api_key 是 加密主體
自訂、secret: true 是 加密主體

Content.credential(不含機密,可安全列出):

{
  "username": "octo",
  "url": "https://github.com",
  "notes": "work account",
  "custom": [{"name": "team", "value": "core"}],
  "secret_fields": ["password", "otp", "api_key", "pin"],
  "otp": {"digits": 6, "period": 30, "algorithm": "sha1"}
}

結構化主體(使用保管庫加密,在 body 中以 base64url 表示):

{"memories.credential": 2, "password": "…", "otp": "…", "api_key": "…",
 "custom": [{"name": "pin", "value": "…"}]}

相容性與遷移

  • 舊版憑證會在 body 中保留原始機密位元組,並原樣讀取:otpauth:// 值或以 OTP: 開頭的標題會對應至 otp;具有 HTTP 驗證或允許主機設定的憑證會對應至 api_key;其餘則對應至 password。舊版二進位機密(金鑰、憑證)仍可照常使用,只是沒有文字欄位。
  • 每個既有的單一機密使用端(未指定 --field 的 credential copy、HTTP 注入、執行繫結、代理、登入匯出)都會使用主要機密:舊版位元組,或依序選取 password、api_key、otp、第一個機密自訂欄位中首個非空值。
  • 遷移採延遲方式進行:對舊版憑證執行任何 credential_set 寫入時,都會將其改寫為結構化格式,並將舊版值放入對應欄位。memories credential migrate VAULT ASSET 可只執行這項轉換,不做其他變更。先前的修訂版本仍保留在歷史紀錄中,因此不會遺失資料。

CLI

memories credential set VAULT [ASSET] [--title T] [--username U] [--url U] [--notes N]
    [--password] [--api-key] [--otp [--otp-digits 6|8] [--otp-period 30|60] [--otp-algorithm sha1|sha256|sha512]]
    [--field NAME=VALUE]... [--secret-field NAME]... [--remove NAME]...
memories credential show VAULT ASSET          # non-secret fields + names of secret fields
memories credential get VAULT ASSET --field NAME [--reveal]   # secret fields need --reveal
memories credential copy VAULT ASSET [--field NAME]           # clipboard, never printed
memories credential otp VAULT ASSET           # code from the otp field
memories credential migrate VAULT ASSET

機密值只能透過隱藏提示輸入(--password、--api-key、--otp、--secret-field),絕不作為引數傳入。在提示中輸入空值會清除該欄位。

服務請求

  • credential_set {vault, asset?, title?, fields: {username?, password?, otp?, otp_params?, api_key?, url?, notes?, custom: [{name, value, secret}], remove: [name]}} — null/省略會保留欄位,"" 會清除欄位。需要提升權限。
  • credential_show {vault, asset} — 不含機密的檢視;需要提升權限。
  • credential_copy {vault, asset, label?, field?} — 一個欄位(以 credential.field.copy 記錄稽核);需要提升權限。
  • otp_code {vault, asset} — 也接受具有 otp 欄位的憑證。

託管模式的範圍:credential_show/credential_copy 需要 read,credential_set 需要 write。

MCP

  • credential_fields(read 授權):不含機密的欄位,以及機密欄位的名稱;絕不包含機密值。
  • credential_reveal(allow_all 授權):一個欄位;需要 intent: "reveal_plaintext" 及簡短的 reason。以 credential.field.reveal 記錄稽核。MCP 不提供複製整份機密的功能。
  • sealed_reveal 接受選填的 field,用於密封的結構化憑證。

託管 Center 與端對端同步

託管 Center RPC 接受 credential_show(read)及 credential_set(write)。對端對端(e2e)憑證而言,Center 上的副本只能包含描述資訊:credential_set 會拒絕任何非空的機密欄位,機密值只會在裝置密封封套內傳輸。

密封結構化憑證的明文可以是結構化主體本身,也可以是 {"meta": <non-secret fields>, "body": "<structured body>"}。在已配對裝置上:

memories device sealed-get --vault V --card C --field username
memories device sealed-get --vault V --card C --field password --reveal
memories device sealed-get --vault V --card C --otp

未指定 --reveal/--field/--otp 時,只會印出描述資訊及機密欄位名稱。舊版單一機密封套的行為維持原樣。

行動裝置

新增憑證時會開啟分區表單(登入、一次性驗證碼、API、更多,以及帶有機密切換開關的自訂欄位)。所有欄位都是選填;名稱預設為使用者名稱或 URL 主機名稱,只有儲存時仍為空白才會提示輸入。詳細檢視可直接複製一般欄位;啟用生物辨識保護時,機密欄位及即時 OTP 驗證碼(含倒數計時)需要通過系統鎖定驗證。