<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 4.0.5) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mih-scitt-agent-action-capsule-sel-disc-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="AAC Selective Disclosure">Selective Disclosure Profile for Agent Action Capsules</title>
    <seriesInfo name="Internet-Draft" value="draft-mih-scitt-agent-action-capsule-sel-disc-00"/>
    <author initials="S." surname="Mih" fullname="Steven Mih">
      <organization>Action State Group, Inc.</organization>
      <address>
        <email>spec@actionstate.ai</email>
      </address>
    </author>
    <date year="2026" month="June" day="19"/>
    <area>Security</area>
    <workgroup>SCITT</workgroup>
    <keyword>SCITT</keyword>
    <keyword>selective disclosure</keyword>
    <keyword>SD-JWT</keyword>
    <keyword>SD-CWT</keyword>
    <keyword>AI agent</keyword>
    <keyword>transparency</keyword>
    <abstract>
      <?line 49?>

<t>This document normatively profiles the per-field selective-disclosure
extension point reserved in draft-mih-scitt-agent-action-capsule-01
Section 9.2 (Selective Disclosure).  It defines the salted-hash commitment encoding, decoy-digest
construction, disclosure format, producer requirements, and verifier
checks for selectively disclosable fields in Agent Action Capsule
payloads.  The mechanism follows the SD-JWT selective-disclosure model
(RFC 9901) — salted-hash commitments, decoy digests, and disclosed
<tt>[salt, name, value]</tt> triples — using JCS (RFC 8785) canonicalization,
which is already the base Capsule profile's canonical form.  SD-JWT
(RFC 9901) is the JSON form; SD-CWT (draft-ietf-spice-sd-cwt) is the
CBOR/dCBOR sibling.  Because the Capsule payload is JSON, this profile
uses the SD-JWT (JSON) construction, cited alongside the SPICE WG's
SD-CWT work for SCITT-ecosystem consistency.  Verifier
checks are deterministic and reproducible from the Capsule bytes plus a
provided disclosure set alone; no clock, network access, model invocation,
or external lookup beyond the provided disclosures is required.</t>
    </abstract>
  </front>
  <middle>
    <?line 68?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The base confidentiality posture of an Agent Action Capsule
<xref target="I-D.mih-scitt-agent-action-capsule"/> is whole-envelope: a producer
either discloses the full Capsule payload to a verifier or withholds it
entirely.  This posture is sufficient when the unit of trust decision is
the Capsule as a whole.</t>
      <t>Two kinds of scenario require finer granularity.  First, a producer may
need to demonstrate that a gate fired — that a <tt>blocked</tt> or <tt>denied</tt>
verdict was recorded — to a verifier who is not entitled to learn which
operator initiated the action or what the specific constraint verdict was.
Second, a producer may serve multiple verifiers with different disclosure
needs from the same signed artifact: a regulator who receives all fields
and an auditing partner who receives only the disposition.</t>
      <t>This document profiles a per-field selective-disclosure mechanism for
Capsule payloads that addresses these scenarios.  The mechanism follows
the SD-JWT selective-disclosure model <xref target="RFC9901"/> — salted-hash
commitments, decoy digests, and disclosed <tt>[salt, name, value]</tt> triples —
applied to the JSON <xref target="RFC8259"/> encoding of the Capsule payload.  SD-JWT <xref target="RFC9901"/>
is the JSON form of this model; SD-CWT <xref target="I-D.ietf-spice-sd-cwt"/> is the
CBOR/dCBOR sibling developed in the SPICE WG.  Because the Capsule
payload is JSON, this profile uses the SD-JWT (JSON) construction and is
aligned with the SD-CWT work for SCITT-ecosystem consistency.  The
construction uses <xref target="RFC8785"/> (JCS, JSON Canonicalization Scheme) to
produce the byte string that SHA-256 is applied to, ensuring the
commitment is deterministic across implementations; JCS is already the
canonical form of the base Capsule profile.</t>
      <t>An SD-Capsule is identical to a plain Capsule in its COSE_Sign1 <xref target="RFC9052"/> envelope
and its <tt>content_type</tt> header; the SD structure is a payload-level feature
signaled by the presence of the <tt>_sd_alg</tt> member in the Capsule payload.
A verifier unaware of this profile processes an SD-Capsule as a plain
Capsule and encounters missing REQUIRED fields where disclosures were not
provided; the SD-aware verifier reconstructs the payload from provided
disclosures before performing base verification.</t>
    </section>
    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP 14
<xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals,
as shown here.</t>
      <dl>
        <dt>SD-Capsule:</dt>
        <dd>
          <t>A Capsule payload containing the <tt>_sd_alg</tt> member and one or more <tt>_sd</tt>
arrays with salted-hash commitments over concealed fields.</t>
        </dd>
        <dt>Disclosure:</dt>
        <dd>
          <t>A base64url-encoded byte string that encodes a JSON array
<tt>[salt, claim_name, claim_value]</tt> (for a concealed object member) or
<tt>[salt, claim_value]</tt> (for a concealed array element), where <tt>salt</tt> is
a base64url-encoded 16-byte random value, and the encoding is the
base64url of the UTF-8 encoding of the JCS serialization of the array.</t>
        </dd>
        <dt>Digest:</dt>
        <dd>
          <t>A base64url-encoded (without padding) SHA-256 hash of the UTF-8
encoding of the JCS serialization of the disclosure array.</t>
        </dd>
        <dt>Eligible field:</dt>
        <dd>
          <t>A Capsule payload member or array element that this profile permits to
be selectively disclosed.  See <xref target="eligible"/>.</t>
        </dd>
        <dt>Reconstructed payload:</dt>
        <dd>
          <t>The Capsule payload obtained after applying a set of disclosures to an
