多欄位憑證
憑證也是內建的 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 驗證碼(含倒數計時)需要通過系統鎖定驗證。