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 に対応付けられます。バイナリの従来秘密(鍵、証明書)は変更なしで動作し続け、テキストフィールドを持たないだけです。
  • 既存の単一秘密の利用側(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 コード(カウントダウン付き)にはシステムロックによる認証が必要です。