SD-Capsule: concealed members are re-inserted, <tt>_sd</tt> arrays and the
<tt>_sd_alg</tt> member are removed, and <tt>{"...": digest}</tt> array placeholders
are replaced with their disclosed values.</t>
        </dd>
        <dt>BASE64URL:</dt>
        <dd>
          <t>Base64url encoding without padding, as defined in Section 5 of
<xref target="RFC4648"/> (the "URL and Filename Safe" alphabet, "="-stripped).</t>
        </dd>
        <dt>JCS:</dt>
        <dd>
          <t>JSON Canonicalization Scheme per <xref target="RFC8785"/>.  The JCS of a value is
the unique byte string produced by the deterministic serialization
algorithm defined therein.</t>
        </dd>
        <dt>SHA-256:</dt>
        <dd>
          <t>The SHA-256 hash function per <xref target="RFC6234"/>.</t>
        </dd>
      </dl>
      <t>The terms "Capsule", "Producer", "Verifier", "JSON-DIGEST", "Class 1
verifier", and "Class 2 verifier" are as defined in
<xref target="I-D.mih-scitt-agent-action-capsule"/>.</t>
    </section>
    <section anchor="rationale">
      <name>Design Rationale</name>
      <t>The SD-JWT selective-disclosure model <xref target="RFC9901"/> operates over JSON,
using salted-hash commitments, disclosed triples, and decoy digests.
SD-CWT (<xref target="I-D.ietf-spice-sd-cwt"/>) is the CBOR/dCBOR sibling of that
model, operating over CBOR payloads using deterministic CBOR (dCBOR) <xref target="RFC8949"/> for
its hash inputs.  Agent Action Capsule payloads are JSON objects, so this
profile uses the SD-JWT (JSON) construction directly, with JCS
(<xref target="RFC8785"/>) as the canonicalization layer that produces the byte string
hashed.  JCS is already used in the base Capsule profile for the
<tt>JSON-DIGEST</tt> construction, making it the natural choice for consistency.
The profile stays aligned with the SPICE WG's SD-CWT work so that the
two siblings remain consistent across the SCITT ecosystem.</t>
      <t>The commitment algorithm (<xref target="commitment"/>) hashes <tt>UTF8(JCS(disclosure))</tt>,
where the disclosure array is the same <tt>[salt, name, value]</tt> or
<tt>[salt, value]</tt> structure as in SD-JWT <xref target="RFC9901"/>.  This alignment
ensures that the logical properties of the selective-disclosure model
carry over: a commitment is binding under SHA-256's collision resistance;
salts make commitments unlinkable across verifiers; decoy digests hide the
count of concealed fields; and the <tt>_sd_alg</tt> member permits algorithm
agility.</t>
      <t>A future revision of this profile MAY specify additional hash algorithms
under the same <tt>_sd_alg</tt> mechanism; SHA-256 is the only algorithm defined
here.</t>
    </section>
    <section anchor="structure">
      <name>Selective Disclosure Structure</name>
      <section anchor="alg-id">
        <name>Algorithm Identifier</name>
        <t>An SD-Capsule MUST carry the member</t>
        <artwork><![CDATA[
"_sd_alg": "sha-256"
]]></artwork>
        <t>as a top-level member of the Capsule JSON object.  A Capsule without
<tt>_sd_alg</tt> is a plain Capsule and MUST NOT contain any <tt>_sd</tt> arrays or
<tt>{"...": digest}</tt> placeholders.</t>
        <t>The value <tt>"sha-256"</tt> identifies SHA-256 as the hash algorithm applied
to the UTF-8 encoding of the JCS-serialized disclosure array.  No other
value is defined by this profile.</t>
      </section>
      <section anchor="commitment">
        <name>Salted-Hash Commitment Construction</name>
        <t>For each eligible member (<xref target="eligible"/>) that the producer wishes to
conceal, the producer performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate a 16-byte (128-bit) cryptographically random salt <tt>s</tt>.
Encode <tt>s</tt> as a BASE64URL string (no padding), yielding a 22-character
string.</t>
          </li>
          <li>
            <t>Construct the disclosure array:
            </t>
            <ul spacing="normal">
              <li>
                <t>For an object member with name <tt>n</tt> and value <tt>v</tt>:
<tt>disclosure = [salt_b64url, n, v]</tt></t>
              </li>
              <li>
                <t>For an array element with value <tt>v</tt> (see <xref target="array-elements"/>):
<tt>disclosure = [salt_b64url, v]</tt></t>
              </li>
            </ul>
            <t>
where <tt>salt_b64url</tt> is the base64url string from step 1, <tt>n</tt> is a
JSON string, and <tt>v</tt> is any JSON value (string, number, boolean,
object, or array).</t>
          </li>
          <li>
            <t>Compute the commitment digest:
<tt>digest = BASE64URL(SHA-256(UTF8(JCS(disclosure))))</tt>  </t>
            <t>
This is a base64url string (no padding).</t>
          </li>
          <li>
            <t>Append the <tt>digest</tt> to the <tt>_sd</tt> array of the enclosing JSON object.</t>
          </li>
          <li>
            <t>Remove the member <tt>n: v</tt> from the object (for an object member), or
replace the array element with the <tt>{"...": digest}</tt> placeholder
(for an array element).</t>
          </li>
        </ol>
        <t>The <tt>_sd</tt> member of a JSON object is a JSON array of base64url strings
(no padding), each of which is a commitment digest over one concealed
member of that object.  The <tt>_sd</tt> array MUST be sorted in lexicographic
byte order to prevent the position of a digest from leaking information
about the order in which members were concealed.</t>
      </section>
      <section anchor="decoy">
        <name>Decoy Digests</name>
        <t>A producer MAY insert additional commitment digests — decoy digests —
into an <tt>_sd</tt> array to obscure the count of concealed members.  A decoy
digest is structurally identical to a commitment digest but has no
corresponding disclosure: it is computed over a random byte string that
the producer does not record.</t>
        <t>Producers SHOULD generate at least one decoy digest per <tt>_sd</tt> array.
