複数フィールドの認証情報
認証情報は、組み込みの 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に対応付けられます。バイナリの従来秘密(鍵、証明書)は変更なしで動作し続け、テキストフィールドを持たないだけです。 - 既存の単一秘密の利用側(
credential copyで--fieldを指定しない場合、HTTP 注入、run バインディング、プロキシ、ログインエクスポート)はすべて、主秘密を使用します。これは従来のバイト、または 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?}— 1 つのフィールド(credential.field.copyとして監査)。権限昇格が必要です。otp_code {vault, asset}—otpフィールドを持つ認証情報も受け付けます。
ホスト型スコープ: credential_show/credential_copy には read、credential_set には write が必要です。
MCP
credential_fields(read グラント): 非機密フィールドと秘密フィールドの名前。秘密値は決して返しません。credential_reveal(allow_all グラント): 1 つのフィールド。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 コード(カウントダウン付き)にはシステムロックによる認証が必要です。