<?xml version="1.0" encoding="utf-8"?>
<?xml-model href="rfc7991bis.rnc"?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     category="info"
     docName="draft-benaudis-iic-credential-00"
     ipr="trust200902"
     submissionType="independent"
     xml:lang="en"
     version="3">

  <front>
    <title abbrev="IIC Credential Format">The Internet Identity Card (IIC) Credential Format: A Self-Contained, Offline-Verifiable Identity Credential with Hybrid Classical and Post-Quantum Signatures</title>
    <seriesInfo name="Internet-Draft" value="draft-benaudis-iic-credential-00"/>
    <author fullname="Michael Benaudis" initials="M." surname="Benaudis">
      <organization>Https Card - Internet Identity Card Ltd</organization>
      <address>
        <postal>
          <street>124 City Road</street>
          <city>London</city>
          <code>EC1V 2NX</code>
          <country>United Kingdom</country>
        </postal>
        <email>contact@internetidentitycard.com</email>
        <uri>https://www.internetidentitycard.com</uri>
      </address>
    </author>
    <date year="2026" month="August"/>
    <area>Security</area>
    <keyword>digital identity</keyword>
    <keyword>post-quantum cryptography</keyword>
    <keyword>hybrid signatures</keyword>
    <keyword>ML-DSA</keyword>
    <keyword>offline verification</keyword>

    <abstract>
      <t>This document describes the Internet Identity Card (IIC) credential
      format, version 9.0: a digital identity credential implemented as a
      single self-contained HTML file that can be generated, stored,
      transferred, and cryptographically verified entirely offline, without
      servers, brokers, or network connectivity.  Identity data is encrypted
      with AES-256-GCM under keys derived by Argon2id; authenticity is
      provided by a hybrid signature combining ECDSA P-256 with ML-DSA-65
      (NIST FIPS 204) under a crypto-agile suite registry; and integrity is
      provided by an embedded SHA-256 self-check over a canonical
      serialization of the document.  Each exported credential embeds its own
      verification engine, so verification requires only a standard web
      browser.  This document is published for informational purposes, to
      describe a deployed format whose underlying constructions are disclosed
      as open prior art.</t>
    </abstract>

    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Source and discussion for this document are coordinated by the
      author; comments are welcome by email.</t>
    </note>
  </front>

  <middle>

    <section anchor="intro">
      <name>Introduction</name>
      <t>Most deployed digital identity systems assume network connectivity
      at verification time: reaching an issuer endpoint, a status service, a
      wallet backend, or a platform intermediary.  This assumption fails in
      settings where identity verification matters most: border crossings and
      field operations without coverage, disaster response, air-gapped
      environments, and any scenario in which a credential must remain
      checkable long after the issuing infrastructure has changed or
      disappeared.</t>
      <t>The Internet Identity Card (IIC) takes the opposite starting point:
      the credential itself carries everything required for its own
      verification.  An IIC credential is a single HTML file embedding the
      encrypted identity payload, the cryptographic parameters, the public
      verification material, and a complete verification engine executable in
      any modern browser, including from removable media with no network
      interface present.</t>
      <t>A second design concern is longevity.  An identity credential may
      need to remain verifiable for decades, well into the period in which
      large-scale quantum computers may threaten classical public-key
      signatures.  Version 9.0 of the format therefore signs every credential
      with a hybrid scheme combining classical ECDSA P-256 <xref
      target="FIPS186"/> with ML-DSA-65, the module-lattice signature
      standardized by NIST as FIPS 204 <xref target="FIPS204"/>, under a
      crypto-agile suite registry that allows future algorithm transitions
      without changes to the container format.  This hybrid-during-transition
      approach follows the guidance of national cybersecurity agencies,
      including ANSSI <xref target="ANSSI"/>.</t>
      <t>This document describes the format as deployed, for informational
      purposes.  The underlying constructions are separately disclosed as
      open prior art under CC BY 4.0 <xref target="TDC11121"/>, and a systems
      paper describing the architecture and its rationale is available <xref
      target="EPRINT"/>.  This document does not define an interchange
      standard and does not request any IETF standards action.</t>
    </section>

    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
      "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
      NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
      "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
      "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
      are to be interpreted as described in BCP&nbsp;14 <xref
      target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
      appear in all capitals, as shown here.</t>
      <dl>
        <dt>Credential (or "card"):</dt>
        <dd>A single self-contained HTML file produced by an IIC generator,
        carrying an encrypted identity payload, signature material, and an
        embedded verification engine.</dd>
        <dt>Generator:</dt>
        <dd>The issuer-side application that creates credentials, holds the
        signing keys, and exports standalone credential files.</dd>
        <dt>Suite:</dt>
        <dd>A named, ordered list of signature algorithms registered in the
        crypto-agile suite registry (<xref target="suites"/>).</dd>
        <dt>Receipt:</dt>
        <dd>A machine-readable record of a document-signing event produced by
        a credential (<xref target="receipts"/>).</dd>
        <dt>Zone:</dt>
        <dd>A delimited region of the credential file whose content is
        excluded from, or specially handled by, the canonical serialization
        (<xref target="integrity"/>).</dd>
      </dl>
    </section>

    <section anchor="overview">
      <name>Architecture Overview</name>
      <t>An IIC v9.0 credential contains, in distinct structural zones:</t>
      <ul>
        <li>an identity payload encrypted with AES-256-GCM <xref
        target="SP80038D"/> under a key derived from a holder passphrase via
        Argon2id <xref target="RFC9106"/> (96&nbsp;MiB memory, 4 iterations,
        4 lanes, random per-credential salt);</li>
        <li>an authenticated header binding the format version, a
        per-credential identifier, an export timestamp, and the active suite
        identifier into the AEAD associated data;</li>
        <li>a hybrid signature block over the credential's signed core,
        together with the corresponding public keys;</li>
        <li>a SHA-256 self-integrity digest over the canonical serialization
        of the file;</li>
        <li>an embedded verification engine (approximately 54&nbsp;KB),
        carried as a base64 payload and activated at load time by a bootstrap
        that attaches it as an inline script element, requiring neither eval
        nor WebAssembly, so that a strict Content Security Policy suffices;
        and</li>
        <li>optionally, a blockchain timestamp anchor reference and a
        freshness token chain.</li>
      </ul>
      <t>Verification of a credential, of its signed core, and of receipts it
      has produced requires no network access and no installed software other
      than a standard web browser.  A typical secure credential is
      approximately 210&nbsp;KB.</t>
    </section>

    <section anchor="suites">
      <name>Crypto-Agile Suite Registry</name>
      <t>Every credential names its algorithm suite through a registry
      identifier bound into the authenticated header.  Algorithms are
      registry entries exposing a uniform keygen/sign/verify interface;
      suites are named lists of algorithm identifiers.  Version 9.0 defines:</t>
      <artwork type="ascii-art"><![CDATA[
SUITES = {
  'hybrid-v1'  : ['ecdsa-p256', 'ml-dsa-65'],   // active
  'pqc-pure-v1': ['ml-dsa-65']                  // registered, future
}
]]></artwork>
      <t>The active suite, hybrid-v1, combines:</t>
      <ul>
        <li>ecdsa-p256: ECDSA over the NIST P-256 curve with SHA-256 <xref
        target="FIPS186"/>; 33-byte compressed public key, 64-byte
        signature.</li>
        <li>ml-dsa-65: ML-DSA-65 <xref target="FIPS204"/>; 1952-byte public
        key, 3309-byte signature.</li>
      </ul>
      <t>Verifiers <bcp14>MUST</bcp14> reject credentials whose declared
      suite they do not implement.  Introducing a successor suite requires
      registering a new identifier and shipping verifier support; it does not
      require changes to the container format, and credentials issued under
      an earlier suite remain verifiable indefinitely by conformant
      verifiers.</t>
    </section>

    <section anchor="core">
      <name>Signed Core Construction</name>
      <t>Signing operates over a canonical byte string binding the payload to
      the public keys and a timestamp:</t>
      <artwork type="ascii-art"><![CDATA[
core   = 'IIC-CORE-v1|' || payload || '|PK|' ||
         concat(pubkeys) || '|TS|' || timestamp
digest = SHA-256(core)
sig_i  = Sign_i(digest)   for each algorithm i in the suite
]]></artwork>
      <t>Each algorithm in the active suite signs the same digest
      independently.  The two key pairs are generated and stored
      independently, so the compromise of one signing key does not affect the
      other.</t>
    </section>

    <section anchor="verifrule">
      <name>Hybrid Verification Rule</name>
      <t>A hybrid signature is valid if and only if:</t>
      <ol>
        <li>every non-deprecated component of the declared suite verifies
        successfully; and</li>
        <li>at least one post-quantum component verifies successfully.</li>
      </ol>
      <t>Deprecating a component (for example, the classical component after
      a quantum break of ECDSA) is a verification-time policy option that
      requires no change to already-signed material.  Because condition (2)
      always requires a valid post-quantum component, the rule structurally
      excludes downgrade to classical-only acceptance.</t>
      <t>Combined with public timestamp anchors (<xref target="anchoring"/>),
      this rule addresses the harvest-now, forge-later attack model: an
      adversary who records signed material today and breaks the classical
      component in the future still cannot forge authorship, and a
      post-deprecation forgery carrying only a broken classical signature
      fails both the post-quantum check and the pre-deprecation anchor
      requirement.</t>
    </section>

    <section anchor="integrity">
      <name>Canonical Serialization and Page Integrity</name>
      <t>The credential verifies its own byte-level integrity offline.  A
      canonical snapshot of the document is captured before any script
      mutation occurs, and elements whose state is legitimately dynamic (such
      as a network-status indicator) are normalized, so that the digest does
      not depend on the runtime environment (for example, whether the file is
      opened without network connectivity).</t>
      <t>Sealing at generation time assembles the full HTML with a
      64-character placeholder zone, computes the SHA-256 digest of that
      serialization, and replaces the placeholder with the digest.
      Verification restores the placeholder, recomputes, and compares.  Any
      byte change outside the placeholder zone <bcp14>MUST</bcp14> trigger a
      fail-closed lockdown of the credential.</t>
      <t>Because a self-serialized document simultaneously carries
      heterogeneous-size hybrid signatures, a self-referential integrity
      digest, and a post-signing anchor reference, these zones are resolved
      in a fixed neutralization order using length-preserving placeholders; a
      complete description of this construction is given in <xref
      target="TDC10795"/>.</t>
      <t>This snapshot-based approach is deliberately independent of
      fetch-based re-reading of the file, which is unavailable on file:// and
      blob: origins in common browsers, precisely the offline deployments
      this format targets.</t>
    </section>

    <section anchor="receipts">
      <name>Document-Signing Receipts</name>
      <t>A credential can sign external content, producing chained receipts.
      Version 9.0 receipts (version string "3.0") have the following
      structure (informative rendering):</t>
      <artwork type="ascii-art"><![CDATA[
receipt = {
  version:   '3.0',
  payload:   { data, cid, fp, ts, nonce, seq, prevHash },
  hash:      SHA-256(payload),
  signature: [...],        // ECDSA signature (legacy field)
  publicKey: { JWK },      // ECDSA public key (legacy field)
  hybrid: {
    suite:      'hybrid-v1',
    signatures: { 'ecdsa-p256': ..., 'ml-dsa-65': ... },
    publicKeys: { 'ecdsa-p256': ..., 'ml-dsa-65': ... }
  }
}
]]></artwork>
      <t>Both algorithms co-sign the same payload hash.  The legacy ECDSA
      fields are preserved so that earlier ECDSA-only verifiers continue to
      validate the classical component; hybrid-aware verifiers validate the
      hybrid block under the rule of <xref target="verifrule"/>.  The chain
      fields (seq, prevHash) prevent silent reordering or truncation of a
      receipt sequence.  Earlier (version "2.0", ECDSA-only) receipts remain
      verifiable for backward compatibility.</t>
    </section>

    <section anchor="anchoring">
      <name>Deterministic Build and Release Anchoring</name>
      <t>The generator is built deterministically: identical source inputs
      always produce a byte-identical output file, so a given release
      corresponds to a single well-defined SHA-256 digest that third parties
      can independently recompute.</t>
      <t>At each release, the issuer submits the release digest to one or
      more public blockchain timestamping services, committing it to public
      ledgers (Bitcoin and Ethereum in current practice).  Anchoring is an
      issuer-performed, per-release, online operation, structurally separate
      from the credential's own offline operation.  Its purpose is longevity:
      the existence and integrity of a given release can later be established
      from public ledgers alone, independent of the issuer's continued
      operation.  Combined with the deterministic build, an anchor is a
      commitment to the semantic content of the release, reproducible by any
      party who rebuilds from the same sources.</t>
    </section>

    <section anchor="security">
      <name>Security Considerations</name>
      <t>This entire document concerns a security mechanism; this section
      summarizes properties and limits.</t>
      <section>
        <name>Threat Model Summary</name>
        <t>The format defends against: network adversaries (defeated by
        offline operation and AEAD encryption); storage adversaries obtaining
        the file at rest (AES-256-GCM under Argon2id-derived keys, with
        memory-hard parameters chosen above common minimum recommendations);
        forgers (SHA-256 self-integrity with fail-closed lockdown, and the
        hybrid signature rule of <xref target="verifrule"/>); and future
        quantum adversaries against authorship (ML-DSA-65 component plus
        pre-deprecation anchors).  AES-256 retains approximately 128-bit
        strength against Grover-type quantum search.</t>
      </section>
      <section>
        <name>Explicit Non-Goals</name>
        <t>Offline revocation is impossible in principle: revocation is new
        information, and information requires a channel.  A purely offline
        verifier cannot learn that a credential valid yesterday was revoked
        today.  Realistic approximations are short-lived credentials
        (bounding exposure by the export timestamp bound into the AEAD
        associated data) and status lists retrieved while connectivity is
        available and consulted offline.  Implementations
        <bcp14>MUST&nbsp;NOT</bcp14> claim offline revocation.</t>
        <t>Compromised endpoints are out of scope: malware on the issuer's or
        verifier's device reads plaintext before encryption or after
        decryption, and a malicious browser or operating system can subvert
        any in-page cryptography.  Key custody binding (that a signing key
        belongs to a particular real-world identity) is external to the
        format: the file proves what was signed, not who the signer is.
        Coerced disclosure of secrets defeats any cryptography.</t>
        <t>Generator provenance is a trust prerequisite: a verifier given a
        tampered generator loses all guarantees.  The deterministic build and
        public anchoring of <xref target="anchoring"/> exist to make
        generator authenticity independently checkable.  In the deployment
        described by this document, the generator, the companion wallet
        application, and issued credentials are not publicly distributed;
        access is granted through a controlled onboarding process.  Only this
        format description and the referenced specifications and defensive
        publications are public.  This document does not depend on public
        distribution of the generator or of any credential: it documents the
        credential file format and its verification properties, which a
        conformant verifier can check given only a credential file and the
        relevant public keys.</t>
      </section>
      <section>
        <name>Algorithm Agility</name>
        <t>The suite registry (<xref target="suites"/>) is the format's
        response to the possibility that any single algorithm may fail.  In
        July 2026, a structural weakness was disclosed in the HAWK signature
        scheme, then in its third round of evaluation in the NIST
        post-quantum signature standardization process and previously
        considered secure after two years of expert review <xref
        target="ANTHROPIC-HAWK"/>.  The HAWK development team subsequently
        announced the withdrawal of their candidate from the NIST process
        <xref target="PQCFORUM-HAWK"/>, and NIST confirmed that HAWK will not
        be standardized or deployed, while noting that the finding does not
        affect any of its finalized PQC standards, including ML-KEM and
        ML-DSA <xref target="NIST-PQC"/>.  This episode illustrates the risk
        this design anticipates: that a scheme reviewed by specialists for an
        extended period can still conceal a fatal weakness.  The format
        deliberately uses only finalized standards (FIPS 204, FIPS 186-5, SP
        800-38D, RFC 9106, FIPS 180-4) and requires at least one valid
        post-quantum component at verification time.</t>
      </section>
    </section>

    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.  The suite registry of <xref
      target="suites"/> is maintained by the issuer as part of the format; it
      is not an IANA registry.</t>
    </section>

  </middle>

  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner"/>
            <date year="1997" month="March"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba"/>
            <date year="2017" month="May"/>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9106" target="https://www.rfc-editor.org/info/rfc9106">
          <front>
            <title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
            <author initials="A." surname="Biryukov"/>
            <author initials="D." surname="Dinu"/>
            <author initials="D." surname="Khovratovich"/>
            <author initials="S." surname="Josefsson"/>
            <date year="2021" month="September"/>
          </front>
          <seriesInfo name="RFC" value="9106"/>
          <seriesInfo name="DOI" value="10.17487/RFC9106"/>
        </reference>
        <reference anchor="FIPS204" target="https://doi.org/10.6028/NIST.FIPS.204">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
          <seriesInfo name="NIST FIPS" value="204"/>
        </reference>
        <reference anchor="FIPS186" target="https://doi.org/10.6028/NIST.FIPS.186-5">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST FIPS" value="186-5"/>
        </reference>
        <reference anchor="SP80038D" target="https://doi.org/10.6028/NIST.SP.800-38D">
          <front>
            <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
            <author initials="M." surname="Dworkin"/>
            <date year="2007" month="November"/>
          </front>
          <seriesInfo name="NIST SP" value="800-38D"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="ANSSI" target="https://cyber.gouv.fr">
          <front>
            <title>Recommandations pour la migration vers la cryptographie post-quantique</title>
            <author>
              <organization>ANSSI</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="TDC11121" target="https://www.tdcommons.org/dpubs_series/11121">
          <front>
            <title>Post-Quantum Ready, Offline-Verifiable Digital Identity Credential: Hybrid ECDSA P-256 and ML-DSA-65 Signing with Embedded Offline Verification Engine, Crypto-Agile Suite Registry, and Deterministic Build in a Self-Contained Single-File Document</title>
            <author initials="M." surname="Benaudis"/>
            <date year="2026" month="July"/>
          </front>
          <refcontent>Technical Disclosure Commons, no. 11121</refcontent>
        </reference>
        <reference anchor="TDC10795" target="https://www.tdcommons.org/dpubs_series/10795">
          <front>
            <title>Canonical Multi-Zone Neutralization for Self-Serialized Documents Carrying Heterogeneous Hybrid Signatures, a Self-Referential Integrity Digest, and a Post-Signing Timestamp Anchor</title>
            <author initials="M." surname="Benaudis"/>
            <date year="2026" month="July"/>
          </front>
          <refcontent>Technical Disclosure Commons, no. 10795</refcontent>
        </reference>
        <reference anchor="ANTHROPIC-HAWK" target="https://www.anthropic.com/research/discovering-cryptographic-weaknesses">
          <front>
            <title>Discovering cryptographic weaknesses with Claude</title>
            <author>
              <organization>Anthropic</organization>
            </author>
            <date year="2026" month="July" day="28"/>
          </front>
        </reference>
        <reference anchor="PQCFORUM-HAWK" target="https://groups.google.com/a/list.nist.gov/g/pqc-forum/c/2r2u6SbHun4">
          <front>
            <title>HAWK-n Key Recovery Reduces to SVP in Dimension n/2 + 1</title>
            <author>
              <organization>NIST pqc-forum (public mailing list)</organization>
            </author>
            <date year="2026" month="July" day="28"/>
          </front>
          <refcontent>Disclosure thread and withdrawal announcement by the HAWK team</refcontent>
        </reference>
        <reference anchor="NIST-PQC" target="https://www.nist.gov/pqc">
          <front>
            <title>Post-Quantum Cryptography</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2026"/>
          </front>
          <refcontent>Statement confirming the HAWK withdrawal</refcontent>
        </reference>
        <reference anchor="EPRINT" target="https://www.internetidentitycard.com">
          <front>
            <title>A Self-Contained, Offline-Verifiable Digital Identity Credential with Hybrid ECDSA P-256 / ML-DSA-65 Signatures</title>
            <author initials="M." surname="Benaudis"/>
            <date year="2026" month="August"/>
          </front>
          <refcontent>IACR Cryptology ePrint Archive (in moderation); specification corpus: DOI 10.5281/zenodo.21738537</refcontent>
        </reference>
      </references>
    </references>

    <section anchor="ack" numbered="false">
      <name>Acknowledgments</name>
      <t>The constructions described here are disclosed as open prior art on
      Technical Disclosure Commons under CC BY 4.0; the complete v9.0
      specification corpus is archived with DOI 10.5281/zenodo.21738537.</t>
    </section>
  </back>
</rfc>