The number of decoy digests SHOULD NOT be deterministically derivable
from the number of eligible fields in the object.</t>
        <t>A verifier that does not receive a disclosure for a given digest treats
it as a decoy and MUST silently ignore it.  Verifiers MUST NOT report
unconsumed digests as errors.</t>
      </section>
      <section anchor="eligible">
        <name>SD-Eligible Fields</name>
        <t>The set of eligible fields — those that MAY be placed in an <tt>_sd</tt> array
and thereby concealed — is enumerated below.  Producers MUST NOT conceal
any field not in this set.  A Capsule with an <tt>_sd</tt> array that conceals a
non-eligible field is non-conforming; verifiers MUST treat such a Capsule
as a structural verification failure.</t>
        <section anchor="eligible-top">
          <name>Top-Level Capsule Members</name>
          <t>The following top-level Capsule payload members MAY be concealed:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Member</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>operator</tt></td>
                <td align="left">The accountable tenant.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>developer</tt></td>
                <td align="left">The agent identity and version.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="eligible-disposition">
          <name><tt>disposition</tt> Sub-Object Members</name>
          <t>Within the <tt>disposition</tt> object, the following members MAY be concealed:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Member</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>verdict_class</tt></td>
                <td align="left">Terminal-verdict reason-class.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>authority</tt></td>
                <td align="left">Opaque authority reference.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>reason_digest</tt></td>
                <td align="left">Digest of the structured private reason.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="eligible-effect">
          <name><tt>effect</tt> Sub-Object Members</name>
          <t>Within the <tt>effect</tt> object, the following members MAY be concealed:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Member</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>type</tt></td>
                <td align="left">Logical action type (registry-governed).</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>external_ref</tt></td>
                <td align="left">Join key for external outcome correlation.</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>irreversibility_class</tt></td>
                <td align="left">Consequence class (registry-governed).</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>effect_attestation</tt></td>
                <td align="left">Evidence grade of the effect claim.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="array-elements">
          <name><tt>constraints</tt> Array Elements</name>
          <t>Individual elements of the top-level <tt>constraints</tt> array MAY be
individually concealed using the array-element mechanism (<xref target="commitment"/>,
step 2b): the element is replaced by <tt>{"...": digest}</tt> in the array.
The disclosure for such an element is the two-element array
<tt>[salt_b64url, constraint_record_value]</tt>, where
<tt>constraint_record_value</tt> is the full JSON object of the concealed
Constraint Record.</t>
          <t>The <tt>constraints</tt> array itself MUST NOT be removed or placed in an <tt>_sd</tt>
array; the array with zero or more <tt>{"...": digest}</tt> placeholders MUST
remain present.</t>
        </section>
        <section anchor="eligible-compliance">
          <name><tt>compliance</tt> Sub-Object Members</name>
          <t>Within the <tt>compliance</tt> object (if present), the following members MAY
be concealed:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Member</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>framework_tags</tt></td>
                <td align="left">Compliance framework tags.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="non-eligible">
          <name>Non-Eligible Fields</name>
          <t>The following fields MUST remain in plain text in the Capsule payload and
MUST NOT appear in any <tt>_sd</tt> array:</t>
          <ul spacing="normal">
            <li>
              <t><tt>spec_version</tt>, <tt>format_version</tt>: structural integrity.</t>
            </li>
            <li>
              <t><tt>capsule_id</tt>: the content-address; it is excluded from its own
computation and concealing it is incoherent.</t>
            </li>
            <li>
              <t><tt>action_id</tt>: the stable action identifier required for correlation and
chain linkage.</t>
            </li>
            <li>
              <t><tt>action_type</tt>: required for SCITT registration policy evaluation.</t>
            </li>
            <li>
              <t><tt>timestamp</tt>: required for temporal ordering and deferral-expiry
computation.</t>
            </li>
            <li>
              <t><tt>disposition.decision</tt>: the core verdict field.</t>
            </li>
            <li>
              <t><tt>disposition.approver</tt>: the disposition type.</t>
            </li>
            <li>
              <t><tt>disposition.human_disposed</tt>: the honest in-the-loop flag.</t>
            </li>
            <li>
              <t><tt>effect.status</tt>: the effect state; required for the effect-attestation
matrix and confirmed-effect binding check.</t>
            </li>
            <li>
              <t><tt>effect.request_digest</tt>, <tt>effect.response_digest</tt>: digest commitments
whose presence and value are checked by the base verifier; concealing
them would make the confirmed-effect binding check non-performable.</t>
            </li>
            <li>
              <t><tt>assurance.*</tt>: derived summary modes; rederivable by any verifier from
checked evidence and MUST remain visible.</t>
            </li>
            <li>
              <t><tt>chain.*</tt> (<tt>parent_capsule_id</tt>, <tt>relation</tt>): linkage integrity fields
required for chain verification.</t>
            </li>
            <li>
              <t><tt>_sd_alg</tt>, <tt>_sd</tt>: SD structure fields.</t>
            </li>
          </ul>
          <t>A verifier MUST treat any <tt>_sd</tt> array entry that, when a disclosure is
provided, resolves to a non-eligible field name as a structural failure.</t>
        </section>
      </section>
    </section>
    <section anchor="production">
      <name>SD-Capsule Production</name>
      <section anchor="payload-encoding">
        <name>Payload Encoding</name>
        <t>To produce an SD-Capsule from a fully-constructed plain Capsule payload,
the producer performs the following steps:</t>
        <ol spacing="normal" type="1"><li>
            <t>Add <tt>"_sd_alg": "sha-256"</tt> to the top-level Capsule object.</t>
          </li>
          <li>
            <t>For each eligible field chosen for concealment:
a. Compute the commitment per <xref target="commitment"/>.
b. Remove the member from its containing object (or replace the array
   element with the <tt>{"...": digest}</tt> placeholder).
c. Add the digest to the containing object's <tt>_sd</tt> array, creating
   it if absent.</t>
          </li>
          <li>
            <t>Optionally, add decoy digests per <xref target="decoy"/>.</t>
          </li>
          <li>
            <t>Sort each <tt>_sd</tt> array in lexicographic byte order.</t>
          </li>
          <li>
            <t>Compute <tt>capsule_id</tt> per <xref target="capsule-id-coverage"/>.</t>
          </li>
        </ol>
      </section>
      <section anchor="capsule-id-coverage">
        <name>capsule_id Coverage</name>
        <t>An SD-Capsule's <tt>capsule_id</tt> is computed over the SD-encoded payload
(the payload with concealed members absent and <tt>_sd</tt> arrays and <tt>_sd_alg</tt>
present), not over the fully-revealed payload.  This follows the same
construction as the base profile: <tt>JSON-DIGEST</tt> of the canonical capsule
form (the full payload minus <tt>capsule_id</tt> and chain-linkage fields) after
absent-field normalization, applied to the SD-encoded form.</t>
        <t>This design means the <tt>capsule_id</tt> is stable regardless of which fields
are later revealed to which verifiers.  The commitment set (the <tt>_sd</tt>
arrays) is part of the content-addressed form and is therefore
tamper-evident via <tt>capsule_id</tt>.</t>
        <t>A verifier reconstructing the payload from disclosures MUST NOT
recompute <tt>capsule_id</tt> over the reconstructed plain form; the recomputed
<tt>capsule_id</tt> check (base profile Class 1 check 2) is performed over the
SD-encoded form before disclosure application.</t>
      </section>
      <section anchor="disclosure-encoding">
        <name>Disclosure Encoding</name>
        <t>A disclosure for an object member <tt>n</tt> with value <tt>v</tt> is:</t>
        <artwork><![CDATA[
encoded_disclosure = BASE64URL(UTF8(JCS([salt_b64url, n, v])))
]]></artwork>
        <t>A disclosure for a <tt>constraints</tt> array element with value <tt>elem</tt> is:</t>
        <artwork><![CDATA[
encoded_disclosure = BASE64URL(UTF8(JCS([salt_b64url, elem])))
]]></artwork>
        <t>where <tt>salt_b64url</tt> is the 22-character base64url string generated in
<xref target="commitment"/> step 1.</t>
        <t>The <tt>encoded_disclosure</tt> is the string that the producer shares with a
verifier when revealing the corresponding concealed field.  A set of
disclosures for a single Capsule is a JSON array of <tt>encoded_disclosure</tt>
strings.</t>
      </section>
      <section anchor="disclosure-delivery">
        <name>Disclosure Delivery</name>
        <t>The transport mechanism for disclosures is out of scope for this
profile.  Disclosures are application-layer material delivered alongside
the Capsule (e.g., in a separate response body, a trusted side-channel,
or an out-of-band credential protocol).  This profile defines only the
encoding and verification of disclosures, not their conveyance.</t>
        <t>A producer MUST retain all disclosure arrays (including salts) for as
long as selective-disclosure presentations of the signed Capsule may be
required.  A producer MUST NOT embed disclosures in the COSE_Sign1
unprotected header or the Capsule payload.</t>
      </section>
    </section>
    <section anchor="verification">
      <name>Verifier Checks</name>
      <t>Verification of an SD-Capsule is performed in two ordered phases:
SD-structure verification (<xref target="sd-phase"/>) followed by base verification
(<xref target="base-phase"/>) on the reconstructed payload.  The overall result is
<tt>ok: true</tt> only when both phases pass.  A verifier MUST return a
structured result as defined by the base profile; the SD phase MAY add
additional findings to that result.</t>
      <section anchor="sd-phase">
        <name>Phase 1: SD Structure Verification</name>
        <t>The following checks are performed on the SD-encoded Capsule bytes and
the provided disclosure set.  Each check is deterministic from those
inputs alone.</t>
        <section anchor="sd-1-algorithm-identifier-check">
          <name>SD-1: Algorithm Identifier Check</name>
          <t>If <tt>_sd_alg</tt> is absent from the Capsule payload:
- If any <tt>_sd</tt> arrays or <tt>{"...": digest}</tt> placeholders are present,
  report a structural failure (<tt>sd_structure_error</tt>).
- Otherwise, process the Capsule as a plain Capsule (<xref target="base-phase"/>).</t>
          <t>If <tt>_sd_alg</tt> is present and its value is not <tt>"sha-256"</tt>:
- Report a structural failure (<tt>sd_unsupported_algorithm</tt>).</t>
          <t>If <tt>_sd_alg</tt> is present and equals <tt>"sha-256"</tt>, continue to SD-2.</t>
        </section>
        <section anchor="sd-2-digest-format-check">
          <name>SD-2: Digest Format Check</name>
          <t>For each string <tt>d</tt> in each <tt>_sd</tt> array at any nesting level:
- <tt>d</tt> MUST be a base64url string (no padding, no whitespace) of length
  43 characters (the base64url encoding of 32 bytes).
- Report <tt>sd_malformed_digest</tt> for any digest that does not conform.</t>
          <t>For each <tt>{"...": v}</tt> object in the <tt>constraints</tt> array:
- <tt>v</tt> MUST be a base64url string conforming to the same length requirement.
- Report <tt>sd_malformed_placeholder</tt> for any that does not conform.</t>
        </section>
        <section anchor="sd-3-disclosure-parsing">
          <name>SD-3: Disclosure Parsing</name>
          <t>For each provided <tt>encoded_disclosure</tt> string:</t>
          <ol spacing="normal" type="1"><li>
              <t>BASE64URL-decode it to obtain a byte string; if decoding fails, report
<tt>sd_disclosure_decode_error</tt> for that disclosure and skip it.</t>
            </li>
            <li>
              <t>Interpret the decoded bytes as UTF-8; if UTF-8 parsing fails, report
<tt>sd_disclosure_utf8_error</tt> and skip it.</t>
            </li>
            <li>
              <t>Parse the UTF-8 string as JSON; if parsing fails, report
<tt>sd_disclosure_json_error</tt> and skip it.</t>
            </li>
            <li>
              <t>Verify the parsed value is a JSON array; otherwise report
<tt>sd_disclosure_not_array</tt> and skip it.</t>
            </li>
            <li>
              <t>Classify by array length:  </t>
              <ul spacing="normal">
                <li>
                  <t>Length 3: object-member disclosure <tt>[salt, name, value]</tt>.
<tt>salt</tt> MUST be a non-empty string; <tt>name</tt> MUST be a string;
<tt>value</tt> may be any JSON value.</t>
                </li>
                <li>
                  <t>Length 2: array-element disclosure <tt>[salt, value]</tt>.
<tt>salt</tt> MUST be a non-empty string; <tt>value</tt> may be any JSON value.</t>
                </li>
                <li>
                  <t>Any other length: report <tt>sd_disclosure_bad_length</tt> and skip it.</t>
                </li>
              </ul>
            </li>
          </ol>
        </section>
        <section anchor="sd-4-commitment-verification-and-reconstruction">
          <name>SD-4: Commitment Verification and Reconstruction</name>
          <t>For each valid object-member disclosure <tt>[salt, name, value]</tt>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Compute <tt>computed = BASE64URL(SHA-256(UTF8(JCS([salt, name, value]))))</tt>.</t>
            </li>
            <li>
              <t>Search the <tt>_sd</tt> array of the appropriate containing object for
<tt>computed</tt>.  The containing object for top-level member disclosures
is the Capsule root object; for <tt>disposition</tt> members it is the
<tt>disposition</tt> object; for <tt>effect</tt> members it is the <tt>effect</tt> object;
for <tt>compliance</tt> members it is the <tt>compliance</tt> object.</t>
            </li>
            <li>
              <t>If <tt>computed</tt> is not found in the appropriate <tt>_sd</tt> array: report
<tt>sd_commitment_mismatch</tt> for this disclosure.</t>
            </li>
            <li>
              <t>If <tt>computed</tt> is found but was already consumed by a prior disclosure
in this verification run: report <tt>sd_duplicate_disclosure</tt>.</t>
            </li>
            <li>
              <t>Otherwise: mark <tt>computed</tt> as consumed; insert <tt>name: value</tt> into the
target object.</t>
            </li>
            <li>
              <t>Verify that <tt>name</tt> is an eligible field name for the target object
(<xref target="eligible"/>).  If not, report <tt>sd_ineligible_field</tt>.</t>
            </li>
          </ol>
          <t>For each valid array-element disclosure <tt>[salt, value]</tt>:</t>
          <ol spacing="normal" type="1"><li>
              <t>Compute <tt>computed = BASE64URL(SHA-256(UTF8(JCS([salt, value]))))</tt>.</t>
            </li>
            <li>
              <t>Search the <tt>constraints</tt> array for a <tt>{"...": computed}</tt> placeholder.</t>
            </li>
            <li>
              <t>If not found: report <tt>sd_commitment_mismatch</tt> for this disclosure.</t>
            </li>
            <li>
              <t>If found but already consumed: report <tt>sd_duplicate_disclosure</tt>.</t>
            </li>
            <li>
              <t>Otherwise: mark the placeholder as consumed; replace it in the array
with <tt>value</tt>.  Verify that <tt>value</tt> is a well-formed Constraint Record
object (has <tt>id</tt>, <tt>result</tt>, <tt>severity</tt>, <tt>blocking</tt> members); if not,
report <tt>sd_constraint_record_malformed</tt> as an informational finding.</t>
            </li>
          </ol>
        </section>
        <section anchor="sd-5-residual-check">
          <name>SD-5: Residual Check</name>
          <t>After all provided disclosures have been processed, the remaining
(unconsumed) entries in every <tt>_sd</tt> array and every remaining
<tt>{"...": digest}</tt> placeholder in the <tt>constraints</tt> array are treated as
decoy digests.  Verifiers MUST silently ignore them and MUST NOT report
unconsumed digests as errors.</t>
        </section>
        <section anchor="sd-6-reconstruction-cleanup">
          <name>SD-6: Reconstruction Cleanup</name>
          <t>Remove <tt>_sd_alg</tt> and all <tt>_sd</tt> arrays from the reconstructed object.
Replace any remaining <tt>{"...": digest}</tt> placeholders in the <tt>constraints</tt>
array with nothing (i.e., remove them from the array); the resulting
<tt>constraints</tt> array reflects only those Constraint Records for which
disclosures were provided.</t>
          <t>Verifiers MUST report the count of concealed-but-not-disclosed Constraint
Records as an informational finding (<tt>sd_undisclosed_constraints: N</tt>) so
that consumers know the visible constraint list may be incomplete.</t>
        </section>
      </section>
      <section anchor="base-phase">
        <name>Phase 2: Base Verification on Reconstructed Payload</name>
        <t>After Phase 1 completes without a structural failure, perform the full
Class 1 verification check set of <xref target="I-D.mih-scitt-agent-action-capsule"/>
on the reconstructed payload.</t>
        <t>There is one adaptation to base Class 1 check 2 (capsule_id recomputation):
the verifier MUST recompute <tt>capsule_id</tt> over the SD-encoded form (the
original payload bytes as received, before disclosure application), not
over the reconstructed plain form.  All other Class 1 checks are
performed on the reconstructed payload.</t>
        <t>If a REQUIRED field was concealed and no disclosure was provided for it,
the reconstructed payload is missing that field and the base structural
check (check 1) will fail.  The verifier MUST report this as
<tt>sd_required_field_not_disclosed: ["operator", ...]</tt> (listing the missing
REQUIRED field names) in addition to the base structural failure, so that
the consumer can distinguish the missing-disclosure case from a
malformed-payload case.</t>
      </section>
      <section anchor="class1-sd">
        <name>Class 1-SD Verifier</name>
        <t>A Class 1-SD verifier performs:
- Phase 1 SD structure verification (<xref target="sd-phase"/>).
- Base Class 1 verification per <xref target="I-D.mih-scitt-agent-action-capsule"/>
  on the reconstructed payload, with the capsule_id adaptation above.</t>
        <t>The overall <tt>ok</tt> result is <tt>true</tt> if and only if Phase 1 reports no
structural failure (SD-1 through SD-4 produce no error-level findings)
and the base Class 1 check set reports <tt>ok: true</tt>.</t>
      </section>
      <section anchor="class2-sd">
        <name>Class 2-SD Verifier</name>
        <t>A Class 2-SD verifier performs Class 1-SD verification and additionally
the Class 2 manifest-aware checks of <xref target="I-D.mih-scitt-agent-action-capsule"/>
on the reconstructed payload.  The Class 2 checks may apply only to
disclosed Constraint Records; a verifier MUST report
<tt>sd_undisclosed_constraints</tt> before applying Class 2 checks so that the
consumer understands the completeness of the manifest check.</t>
      </section>
      <section anchor="verification-result-fields">
        <name>Verification Result Fields</name>
        <t>In addition to the base profile result fields, a verifier implementing
this profile SHOULD include in its structured result:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Meaning</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>sd_alg</tt></td>
              <td align="left">string or null</td>
              <td align="left">The <tt>_sd_alg</tt> value from the Capsule (<tt>"sha-256"</tt> or null if absent).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sd_disclosures_provided</tt></td>
              <td align="left">integer</td>
              <td align="left">Count of disclosure strings provided to the verifier.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sd_disclosures_applied</tt></td>
              <td align="left">integer</td>
              <td align="left">Count of disclosures successfully matched and applied.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sd_undisclosed_constraints</tt></td>
              <td align="left">integer</td>
              <td align="left">Count of <tt>constraints</tt> array elements still concealed after disclosure application.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sd_findings</tt></td>
              <td align="left">array</td>
              <td align="left">List of finding codes from Phase 1 (e.g., <tt>sd_duplicate_disclosure</tt>, <tt>sd_ineligible_field</tt>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>sd_required_field_not_disclosed</tt></td>
              <td align="left">array of strings</td>
              <td align="left">REQUIRED field names absent in the reconstructed payload because their disclosure was not provided.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>The following non-normative examples illustrate the SD construction.
Values are abbreviated for readability.</t>
      <section anchor="tv-operator">
        <name>Example: Concealing <tt>operator</tt></name>
        <t>Given a plain Capsule with <tt>"operator": "acme-corp"</tt> at the top level,
the producer:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generates salt: <tt>rIdm2xVvGT-yKjLWOXXJfg</tt> (22 base64url characters,
encoding 16 random bytes).</t>
          </li>
          <li>
            <t>Constructs the disclosure array:
<tt>["rIdm2xVvGT-yKjLWOXXJfg", "operator", "acme-corp"]</tt></t>
          </li>
          <li>
            <t>Computes JCS of the array:
<tt>["rIdm2xVvGT-yKjLWOXXJfg","operator","acme-corp"]</tt>
(JCS sorts object keys; array members are ordered as given.)</t>
          </li>
          <li>
            <t>Computes <tt>SHA-256(UTF8(JCS(disclosure)))</tt>, base64url-encodes it:
<tt>digest = BASE64URL(SHA-256(b"[\"rIdm2xVvGT-yKjLWOXXJfg\",\"operator\",\"acme-corp\"]"))</tt>
(exact value depends on UTF-8 byte sequence; implementations MUST use
JCS for byte-exact reproduction).</t>
          </li>
          <li>
            <t>Adds <tt>digest</tt> to top-level <tt>_sd</tt> array; removes <tt>"operator"</tt> member.</t>
          </li>
        </ol>
        <t>Resulting SD-Capsule (excerpt):</t>
        <artwork><![CDATA[
{
  "spec_version": "draft-mih-scitt-agent-action-capsule-01",
  "format_version": "2",
  "capsule_id": "<computed over SD-encoded form>",
  "action_id": "act-001",
  "action_type": "decide",
  "_sd_alg": "sha-256",
  "_sd": ["<digest_of_operator_disclosure>", "<decoy_digest>"],
  "timestamp": "2026-06-18T00:00:00Z",
  ...
}
]]></artwork>
        <t>Encoded disclosure string (what the producer sends to reveal <tt>operator</tt>):</t>
        <artwork><![CDATA[
encoded = BASE64URL(UTF8(JCS(
  ["rIdm2xVvGT-yKjLWOXXJfg", "operator", "acme-corp"]
)))
]]></artwork>
      </section>
      <section anchor="tv-constraint">
        <name>Example: Concealing a Constraint Record</name>
        <t>Given a <tt>constraints</tt> array element:
~~~
{
  "id": "spend_limit",
  "check_type": "threshold",
  "result": "pass",
  "severity": "critical",
  "blocking": true
}
~~~</t>
        <t>The producer:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generates salt: <tt>aBcDeFgHiJkLmNoPqRsTuV</tt> (illustrative; replace with
actual random bytes).</t>
          </li>
          <li>
            <t>Constructs array-element disclosure:
<tt>["aBcDeFgHiJkLmNoPqRsTuV", {the constraint record object}]</tt></t>
          </li>
          <li>
            <t>Computes <tt>digest = BASE64URL(SHA-256(UTF8(JCS(disclosure))))</tt>.</t>
          </li>
          <li>
            <t>Replaces the array element with <tt>{"...": "&lt;digest&gt;"}</tt>.</t>
          </li>
        </ol>
        <t>The disclosure string reveals the full Constraint Record to a verifier
who receives it.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <section anchor="commitment-binding">
        <name>Commitment Binding</name>
        <t>The salted-hash commitment is binding under SHA-256's collision resistance:
a producer cannot find two different disclosures that produce the same
digest.  Salts are 128 bits; this exceeds the NIST guidance for
preimage-resistance purposes.</t>
      </section>
      <section anchor="salt-entropy">
        <name>Salt Entropy</name>
        <t>Salts MUST be generated from a cryptographically secure pseudorandom
number generator (CSPRNG).  A salt generated from a weak source enables
a dictionary attack: an adversary who can enumerate the salt space can
attempt to link digests to known values.  Each (salt, name, value) triple
MUST be used for exactly one commitment; reusing a salt for the same name
and value across different Capsules allows correlating otherwise unlinkable
digests.</t>
      </section>
      <section anchor="decoy-digests-and-unlinkability">
        <name>Decoy Digests and Unlinkability</name>
        <t>Decoy digests reduce the precision of the lower bound on the count of
concealed fields, but they do not hide structural information such as the
nesting depth of <tt>_sd</tt> arrays or the presence of a <tt>compliance</tt> object.
Producers with high unlinkability requirements SHOULD generate decoy
digests at every <tt>_sd</tt> array level, not only at the top level.</t>
      </section>
      <section anchor="capsuleid-binding">
        <name>capsule_id Binding</name>
        <t>The <tt>capsule_id</tt> commits to the SD-encoded form.  A verifier that accepts
a capsule_id as identifying a Capsule is accepting the SD form — including
the commitment set.  If the producer later delivers different disclosures
to different verifiers, all resulting reconstructed payloads share the
same <tt>capsule_id</tt>.  This is intentional: <tt>capsule_id</tt> identifies the
event, not the view of the event.</t>
      </section>
      <section anchor="partial-disclosure-and-missing-required-fields">
        <name>Partial Disclosure and Missing Required Fields</name>
        <t>A verifier that receives disclosures for only a subset of concealed
REQUIRED fields MUST NOT treat the partial view as a fully verified
Capsule.  The structured result MUST reflect which required fields were
absent (<tt>sd_required_field_not_disclosed</tt>), and <tt>ok</tt> MUST be <tt>false</tt> in
that case.  A consumer that trusts a partial view without checking
<tt>sd_required_field_not_disclosed</tt> is relying on more than the profile
guarantees.</t>
      </section>
      <section anchor="ineligible-field-concealment">
        <name>Ineligible Field Concealment</name>
        <t>A producer that places a non-eligible field in an <tt>_sd</tt> array produces
a non-conforming SD-Capsule.  Verifiers treat this as a structural
failure (<xref target="sd-phase"/>, SD-4, step 6).  This prevents a producer from
concealing fields (such as <tt>effect.status</tt> or <tt>effect.response_digest</tt>)
whose visibility is required for the base verification invariants to hold.
Concealing <tt>effect.response_digest</tt>, for example, would make the
confirmed-effect binding check non-performable, undermining the <tt>may/did</tt>
distinction.</t>
      </section>
      <section anchor="relationship-to-the-base-profile-security-considerations">
        <name>Relationship to the Base Profile Security Considerations</name>
        <t>The security considerations of <xref target="I-D.mih-scitt-agent-action-capsule"/>
apply without modification.  Selective disclosure does not change the
tamper-evidence properties of the COSE_Sign1 envelope, the
append-only properties of a SCITT Transparency Service <xref target="I-D.ietf-scitt-architecture"/>, or the honesty
invariant of the <tt>human_disposed</tt> flag.  An SD-Capsule registered with
a Transparency Service has its SD-encoded form logged and receipted;
the commitment set is therefore tamper-evident and non-repudiable.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="capsule-payload-reserved-members">
        <name>Capsule Payload Reserved Members</name>
        <t>This document reserves the following members of the Agent Action Capsule
payload.  These members MUST NOT be used for any purpose other than as
defined in this document.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Member name</th>
              <th align="left">Type</th>
              <th align="left">Location</th>
              <th align="left">Defined in</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>_sd_alg</tt></td>
              <td align="left">string</td>
              <td align="left">Top-level Capsule object</td>
              <td align="left">
                <xref target="alg-id"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>_sd</tt></td>
              <td align="left">array of string</td>
              <td align="left">Any eligible JSON object</td>
              <td align="left">
                <xref target="commitment"/></td>
            </tr>
          </tbody>
        </table>
        <t>These members use the underscore-prefixed naming convention to avoid
collision with existing or future Capsule payload members, following the
same convention as the SD-JWT selective-disclosure model <xref target="RFC9901"/> and
its CBOR sibling SD-CWT (<xref target="I-D.ietf-spice-sd-cwt"/>).</t>
        <t>IANA is not requested to create a new registry for these members at this
time.  The interim registry of record for Agent Action Capsule Parameters
(the <tt>REGISTRY.md</tt> file of the source repository of
<xref target="I-D.mih-scitt-agent-action-capsule"/>) is updated to list <tt>_sd_alg</tt> and
<tt>_sd</tt> as reserved members defined by this companion document.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8785">
          <front>
            <title>JSON Canonicalization Scheme (JCS)</title>
            <author fullname="A. Rundgren" initials="A." surname="Rundgren"/>
            <author fullname="B. Jordan" initials="B." surname="Jordan"/>
            <author fullname="S. Erdtman" initials="S." surname="Erdtman"/>
            <date month="June" year="2020"/>
            <abstract>
              <t>Cryptographic operations like hashing and signing need the data to be expressed in an invariant format so that the operations are reliably repeatable. One way to address this is to create a canonical representation of the data. Canonicalization also permits data to be exchanged in its original form on the "wire" while cryptographic operations performed on the canonicalized counterpart of the data in the producer and consumer endpoints generate consistent results.</t>
              <t>This document describes the JSON Canonicalization Scheme (JCS). This specification defines how to create a canonical representation of JSON data by building on the strict serialization methods for JSON primitives defined by ECMAScript, constraining JSON data to the Internet JSON (I-JSON) subset, and by using deterministic property sorting.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8785"/>
          <seriesInfo name="DOI" value="10.17487/RFC8785"/>
        </reference>
        <reference anchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="October" year="2006"/>
            <abstract>
              <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4648"/>
          <seriesInfo name="DOI" value="10.17487/RFC4648"/>
        </reference>
        <reference anchor="RFC8259">
          <front>
            <title>The JavaScript Object Notation (JSON) Data Interchange Format</title>
            <author fullname="T. Bray" initials="T." role="editor" surname="Bray"/>
            <date month="December" year="2017"/>
            <abstract>
              <t>JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data.</t>
              <t>This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="90"/>
          <seriesInfo name="RFC" value="8259"/>
          <seriesInfo name="DOI" value="10.17487/RFC8259"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
        <reference anchor="RFC9901">
          <front>
            <title>Selective Disclosure for JSON Web Tokens</title>
            <author fullname="D. Fett" initials="D." surname="Fett"/>
            <author fullname="K. Yasuda" initials="K." surname="Yasuda"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <date month="November" year="2025"/>
            <abstract>
              <t>This specification defines a mechanism for the selective disclosure
of individual elements of a JSON data structure used as the payload
of a JSON Web Signature (JWS). The primary use case is the selective
disclosure of JSON Web Token (JWT) claims.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9901"/>
          <seriesInfo name="DOI" value="10.17487/RFC9901"/>
        </reference>
        <reference anchor="I-D.ietf-spice-sd-cwt">
          <front>
            <title>Selective Disclosure CBOR Web Tokens (SD-CWT)</title>
            <author fullname="Michael Prorock" initials="M." surname="Prorock">
              <organization>mesur.io</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Tradeverifyd</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
         </author>
            <date day="1" month="June" year="2026"/>
            <abstract>
              <t>   This specification describes a data minimization technique for use
   with CBOR Web Tokens (CWTs).  The approach is inspired by the
   Selective Disclosure JSON Web Token (SD-JWT), with changes to align
   with CBOR Object Signing and Encryption (COSE) and CWTs.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-spice-sd-cwt-08"/>
        </reference>
        <reference anchor="I-D.mih-scitt-agent-action-capsule">
          <front>
            <title>An Agent Action Capsule Profile for SCITT</title>
            <author initials="S." surname="Mih" fullname="Steven Mih">
              <organization>Action State Group, Inc.</organization>
            </author>
            <date>n.d.</date>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mih-scitt-agent-action-capsule-01"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="I-D.ietf-scitt-architecture">
          <front>
            <title>An Architecture for Trustworthy and Transparent Digital Supply Chains</title>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <author fullname="Antoine Delignat-Lavaud" initials="A." surname="Delignat-Lavaud">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Cedric Fournet" initials="C." surname="Fournet">
              <organization>Microsoft Research</organization>
            </author>
            <author fullname="Yogesh Deshpande" initials="Y." surname="Deshpande">
              <organization>ARM</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
         </author>
            <date day="10" month="October" year="2025"/>
            <abstract>
              <t>   Traceability in supply chains is a growing security concern.  While
   verifiable data structures have addressed specific issues, such as
   equivocation over digital certificates, they lack a universal
   architecture for all supply chains.  This document defines such an
   architecture for single-issuer signed statement transparency.  It
   ensures extensibility, interoperability between different
   transparency services, and compliance with various auditing
   procedures and regulatory requirements.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-scitt-architecture-22"/>
        </reference>
      </references>
    </references>
    <?line 766?>

<section numbered="false" anchor="rel-sd-cwt">
      <name>Relationship to SD-JWT and SD-CWT</name>
      <t>This profile follows the SD-JWT selective-disclosure model <xref target="RFC9901"/>,
the JSON form of selective disclosure: salted-hash commitments, decoy
digests, <tt>[salt, name, value]</tt> disclosure triples, and the <tt>_sd</tt>/<tt>_sd_alg</tt>
payload vocabulary.  Because the Capsule payload is JSON, this profile
applies that model directly, using JCS (<xref target="RFC8785"/>) as the
canonicalization layer that produces the byte string hashed.</t>
      <t>SD-CWT (<xref target="I-D.ietf-spice-sd-cwt"/>) is the CBOR/dCBOR sibling of the same
model, developed in the SPICE WG for CBOR Web Tokens (CWTs) using
deterministic CBOR (dCBOR) as its canonicalization layer.  This profile
stays consistent with SD-CWT so the JSON and CBOR forms remain aligned
across the SCITT ecosystem, while using the JSON construction that matches
the Capsule payload.</t>
      <t>The substantive technical contrasts between the JSON construction used
here and the CBOR sibling are:</t>
      <ol spacing="normal" type="1"><li>
          <t>Byte-string input to SHA-256: this profile uses <tt>UTF8(JCS(array))</tt>;
SD-CWT uses <tt>dCBOR(array)</tt>.</t>
        </li>
        <li>
          <t>Payload medium: Capsule payloads are JSON objects, not CBOR maps.</t>
        </li>
        <li>
          <t><tt>_sd</tt> array ordering: this profile requires lexicographic sort;
SD-CWT requires no specific ordering.</t>
        </li>
        <li>
          <t>Array-element disclosures: this profile limits array-element SD to
the <tt>constraints</tt> array; SD-CWT applies it uniformly to any array.</t>
        </li>
      </ol>
      <t>Implementations that also implement SD-CWT MUST use the correct
canonicalization layer for each context.  A JCS-encoded disclosure is
not compatible with a dCBOR-encoded commitment, and vice versa.</t>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change Log</name>
      <t>Since -00 (this document):  initial publication.</t>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks the SCITT and SPICE working groups for the substrate
and selective-disclosure mechanism this profile builds on.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AA==

-->

</rfc>
