<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.3.8) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

<!ENTITY RFC2119 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC8259 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8259.xml">
<!ENTITY RFC8785 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8785.xml">
<!ENTITY RFC4648 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml">
<!ENTITY RFC8032 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8032.xml">
<!ENTITY RFC7693 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7693.xml">
<!ENTITY RFC8017 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8017.xml">
<!ENTITY RFC1321 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1321.xml">
<!ENTITY RFC5958 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5958.xml">
<!ENTITY RFC7468 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7468.xml">
<!ENTITY RFC1034 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1034.xml">
<!ENTITY RFC5891 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5891.xml">
<!ENTITY RFC9110 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml">
<!ENTITY RFC8615 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8615.xml">
<!ENTITY RFC2045 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2045.xml">
<!ENTITY RFC5646 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5646.xml">
<!ENTITY RFC9112 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9112.xml">
<!ENTITY RFC9293 SYSTEM "https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9293.xml">
]>


<rfc ipr="trust200902" docName="draft-varnagy-iid-protocol-00" category="info" submissionType="independent">
  <front>
    <title abbrev="IID Protocol">Internet Identity Protocol (IID)</title>

    <author initials="Z." surname="Varnagy" fullname="Várnagy Zoltán">
      <organization>Independent</organization>
      <address>
        <email>doi6doi@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="July" day="20"/>

    <area>General</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>identity</keyword> <keyword>authentication</keyword> <keyword>message</keyword> <keyword>signature</keyword>

    <abstract>


<?line 92?>

<t>This document specifies the IID protocol, which defines
message formats and operations for managing personal data,
permissions, and attributes associated with internet identities, 
including natural persons, organizations and artificial intelligence 
agents.</t>

<t>The protocol is designed to be simple, extensible, platform-independent,
and human readable. It is transport-agnostic and supports arbitrary
cryptographic algorithms.</t>



    </abstract>



  </front>

  <middle>


<?line 104?>

<section anchor="requirements-language"><name>Requirements Language</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>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests no IANA actions. Future standards-track versions of 
this protocol MAY request registration of the /.well-known/iid URI in accordance 
with <xref target="RFC8615"/>.</t>

</section>
<section anchor="introduction"><name>Introduction</name>

<t>Currently, there is no single, unified protocol designed to manage
comprehensive internet identity functions in a general and uniform manner.
Existing methods for distinct identity-related tasks - such as 
authentication, personal data sharing, consent management, and digital
signatures - rely on disparate, ad-hoc solutions. These separate systems
offer only partial compatibility and limited interoperability with one another.</t>

</section>
<section anchor="objectives"><name>Objectives</name>

<t>The primary objective of the protocol is to provide a uniform framework for
the identity-related operations, including:</t>

<t><list style="symbols">
  <t>Authentication (sign-in, SSO)</t>
  <t>Personal data sharing</t>
  <t>Consent management (granting and revoking permissions)</t>
  <t>Data attestation and third-party verification</t>
  <t>Digital signatures</t>
  <t>Future protocol extensions</t>
</list></t>

<t>The protocol is designed to be inherently simple and human-readable.</t>

<t>It must remain platform-independent, ensuring straightforward implementation
across any programming language.</t>

<t>To remain adaptable to both current and future environments, the protocol
must not impose restrictions on the specific transport layer or cryptographic
algorithm used.</t>

</section>
<section anchor="basic-idea"><name>Basic idea</name>

<t>The fundamental idea is to define the messages in a JSON-based format <xref target="RFC8259"/>.
The exact method of transporting these messages (such as HTTPS <xref target="RFC9110"/> <xref target="RFC9112"/> 
or TCP <xref target="RFC9293"/>) is outside the scope of this protocol.</t>

<t>Messages are exchanged between internet identities. They MAY contain
a timestamp indicating when they were sent, the identifiers of the sender and recipient, 
and data required to verify their digital authenticity.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>internet identity</dt>
  <dd>
    <t>An entity capable of communicating over the internet, 
 such as a natural person, organization, server, web crawler or AI agent.</t>
  </dd>
  <dt>identity server (IID server)</dt>
  <dd>
    <t>A server that manages the data and operations associated with an internet identity.</t>
  </dd>
  <dt>internet identifier (IID)</dt>
  <dd>
    <t>A globally unique identifier consisting of a local name and a domain 
 name separated by <spanx style="verb">@</spanx>. Similar to an e-mail address. (for example <spanx style="verb">foo@bar.org</spanx>)</t>
  </dd>
  <dt>IID message</dt>
  <dd>
    <t>A request or response exchanged between internet identities.</t>
  </dd>
  <dt>sender</dt>
  <dd>
    <t>Depending on the context, either the IID in the from field of a message, 
 or the identity server acting on behalf of that identity.</t>
  </dd>
  <dt>receiver</dt>
  <dd>
    <t>The identity server that receives and processes an IID message.</t>
  </dd>
  <dt>recipient</dt>
  <dd>
    <t>The IID in the to field of a message.</t>
  </dd>
</dl>

</section>
<section anchor="protocol"><name>Protocol</name>

<section anchor="protocol-scheme"><name>Protocol scheme</name>

<t>The protocol assumes an already established transport connection 
between a sender and a receiver. In most cases both are identity servers 
representing the sender and recipient IIDs, 
but messages MAY also be relayed through intermediaries.</t>

<t>Communication starts with a request sent by the sender. Each request
receives exactly one response from the receiver. 
The sender MAY continue sending further requests, each of which
receives a response in the same order.</t>

<t>Either party MAY close the connection at any time. Closing the connection 
cancels any outstanding requests.</t>

</section>
<section anchor="special-json-strings"><name>Special JSON strings</name>

<t>Fundamentally, the IID protocol operates on JSON data <xref target="RFC8259"/>.
To extend the capabilities of JSON, certain string values have 
special meanings:</t>

<t>String beginning with # are interpreted specially. An implementation MUST recognize these 
values, for example by performing an additional processing pass after parsing the JSON data,
or before serializing data to JSON.</t>

<t><list style="symbols">
  <t><spanx style="verb">##...</spanx> : A JSON string that begins with <spanx style="verb">#</spanx>, with the first <spanx style="verb">#</spanx> removed (e.g., <spanx style="verb">##foo</spanx> -&gt; <spanx style="verb">#foo</spanx>)</t>
  <t><spanx style="verb">#6...</spanx> : Base64-encoded binary data <xref target="RFC4648"/> without line breaks or padding (e.g., <spanx style="verb">#6WA</spanx>)</t>
  <t><spanx style="verb">#x...</spanx> : Hex-encoded binary data using lowercase hexadecimal digits (e.g., <spanx style="verb">#x585a</spanx>)</t>
  <t><spanx style="verb">#e...</spanx> : Error token (e.g., <spanx style="verb">#eiid.missing</spanx>)</t>
  <t><spanx style="verb">#m...</spanx> : Action (method) token (e.g., <spanx style="verb">#miid.weblogin</spanx>)</t>
  <t><spanx style="verb">#a...</spanx> : Algorithm token. (e.g., <spanx style="verb">#aiid.md5</spanx>)</t>
  <t><spanx style="verb">#k...</spanx> : Key format token (e.g.m <spanx style="verb">#kiid.rsa.2048</spanx>)</t>
  <t><spanx style="verb">#r...</spanx> : Requirement token (e.g., <spanx style="verb">#riid.at</spanx>)</t>
  <t><spanx style="verb">#d...</spanx> : Data token (e.g., <spanx style="verb">#diid.zip</spanx>)</t>
  <t><spanx style="verb">#v...</spanx> : Value token (e.g., <spanx style="verb">#viid.firm</spanx>)</t>
</list></t>

</section>
<section anchor="json-objects"><name>JSON objects</name>

<t>IID messages use JSON format, and every message is represented as a 
JSON object <xref target="RFC8259"/>. The structure of these messages and their 
components is defined in later sections.</t>

<t>Any JSON object MAY contain additional fields. If a server or client does not
understand a message or some of its parts, it MAY either ignore
the unrecognized part or return an appropriate error token to the sender.</t>

<t>If a server requires a field and it is not present, it MUST
return an error token.</t>

</section>
<section anchor="type-syntax"><name>Type syntax</name>

<t>The following type syntax is used throughout this document.</t>

<t>Normalized strings:</t>

<t>All strings in JSON data MUST be normalized using Unicode
Normalization Form C (NFC) <xref target="UAX15"/>.</t>

<section anchor="basic-types"><name>Basic types</name>

<t><list style="symbols">
  <t><spanx style="verb">%null%</spanx>: The <spanx style="verb">null</spanx> value</t>
  <t><spanx style="verb">%bool%</spanx>: Boolean value (<spanx style="verb">true</spanx>/<spanx style="verb">false</spanx>)</t>
  <t><spanx style="verb">%nat%</spanx>: Natural number (integer greater than or equal to <spanx style="verb">0</spanx>)</t>
  <t><spanx style="verb">%int%</spanx>: Integer</t>
  <t><spanx style="verb">%num%</spanx>: Integer or floating point value</t>
  <t><spanx style="verb">%ascii%</spanx>: ASCII text (<spanx style="verb">[0x20-0x7e]+</spanx>)</t>
  <t><spanx style="verb">%str%</spanx>: Unicode text (with NFC)</t>
  <t><spanx style="verb">%stamp%</spanx>: UTC Unix timestamp in seconds (integer)</t>
  <t><spanx style="verb">%iid%</spanx>: Internet identifier (e.g., <spanx style="verb">foo@bar.org</spanx>, see details later)</t>
  <t><spanx style="verb">%date%</spanx>: Date without time or timezone (<spanx style="verb">YYYYMMDD</spanx>)</t>
  <t><spanx style="verb">%country%</spanx>: Country code <xref target="ISO3166"/></t>
  <t><spanx style="verb">%phone%</spanx>: Phone number (<spanx style="verb">+?[0-9]{3,}</spanx>)</t>
  <t><spanx style="verb">%lang%</spanx>: Language code <xref target="RFC5646"/></t>
  <t><spanx style="verb">%bin%</spanx>: Binary data (e.g., Base-64 or hexadecimal-encoded)</t>
  <t><spanx style="verb">%url%</spanx>: URL (e.g., <spanx style="verb">https://foo.org</spanx>)</t>
  <t><spanx style="verb">%obj%</spanx>: JSON object with arbitrary fields</t>
  <t><spanx style="verb">%#...%</spanx>: Token or fix token value</t>
  <t><spanx style="verb">%any%</spanx>: Any value</t>
</list></t>

<t>New types can be defined from existing types in the following ways.</t>

</section>
<section anchor="union"><name>Union</name>
<figure><artwork><![CDATA[
   %a% | %b% | %c%
]]></artwork></figure>
<t>A value of any of the listed types</t>

</section>
<section anchor="array"><name>Array</name>
<figure><artwork><![CDATA[
    [%t%]
]]></artwork></figure>
<t>An array whose elements are of type <spanx style="verb">%t%</spanx>.</t>

</section>
<section anchor="array-or-item"><name>Array or item</name>
<figure><artwork><![CDATA[
   {%t%}
]]></artwork></figure>
<t>A value of type <spanx style="verb">%t%</spanx>, or an array whose elements are of type <spanx style="verb">%t%</spanx>.</t>

</section>
<section anchor="inheritance"><name>Inheritance</name>
<figure><artwork><![CDATA[
    %a% {
       !f1: %t1% - comment1
       f2: %t2% - comment2
       ...
    }
]]></artwork></figure>
<t>An object that extends <spanx style="verb">%a%</spanx>. MAY contain all the fields of <spanx style="verb">%a%</spanx>,
   together with field <spanx style="verb">f1</spanx> of type <spanx style="verb">%t1%</spanx> (meaning <spanx style="verb">comment1</spanx>), field <spanx style="verb">f2</spanx>
   of type <spanx style="verb">%t2%</spanx> (meaning <spanx style="verb">comment2</spanx>) and so on.</t>

<t>If a field name is prefixed with <spanx style="verb">!</spanx>, it is the default field.
   In that case the type also allows a scalar value instead of
   an object. Such value  MUST be interpreted as an object
   containing only the default field with the specified value.</t>

</section>
</section>
<section anchor="iid-types"><name>IID types</name>

<section anchor="identity-iid"><name>Identity (%iid%)</name>

<t>An Internet Identifier (IID) MUST consist of a local part, the <spanx style="verb">@</spanx> symbol and a
domain part. It MUST be in normalized (NFC) form. Any unicode characters are allowed
in the local and domain parts, except the following ones:</t>

<t><list style="symbols">
  <t>at sign: <spanx style="verb">@</spanx> (\u40)</t>
  <t>control characters: (\u00-\u1f)</t>
  <t>space (\u20)</t>
  <t>brackets: <spanx style="verb">()[]{}</spanx> (\u28,\u29,\u5b,\u5d,\u7b,\u7d)</t>
  <t>quotation mark: <spanx style="verb">"</spanx> (\u22)</t>
  <t>question mark: <spanx style="verb">?</spanx> (\u3f)</t>
  <t>semicolon: <spanx style="verb">;</spanx> (\u3b)</t>
  <t>backslash: <spanx style="verb">\</spanx> (\u5c)</t>
</list></t>

<t>IID-s are case-sensitive. Two IIDs are equal if and only if all 
their Unicode code points are identical.</t>

</section>
<section anchor="message-iidmessage"><name>Message (%iid.message%)</name>

<t>A general message, which can be exchanged between internet identities.</t>

<figure><artwork><![CDATA[
%iid.message% : %obj% {
   at: %stamp% - Time the message was sent
   from: %iid.subject% - Sender
   to: %iid.subject% - Recipient
   error: %iid.error% - Error. If present, 
      the preceding request MUST be considered to have failed.
   mid: %ascii% - Message identifier
   sign: {%iid.sign%} - Digital signature
   encrypted: %iid.encrypted% - Encrypted data
}
]]></artwork></figure>

</section>
<section anchor="subject-iidsubject"><name>Subject (%iid.subject%)</name>

<t>Identifies an internet identity. In most cases this is an internet identifier, but it MAY 
also be another form of identification.</t>

<figure><artwork><![CDATA[
%iid.subject% : %iid% | %obj%
]]></artwork></figure>

</section>
<section anchor="error-iiderror"><name>Error (%iid.error%)</name>

<t>Represents an error that occurred during message exchange. It can indicate
a syntax error in the preceding message, invalid data values, insufficient
permissions, an invalid signature, or any other error condition.
Common error tokens are defined in a later section.</t>

<t>In most cases, an error is represented by an error token.
If additional information is available (such as error message), 
the object form can be used.</t>

<figure><artwork><![CDATA[
%iid.error% : %obj% {
   !error: %#e%
   message: %str% - Human-readable error message
}
]]></artwork></figure>

<t>Additional fields MAY be present.</t>

</section>
<section anchor="signature-iidsign"><name>Signature (%iid.sign%)</name>

<t>Represents a digital signature. If the ref field is not present, the signature 
applies to the object that contains it. The signed data is the JCS
representation of that object with the sign field omitted <xref target="RFC8785"/>.
All binary data MUST use the Base64 (<spanx style="verb">#6...</spanx>) notation without line breaks 
and without padding.</t>

<t>An object MAY be signed by multiple keys owned by different internet identities. 
In that case, the sign field contains an array of <spanx style="verb">%iid.sign%</spanx> objects.</t>

<t>If multiple signatures are present, the signature set is considered valid 
only if all signatures are valid.</t>

<figure><artwork><![CDATA[
%iid.sign% : %obj% {
   owner: %iid.subject% - Signer
   key: %iid.key% - Key used for signing
   algo: %iid.algo% - Algorithm used for signing
   ref: %iid.dataref% - Reference to signed data 
      (e.g., identifier, a hash, URL, etc...)
   sign: %bin% - Digital signature value
}
]]></artwork></figure>

</section>
<section anchor="encrypted-data-iidencrypted"><name>Encrypted data (%iid.encrypted%)</name>

<t>If the transfer channel is not considered secure, or the transmitted data 
requires additional protection, a message MAY be encapsulated in this form.
Fields omitted from the encrypted object MAY be inherited from the
containing object or from the transfer context.</t>

<t>The encoding of the data field is defined by the selected 
encryption algorithm.</t>

<figure><artwork><![CDATA[
%iid.encrypted% : %obj% {
   !data: %bin% - Encrypted binary data
   owner: %iid.subject% - Owner of the decryption key
   key: %iid.key% - Decryption key
   algo: %iid.algo% - Encryption algorithm
}
]]></artwork></figure>

</section>
<section anchor="key-iidkey"><name>Key (%iid.key%)</name>

<t>Represents a signing or encryption key. In most cases, only the
key name is used, while the remaining key properties (such as pub, algo, and until)
can be obtained from the key owner's identity server. 
A key is globally identified by the owner's IID and the key name.</t>

<t>An identity server MAY revoke, for example in the event of key compromise.
Once a key has been revoked, the until field MUST NOT be returned.
Instead, the revoked field MUST be present and indicate the time at which
the key was revoked.</t>

<t>In the event of key compromise, the revoked timestamp SHOULD indicate
the latest estimated time before the key was compromised.</t>

<t>Any signature or data encryption after the revoked timestamp MUST be considered invalid.</t>

<t>An identity server MUST NOT generate signatures or encrypt data using a revoked key.</t>

<figure><artwork><![CDATA[
%iid.key% : %obj% {
   !name: %str% - Name of the key 
      (issued by the identity server or the identity)
   format: %#k% - Key format (e.g., `#kiid.der-rsa.2048`)
   pub: %bin% - Public part of the key
   from: %stamp% - Start of valid period
   until: %stamp% - End of valid period
   revoked: %stamp% - Time of key revoke
}
]]></artwork></figure>

</section>
<section anchor="reference-iidref"><name>Reference (%iid.ref%)</name>

<t>References a piece of data or a document.</t>

<t>It can be a single identifier, defined by the current context,
or a custom object with values, like an IID message.</t>

<figure><artwork><![CDATA[
%iid.ref% : %str% | %obj%
]]></artwork></figure>

</section>
<section anchor="data-reference-iiddataref"><name>Data reference (%iid.dataref%)</name>

<t>Reference to some kind of binary data.</t>

<t>If a single identifier is used, the meaning is determined by the context.</t>

<t>When the object form is used, its fields identify the data. 
All specified field values SHOULD match the referenced data.</t>

<figure><artwork><![CDATA[
%iid.dataref% : %obj% {
   !id: %str% - Data identifier
   name: %str% - Data name
   filename: %str% - Filename
   mime: %ascii% - MIME content type (RFC2045)
   hash: {%iid.hash%} - Computed hash values
}
]]></artwork></figure>
<t><xref target="RFC2045"/></t>

</section>
<section anchor="algorithm-iidalgo"><name>Algorithm (%iid.algo%)</name>

<t>References a cryptographic algorithm. In simple cases, only a token is used
(like <spanx style="verb">#aiid.md5</spanx>). The object form can be used if the algorithm requires
additional parameters.</t>

<figure><artwork><![CDATA[
%iid.algo% : %obj% {
   !algo: %#a%
}
]]></artwork></figure>

</section>
<section anchor="request-iidrequest"><name>Request (%iid.request%)</name>

<t>An IID request sent to another internet identity. 
Every request expects exactly one response.</t>

<figure><artwork><![CDATA[
%iid.request% : %iid.message% {
   action: %#m% - Requested action
   params: %any% - Action parameters
   requirement: {%iid.requirement%} - Response requirements
}
]]></artwork></figure>

</section>
<section anchor="response-iidresponse"><name>Response (%iid.response%)</name>

<t>Represents the response to a request.</t>

<figure><artwork><![CDATA[
%iid.response% : %iid.message% {
   ref: %iid.ref% - Reference to the request 
      (e.g., message identifier or hash)
   value: %any% - Result of the requested action
   requirement: {%iid.requirement%} - Requirements for 
      the following requests
}
]]></artwork></figure>

</section>
<section anchor="hash-value-iidhash"><name>Hash value (%iid.hash%)</name>

<t>A hash, checksum or other value computed from data.</t>

<figure><artwork><![CDATA[
%iid.hash% : %obj% {
   algo: %iid.algo% - Algorithm used
   value: %bin% | %nat% - Computed value
}
]]></artwork></figure>

</section>
<section anchor="requirement-iidrequirement"><name>Requirement (%iid.requirement%)</name>

<t>Specifies a requirement that applies to a follow-up message.
In most cases, the requirement is represented by a single requirement token, 
but the object form MAY be used when additional parameters are required.</t>

<figure><artwork><![CDATA[
%iid.requirement% : %obj% {
   !requirement: %#r% - Requirement token
}
]]></artwork></figure>

</section>
<section anchor="identity-kind-iididkind"><name>Identity kind (%iid.idkind%)</name>

<t>Represents the kind of the internet identity, such as a person or a web crawler. 
The possible values are defined in a later section.</t>

<figure><artwork><![CDATA[
%iid.idkind% : %#d%
]]></artwork></figure>

</section>
<section anchor="image-iidimage"><name>Image (%iid.image%)</name>

<t>Represents a bitmap or vector graphics. Usually an URL is sufficient,
but in object form, more properties can be present.</t>

<figure><artwork><![CDATA[
%iid.image% : %obj% {
   !url: %str% - URL of image
   name: %str% - Name of the image
   aspect: %num% - Aspect ratio of image
   width: %nat% - Image width in pixels
   height: %nat% - Image height in pixels
   mime: %ascii% - MIME content type (RFC2045)
   data: %bin% - Image binary data
}
]]></artwork></figure>
<t><xref target="RFC2045"/></t>

</section>
</section>
<section anchor="tokens"><name>Tokens</name>

<t>The protocol defines some tokens for basic functionality. (<spanx style="verb">#a...</spanx>, <spanx style="verb">#e...</spanx>)
This document describes tokens in the iid. namespace. Other namespaces
MAY also be used, those can be defined in protocol extensions,
or by the identity servers themselves.</t>

<section anchor="error-tokens"><name>Error tokens</name>

<t><list style="symbols">
  <t><spanx style="verb">#eiid.json</spanx>: JSON syntax error in incoming message</t>
  <t><spanx style="verb">#eiid.time</spanx>: Message timestamp drifts significantly (too far in past or future)</t>
  <t><spanx style="verb">#eiid.repeat</spanx>: Repeat the request while fulfilling the specified requirements</t>
  <t><spanx style="verb">#eiid.sign</spanx>: The digital signature is invalid (revoked, expired, incorrect, etc...)</t>
  <t><spanx style="verb">#eiid.network</spanx>: Network error in the underlying layers</t>
  <t><spanx style="verb">#eiid.permission</spanx>: Insufficient permissions to perform the action</t>
  <t><spanx style="verb">#eiid.noverify</spanx>: Cannot verify the validity of the request</t>
  <t><spanx style="verb">#eiid.incorrect</spanx>: Action is refused becasue of incorrect data (e.g., password)</t>
  <t><spanx style="verb">{ error:#eiid.refuse, reason:%any% }</spanx>: The requested action was refused with a reason</t>
  <t><spanx style="verb">{ error:#eiid.size, limit:%nat% }</spanx>: Message size exceeds the permitted limit</t>
  <t><spanx style="verb">{ error:#eiid.missing, field:%str% }</spanx>: A required field is missing</t>
  <t><spanx style="verb">{ error:#eiid.unknown, field:%str%, value:%any% }</spanx>: An unknown or unsupported field value was encountered</t>
  <t><spanx style="verb">{ error:#eiid.later, after:%stamp% }</spanx>: Temporary rejection. The request may be repeated later</t>
  <t><spanx style="verb">{ error:#eiid.redirect, url:%str% }</spanx>: Redirect the user's browser to the specified URL</t>
</list></t>

</section>
<section anchor="action-method-tokens"><name>Action (method) tokens</name>

<t><list style="symbols">
  <t><spanx style="verb">#miid.login</spanx>: Request or confirm authentication (sign-in) to a system</t>
  <t><spanx style="verb">#miid.data</spanx>: Retrieve attributes and data associated with the identity</t>
  <t><spanx style="verb">#miid.setdata</spanx>: Change attributes or data associated with the identity</t>
  <t><spanx style="verb">#miid.consent</spanx>: Request to grant permission for a specific operation (e.g., cookie usage)</t>
  <t><spanx style="verb">#miid.message</spanx>: Transmit an instant message</t>
  <t><spanx style="verb">#miid.sign</spanx>: Request a digital signature on a document or data payload</t>
  <t><spanx style="verb">#miid.testify</spanx>: Attest to or verify the validity of a specific data point or state</t>
  <t><spanx style="verb">#miid.revoke</spanx>: Revoke a previously granted consent or permission to store data</t>
  <t><spanx style="verb">#miid.key</spanx>: Retrieve the public cryptographic keys of the identity</t>
</list></t>

</section>
<section anchor="key-format-tokens"><name>Key format tokens</name>

<t>A single-word identifier usually denotes a key format family. 
More specific formats are identified by 
dot-separated suffixes (e.g., <spanx style="verb">#kiid.rsa.2048</spanx>).</t>

<t>If the key format is composed of multiple components, 
the components are separated by dashes 
(e.g., <spanx style="verb">#kiid.der-ecdsa.p256</spanx>).</t>

<t><list style="symbols">
  <t><spanx style="verb">#kiid.der</spanx>: <xref target="RFC5958"/></t>
  <t><spanx style="verb">#kiid.pem</spanx>: <xref target="RFC7468"/></t>
  <t><spanx style="verb">#kiid.rsa</spanx>: <xref target="RFC8017"/></t>
  <t><spanx style="verb">#kiid.ecdsa</spanx>: <xref target="FIPS186-5"/></t>
  <t><spanx style="verb">#kiid.ed25519</spanx>: <xref target="RFC8032"/></t>
  <t><spanx style="verb">#kiid.rsa.2048</spanx>: 2048 bit RSA key</t>
  <t><spanx style="verb">#kiid.rsa.3072</spanx>: 3072 bit RSA key</t>
  <t><spanx style="verb">#kiid.rsa.4096</spanx>: 4096 bit RSA key</t>
  <t><spanx style="verb">#kiid.der-ecdsa.p256</spanx>: ecdsa p-256 curve key in DER format</t>
</list></t>

</section>
<section anchor="algorithm-tokens"><name>Algorithm tokens</name>

<t>Hash algorithms and checksums.</t>

<t>A single-word identifier usually denotes an algorithm family. 
More specific algorithms are identified by 
dot-separated suffixes (e.g., <spanx style="verb">#aiid.sha.256</spanx>).</t>

<t>If an algorithm is composed of multiple components, 
the components are separated by dashes 
(e.g., <spanx style="verb">#aiid.ecdsa.p256-sha.256</spanx>).</t>

<t><list style="symbols">
  <t><spanx style="verb">#aiid.size</spanx>: Data size in bytes</t>
  <t><spanx style="verb">#aiid.crc</spanx>: <xref target="ISO13239"/></t>
  <t><spanx style="verb">#aiid.md5</spanx>: <xref target="RFC1321"/></t>
  <t><spanx style="verb">#aiid.sha</spanx>: <xref target="FIPS180-4"/></t>
  <t><spanx style="verb">#aiid.sha3</spanx>: <xref target="FIPS202"/></t>
  <t><spanx style="verb">#aiid.blake2</spanx>: <xref target="RFC7693"/></t>
  <t><spanx style="verb">#aiid.crc.32</spanx>: CRC-32</t>
  <t><spanx style="verb">#aiid.sha.256</spanx>: SHA-256</t>
  <t><spanx style="verb">#aiid.sha.384</spanx>: SHA-384</t>
  <t><spanx style="verb">#aiid.sha.512</spanx>: SHA-512</t>
  <t><spanx style="verb">#aiid.sha3.256</spanx>: SHA3-256</t>
  <t><spanx style="verb">#aiid.sha3.512</spanx>: SHA3-512</t>
</list></t>

<t>Encryption</t>

<t><list style="symbols">
  <t><spanx style="verb">#aiid.rsa</spanx>:</t>
  <t><spanx style="verb">#aiid.oaep</spanx>: <xref target="RFC8017"/></t>
  <t><spanx style="verb">#aiid.aes</spanx>: <xref target="FIPS197"/></t>
  <t><spanx style="verb">#aiid.gcm</spanx>: <xref target="SP800-38D"/></t>
  <t><spanx style="verb">#aiid.oaep.256-gcm.256</spanx> : RSA-OAEP:SHA-256:MGF1(SHA-256) 
with AES GCM 256 bit</t>
</list></t>

<t>Digital signature</t>

<t><list style="symbols">
  <t><spanx style="verb">#aiid.ecdsa</spanx>: <xref target="FIPS186-5"/></t>
  <t><spanx style="verb">#aiid.ed25519</spanx>: <xref target="RFC8032"/></t>
  <t><spanx style="verb">#aiid.rsa.pkcs1</spanx>: <xref target="RFC8017"/></t>
  <t><spanx style="verb">#aiid.rsa.pss</spanx>: <xref target="RFC8017"/></t>
  <t><spanx style="verb">#aiid.ecdsa.p256-sha.256</spanx>: ecdsa p-256 with SHA-256</t>
</list></t>

</section>
<section anchor="data-tokens"><name>Data tokens</name>

<t><list style="symbols">
  <t><spanx style="verb">#diid.name</spanx>: Name</t>
  <t><spanx style="verb">#diid.fullname</spanx>: Full name</t>
  <t><spanx style="verb">#diid.givenname</spanx>: Given name</t>
  <t><spanx style="verb">#diid.familyname</spanx>: Family name</t>
  <t><spanx style="verb">#diid.nickname</spanx>: Nickname</t>
  <t><spanx style="verb">#diid.birthdate</spanx>: Birth date: <spanx style="verb">%date%</spanx></t>
  <t><spanx style="verb">#diid.birthplace</spanx>: Birth place</t>
  <t><spanx style="verb">#diid.age</spanx>: Age: <spanx style="verb">%nat%</spanx></t>
  <t><spanx style="verb">#diid.adult</spanx>: Indicates whether the identity is of an adult: <spanx style="verb">%bool%</spanx></t>
  <t><spanx style="verb">#diid.language</spanx>: Language: <spanx style="verb">{%lang%}</spanx></t>
  <t><spanx style="verb">#diid.kind</spanx>: Identity kind: <spanx style="verb">%iid.idkind%</spanx></t>
  <t><spanx style="verb">#diid.address</spanx>: Address: <spanx style="verb">{%str% | %obj%}</spanx></t>
  <t><spanx style="verb">#diid.postaddress</spanx>: Postal address: <spanx style="verb">{%str% | %obj%}</spanx></t>
  <t><spanx style="verb">#diid.country</spanx>: Country: <spanx style="verb">%country%</spanx></t>
  <t><spanx style="verb">#diid.state</spanx>: State or province</t>
  <t><spanx style="verb">#diid.city</spanx>: City</t>
  <t><spanx style="verb">#diid.district</spanx>: District</t>
  <t><spanx style="verb">#diid.zip</spanx>: Postal code</t>
  <t><spanx style="verb">#diid.street</spanx>: Street</t>
  <t><spanx style="verb">#diid.house</spanx>: House number</t>
  <t><spanx style="verb">#diid.floor</spanx>: Floor</t>
  <t><spanx style="verb">#diid.door</spanx>: Door number</t>
  <t><spanx style="verb">#diid.email</spanx>: Email address</t>
  <t><spanx style="verb">#diid.phone</spanx>: Phone number: <spanx style="verb">{%phone%}</spanx></t>
  <t><spanx style="verb">#diid.website</spanx>: Website URL</t>
  <t><spanx style="verb">#diid.taxid</spanx>: Tax Identifier</t>
  <t><spanx style="verb">#diid.personalid</spanx>: Personal identifier</t>
  <t><spanx style="verb">#diid.companyid</spanx>: Company identifier</t>
  <t><spanx style="verb">#diid.passport</spanx>: Passport number</t>
  <t><spanx style="verb">#diid.company</spanx>: Employer: <spanx style="verb">{%iid%}</spanx></t>
  <t><spanx style="verb">#diid.department</spanx>: Department</t>
  <t><spanx style="verb">#diid.position</spanx>: Job title</t>
  <t><spanx style="verb">#diid.avatar</spanx>: Avatar image: <spanx style="verb">{%iid.image%}</spanx></t>
</list></t>

<t>Special data tokens</t>

<t><list style="symbols">
  <t><spanx style="verb">#diid.attester</spanx>: Identities that can attest to this identity's data: <spanx style="verb">{%iid%}</spanx></t>
  <t><spanx style="verb">#diid.trusted</spanx>: Identities trusted by this identity: <spanx style="verb">{%iid%}</spanx></t>
  <t><spanx style="verb">#diid.until</spanx>: Latest time until which the shared data can be used: <spanx style="verb">%stamp%</spanx></t>
</list></t>

</section>
<section anchor="value-tokens"><name>Value tokens</name>

<t>The following sections define some possible data value tokens</t>

<section anchor="identity-kinds"><name>Identity kinds</name>

<t><list style="symbols">
  <t><spanx style="verb">#viid.person</spanx>: Natural person</t>
  <t><spanx style="verb">#viid.firm</spanx>: Organization or company</t>
  <t><spanx style="verb">#viid.site</spanx>: Website</t>
  <t><spanx style="verb">#viid.crawler</spanx>: Web crawler</t>
  <t><spanx style="verb">#viid.aiagent</spanx>: AI agent</t>
</list></t>

</section>
<section anchor="operations-for-consent"><name>Operations for consent:</name>

<t><list style="symbols">
  <t><spanx style="verb">#viid.newsletter</spanx>: Newsletter</t>
  <t><spanx style="verb">#viid.cookie.necessary</spanx>: Strictly necessary cookies</t>
  <t><spanx style="verb">#viid.cookie.session</spanx>: Session cookies</t>
  <t><spanx style="verb">#viid.cookie.marketing</spanx>: Marketing cookies</t>
  <t><spanx style="verb">#viid.cookie.analytics</spanx>: Analytics cookies</t>
  <t><spanx style="verb">#viid.cookie.third</spanx>: Third-party cookies</t>
</list></t>

</section>
</section>
<section anchor="requirement-tokens"><name>Requirement tokens</name>

<t><list style="symbols">
  <t><spanx style="verb">#riid.at</spanx>: The follow-up message MUST contain the at field</t>
  <t><spanx style="verb">#riid.from</spanx>: The follow-up message MUST contain the from field</t>
  <t><spanx style="verb">#riid.to</spanx>: The follow-up message MUST contain the to field</t>
  <t><spanx style="verb">#riid.mid</spanx>: The follow-up message MUST contain the message identifier</t>
  <t><spanx style="verb">#riid.sign</spanx>: The follow-up message MUST be digitally signed</t>
  <t><spanx style="verb">#riid.encrypted</spanx>: The follow-up message MUST be encrypted</t>
  <t><spanx style="verb">#riid.echo</spanx>: The entire request MUST be repeated in response's ref field</t>
  <t><spanx style="verb">{ requirement: #riid.key, key: {%iid.key%} }</spanx>: The follow-up message MUST use 
one of the specified keys.</t>
  <t><spanx style="verb">{ requirement: #riid.algo, key: {%iid.algo%} }</spanx>: The follow-up message MUST use 
one the specified algorithm.</t>
  <t><spanx style="verb">{ requirement: #riid.url, url: %str% }</spanx>: Following requests MUST use the specified URL</t>
</list></t>

</section>
</section>
<section anchor="examples"><name>Examples</name>

<t>This section presents examples of IID communication between identity servers 
in various scenarios. These examples are intended to demonstrate the 
capabilities and flexibility of the protocol. They are not normative specifications
of the described cases, which are specified in separate documents.</t>

<section anchor="web-login"><name>Web login</name>

<t>John Doe (<spanx style="verb">john@doe.org</spanx>) visits a new website: <spanx style="verb">https://foo.org</spanx>. The website 
obtains his IID, for example from an HTTP header <xref target="RFC9110"/>, a cookie,
or by prompting the user.</t>

<t>The <spanx style="verb">foo.org</spanx> server determines the identity server responsible for <spanx style="verb">john@doe.org</spanx>
and sends the following request to the designated endpoint:</t>

<figure><artwork><![CDATA[
foo.org >>> doe.org { 
   "from": "site@foo.org",
   "to": "john@doe.org",
   "action": "#miid.login",
   "params": {
      "returnurl":"https://foo.org/login"
   }
}
]]></artwork></figure>

<t>The <spanx style="verb">doe.org</spanx> identity server records that <spanx style="verb">foo.org</spanx> has requested 
a login. It generates a nonce value and responds that it wishes to 
identify the browser:</t>

<figure><artwork><![CDATA[
foo.org <<< doe.org {
   "error": { 
      "error": "#eiid.redirect",
      "url":"https://doe.org/login",
      "nonce": "12345678"
   }
}
]]></artwork></figure>

<t>The foo.org server records the nonce and 
redirects John's browser to <spanx style="verb">https://doe.org/login</spanx>.</t>

<t>If John is not already signed in to his identity server, he is prompted 
to authenticate. After that, the settings of his doe.org account determine 
whether any additional confirmation is required.</t>

<t>If not, the process continues immediately. The doe.org server redirects 
the browser back to <spanx style="verb">https://foo.org/login</spanx> which causes the following request to be sent:</t>

<figure><artwork><![CDATA[
foo.org >>> doe.org { 
   "from": "site@foo.org",
   "to": "john@doe.org",
   "action": "#miid.login",
   "params": {
      "nonce": "12345678"
   }
}
]]></artwork></figure>

<t>The <spanx style="verb">doe.org</spanx> server has already recorded that the login with the specified nonce 
has been authorized. It returns a positive response:</t>

<figure><artwork><![CDATA[
foo.org <<< doe.org {
   "value": true
}
]]></artwork></figure>

<t>At this point, the login is complete. The <spanx style="verb">foo.org</spanx> server signs John in and 
can present his personalized view. It only needs to store his IID;
any additional information can be retrieved from doe.org whenever needed.</t>

<t>Subsequent visits are even simpler. Since <spanx style="verb">foo.org</spanx> can store John's IID in
a cookie, it can contact <spanx style="verb">doe.org</spanx> without asking John his IID. While John
is still signed in to <spanx style="verb">doe.org</spanx>, and his account settings permit it,
the identity server can immediately return a positive response
without requiring further interaction.</t>

<t>Note: the above example assumes a Secure HTTPS transport. When a less secure
transport is used, or additional security is needed, the protocol
MAY require digitally signed and/or encrypted messages. 
See the <em>Security considerations</em> section for details.</t>

</section>
<section anchor="fetch-personal-data"><name>Fetch personal data</name>

<t>John (<spanx style="verb">john@doe.org</spanx>) visits a webshop. The webshop obtains his IID in the same way as
in the previous example. Since it needs to know where to ship John's order, it contacts
his identity server: <spanx style="verb">doe.org</spanx>. As a postal address is personal information, it signs
the request:</t>

<figure><artwork><![CDATA[
webshop.com >>> doe.org {
   "at": 1783473539,
   "from": "site@webshop.com",
   "to": "john@doe.org",
   "action": "#miid.data",
   "params": [
      "#diid.fullname",
      "#diid.postaddress"
   ],
   "sign": {
      "key":"req2026",
      "sign":"#6..."
   }
}
]]></artwork></figure>

<t>At this point, the doe.org identity server MAY retrieve the <spanx style="verb">req2026</spanx> key from 
<spanx style="verb">webshop.com</spanx> and verify the signature (see later). Depending on the settings of
<spanx style="verb">john@doe.org</spanx> it MAY authorize the data sharing immediately or 
redirect the browser to a confirmation page hosted by <spanx style="verb">doe.org</spanx>.</t>

<t>Assume that the requested data is authorized for sharing with <spanx style="verb">site@webshop.com</spanx>.
The identity server responds with the requested values and includes an until 
timestamp, after which the <spanx style="verb">site@webshop.com</spanx> SHOULD no longer retain
the shared data.</t>

<figure><artwork><![CDATA[
webshop.com <<< doe.org {
   "value": {
      "#diid.fullname":"John Doe",
      "#diid.postaddress": {
         "#diid.country":"US",
         "#diid.state":"New York",
         "#diid.zip":"10004",
         "#diid.street":"Liberty",
         "#diid.house":1
      },
      "#diid.until":1783559940
   }
}
]]></artwork></figure>

<t>The webshop receives John's postal address together with permission to retain 
it for one day. This is sufficient to ship the order.</t>

</section>
<section anchor="consent"><name>Consent</name>

<t>The webshop requests John's consent to send newsletters, and to store 
marketing cookies in his browser. Since it wishes to retain proof of
the consent (for example, for GDPR compliance), it requires the
response to include both a digital signature and an echo of the original
request.</t>

<figure><artwork><![CDATA[
webshop.com >>> doe.org {
   "at": 1783473639,
   "from": "site@webshop.com",
   "to": "john@doe.org",
   "action": "#miid.consent",
   "params": [
      "#viid.newsletter",
      "#viid.cookie.marketing"
   ],
   "requirement": [
      "#riid.sign",
      "#riid.echo"
   ]
}
]]></artwork></figure>

<t>Assume that the <spanx style="verb">john@doe.org</spanx> account is configured to allow
newsletters but not marketing cookies:</t>

<figure><artwork><![CDATA[
webshop.com <<< doe.org {
   "at": 1783473640,
   "value": {
      "#viid.newsletter":true,
      "#viid.cookie.marketing":false
   },
   "ref": {
      "at":1783473639,
      ...
   },
   "sign":{
       "key":"data2026",
       "sign":"#6..."
   }
}
]]></artwork></figure>

</section>
<section anchor="revoking-consent"><name>Revoking consent</name>

<t>John wishes to unsubscribe from the newsletter and orders the webshop to forget his phone number:</t>

<figure><artwork><![CDATA[
doe.org >>> webshop.com {
   "at": 1783473739,
   "from": "john@doe.org",
   "to": "site@webshop.com",
   "action": "#miid.revoke",
   "params": ["#viid.newsletter","#viid.phone"],
   "sign":{
      "key":"data2026",
      "sign":"#6..."
   }
}
]]></artwork></figure>

<t>The webshop verifies John's signature, unsubscribes him from the newsletter,
and deletes the stored phone number.</t>

<figure><artwork><![CDATA[
doe.org <<< webshop.com {
   "value": true
}
]]></artwork></figure>

</section>
<section anchor="key-fetch-and-attest"><name>Key fetch and attest</name>

<t>The <spanx style="verb">foo.org</spanx> website needs a verifiable confirmation that it
has the correct copy of John's public key. It sends a request 
to an attesting identity server:</t>

<figure><artwork><![CDATA[
foo.org >>> bar.org {
   "from": "site@foo.org",
   "to": "clerk@bar.org",
   "action": "#miid.testify",
   "params": {
      "iid": "john@doe.org",
      "key": "data2026",
      "until": 1798761600,
      "pub": "#xabcd..."
   },
   "requirement": [
      "#riid.sign",
      "#riid.at",
      "#riid.echo"
   ]
}
]]></artwork></figure>

<t>The <spanx style="verb">bar.org</spanx> server retrieves the key from <spanx style="verb">doe.org</spanx>. It requires 
the response to be signed using the same key:</t>

<figure><artwork><![CDATA[
bar.org >>> doe.org {
   "from": "clerk@bar.org",
   "to": "john@doe.org",
   "action": "#miid.key",
   "params": "data2026",
   "requirement": [
      {
         "requirement":"#riid.key",
         "key":"data2026"
      }
   ]
}
]]></artwork></figure>

<t>The <spanx style="verb">doe.org</spanx> identity server returns the key details and signs the response:</t>

<figure><artwork><![CDATA[
bar.org <<< doe.org {
   "at": 1783473841,
   "from":"john@doe.org",
   "value": {
      "name":"data2026",
      "algo":"#aiid.ed25519",
      "pub":"#xabcd...",
      "from": 1767225600,
      "until": 1798761600
   },
   "sign":{
      "key":"data2026",
      "sign":"#6..."
   }
}
]]></artwork></figure>

<t>The bar.org server verifies the signature. If it is valid, it knows that
the response was signed by the holder of the private key corresponding
to <spanx style="verb">data2026</spanx>. If the public key matches the
one supplied by <spanx style="verb">foo.org</spanx>, it returns a positive response:</t>

<figure><artwork><![CDATA[
foo.org <<< bar.org {
   "at": 1783473842,
   "value": true,
   "ref": {
      "from":"site@foo.org",
      ...
   },
   "sign":{
       "key":"att2026",
       "sign":"#6..."
   }
}
]]></artwork></figure>

<t>Based on the signed confirmation from <spanx style="verb">bar.org</spanx>, <spanx style="verb">foo.org</spanx> can trust that it has
the correct copy of John's public key. It MAY update the last verification timestamp
associated with John's key.</t>

</section>
<section anchor="instant-message"><name>Instant message</name>

<t>John wishes to send an instant message to a company:</t>

<figure><artwork><![CDATA[
doe.org >>> firm.org {
   "from": "john@doe.org",
   "to": "info@firm.org",
   "action": "#miid.message",
   "params": {
      "data": "Please, inform me of your current open positions.",
      "mime": "text/plain"
   }
}
]]></artwork></figure>

<t>The company accepts the instant message:</t>

<figure><artwork><![CDATA[
firm.org >>> doe.org {
   "value": true
}
]]></artwork></figure>

</section>
</section>
</section>
<section anchor="implementation"><name>Implementation</name>

<t>This protocol does not define implementation details, 
but it provides some suggestions for implementing identity servers.</t>

<section anchor="dns-resolution"><name>DNS resolution</name>

<t>The IP address of an identity server SHOULD be obtained through DNS resolution of 
the domain part of the IID. For example, the server of <spanx style="verb">john@doe.org</spanx>
will have the IP resolved from <spanx style="verb">doe.org</spanx> <xref target="RFC1034"/>.</t>

<t>If the domain part of an IID contains characters which the DNS system cannot handle,
the resolution SHOULD be made in the IDNA format <xref target="RFC5891"/>.</t>

</section>
<section anchor="well-known"><name>.well-known</name>

<t>The HTTPS server of the domain SHOULD have a <spanx style="verb">/.well-known/iid</spanx> endpoint <xref target="RFC8615"/>.
That endpoint MAY process IID requests directly or redirect clients to the actual 
endpoint by returning a response such as:</t>

<figure><artwork><![CDATA[
{
   "error":"#eiid.repeat",
   "requirement":{ 
      "requirement":"#riid.url", 
      "url":"https://foo.org/iid" 
   }
}
]]></artwork></figure>

</section>
</section>
<section anchor="security-considerations"><name>Security considerations</name>

<t>In general, this protocol assumes that IID requests are transmitted over 
a secure, authenticated, and encrypted channel (such as HTTPS).</t>

<t>The following examples consider three communication environments:</t>

<t><list style="symbols">
  <t>SAFE: Communication takes place over a secure channel where the 
   endpoints are authenticated and messages cannot be intercepted or modified.</t>
  <t>KNOWN: The communicating parties have prior knowledge of each other's public keys.
   The communicating channel itself may be subject to interception or modification.</t>
  <t>INSECURE: The communication channel can be intercepted or modified,
   and the parties have no prior knowledge of each other's public keys.</t>
</list></t>

<t>The examples in the following sections demonstrate these conclusions:</t>

<t>A SAFE environment provides adequate security for IID operations.</t>

<t>In a KNOWN environment, secure communication can be achieved using additional
cryptographic techniques.</t>

<t>In an INSECURE environment, IID alone cannot guarantee secure communication.
However an INSECURE environment can potentially be upgraded to a KNOWN one
through a <em>Trust chain discovery</em> mechanism, described later in this document.</t>

<section anchor="altered-sender-identity"><name>Altered sender identity</name>

<t>In some scenarios, verifying the sender's IP address may be sufficient.</t>

<t>SAFE, KNOWN: If the sender's identity is important and uncertain, the receiver MAY
   require the request to be digitally signed. Successful signature verification
   authenticates the sender.</t>

<t>INSECURE: The sender's identity cannot be reliably authenticated.</t>

</section>
<section anchor="altered-recipient-identity"><name>Altered recipient identity</name>

<t>SAFE: The channel guarantees that the request is delivered without modification.</t>

<t>KNOWN: The receiver MAY require the request to include the recipient's identity
   and to be digitally signed by the sender. Successful signature verification 
   ensures that no data got changed during the transfer.</t>

<t>INSECURE: The recipient identity cannot be guaranteed, as it may be modified 
   during transmission.</t>

</section>
<section anchor="request-replay"><name>Request replay</name>

<t>The receiver MAY require requests to include a timestamp. It MAY also limit
processing to at most one request per second for the same sender and recipient,
responding with <spanx style="verb">#eiid.later</spanx> to subsequent duplicates. this prevents
identical requests from being processed repeatedly.</t>

<t>In many cases authenticating the sender is more important than
preventing the same response from being returned multiple times.</t>

<t>SAFE: Replay attacks by third parties are prevented because requests
   cannot be intercepted.</t>

<t>KNOWN: After the sender has been authenticated, replayed requests usually do
   not present a security risk. If the timestamp is included in the signed content,
   modified replays are detected during signature verification.</t>

<t>INSECURE: Requiring timestamp, sender and recipient of the requests
   allows identical replayed requests to be detected. However,
   if the attacker can modify the request (for example by changing the timestamp),
   it can no longer be distinguished from a newly generated request, 
   which may result in the unauthorized disclosure of information.</t>

</section>
<section anchor="response-replay"><name>Response replay</name>

<t>The sender processes only one response for each request. Any subsequent replayed responses are ignored.</t>

</section>
<section anchor="response-injection"><name>Response injection</name>

<t>SAFE: Third parties cannot inject forged responses into the communication channel.</t>

<t>KNOWN: The sender MAY require responses to be digitally signed. 
   Successful signature verification prevents processing forged injected responses
   from being accepted.</t>

<t>INSECURE: Third parties may be able to inject forged responses.</t>

</section>
<section anchor="key-compromise"><name>Key compromise</name>

<t>If a private key stored by an identity server is compromised, a third party can use it
to forge requests on behalf of the key's owner.</t>

<t>Systems that store public keys of identities are RECOMMENDED to maintain
a last-verification timestamp for each key. Public keys SHOULD be periodically
retrieved again from their owner's identity servers to detect revocation
or replacement following a key compromise.</t>

<t>SAFE: Even with a compromised key, third parties cannot give forged answers, because
   the requests are delivered to the legitimate identity server.</t>

<t>KNOWN, INSECURE: A compromised private key allows a third party to 
   impersonate the corresponding identity either as the senders or the receiver.</t>

</section>
<section anchor="man-in-the-middle-attack"><name>Man in the middle attack</name>

<t>If a third party gets control over the communication channel, for example
by changing the DNS resolution, it can cause security risks.</t>

<t>The transfer protocol can help the situation, for example, an HTTPS or TLS connection
does not allow that kind of interception, because the third party does not own
a certificate for the destination domain.</t>

<t>SAFE: A safe environment only allows authenticated endpoints.</t>

<t>KNOWN: If all the communication is digitally signed with public keys, third parties cannot
   alter messages or inject forged ones. However, they can intercept information unless
   all messages are encrypted.</t>

<t>INSECURE: The third party controlling the communication channel can 
   fully impersonate either communicating party.</t>

</section>
<section anchor="confidentiality"><name>Confidentiality</name>

<t>SAFE: The communication channel ensures that no third party can read the transmitted data.</t>

<t>KNOWN: If the transmitted data is sensitive, it is RECOMMENDED to encrypt it.</t>

<t>INSECURE: As the public keys cannot be exchanged securely, there is no way to ensure confidentiality.</t>

</section>
<section anchor="flooding-attacks"><name>Flooding attacks</name>

<t>Identity servers may become targets of various flooding attacks,
especially if they host a large number of identities. However, the structure of IID messages
allows several mitigation techniques.</t>

<t>An identity server MAY reject excessively large messages with <spanx style="verb">#eiid.size</spanx> without processing them.</t>

<t>Requests that do not identify the sender MAY also be rejected.</t>

<t>Requests from the same sender within a short time MAY be rejected or deferred by responding with #eiid.later.</t>

<t>Encrypted messages require more processing time. However they MAY also be queued per recipient or
deferred by responding with <spanx style="verb">#eiid.later</spanx>.</t>

</section>
</section>
<section anchor="trust-chain-discovery"><name>Trust chain discovery</name>

<t>If both communication parties have prior knowledge of one or more attester 
and trusted identities, and their trust networks overlap, an otherwise
INSECURE environment can be bootstrapped into a KNOWN one.</t>

<t>Assume two parties, <spanx style="verb">X</spanx> and <spanx style="verb">Y</spanx>.</t>

<t><spanx style="verb">X</spanx> maintains a set of its own trusted identities (for example, <spanx style="verb">T1</spanx>, <spanx style="verb">T2</spanx>, <spanx style="verb">T3</spanx>, ...). 
It can recursively expand this set by including the trusted identities of
each member of the list (for example <spanx style="verb">T11</spanx>, and <spanx style="verb">T12</spanx> are trusted by <spanx style="verb">T1</spanx>),</t>

<t>At the same time, <spanx style="verb">X</spanx> can recursively discover the attesters of <spanx style="verb">Y</spanx> 
(for example <spanx style="verb">A1</spanx>, <spanx style="verb">A2</spanx>, <spanx style="verb">A3</spanx>, ...), and the attesters of those identities 
(<spanx style="verb">A11</spanx>, <spanx style="verb">A12</spanx>, <spanx style="verb">A13</spanx>, ...).</t>

<t>If the two networks overlap, there exists an identity <spanx style="verb">S</spanx> that
is present in both the trusted and the attester network. A trust chain
can then be constructed from <spanx style="verb">X</spanx> to <spanx style="verb">Y</spanx> by ascending through trusted
identities to <spanx style="verb">S</spanx> and descending through attesters to <spanx style="verb">Y</spanx>.</t>

<t>For example:
   <spanx style="verb">X</spanx> -&gt; <spanx style="verb">T2</spanx> -&gt; <spanx style="verb">T23</spanx> -&gt; <spanx style="verb">S</spanx> -&gt; <spanx style="verb">A332</spanx> -&gt; <spanx style="verb">A33</spanx> -&gt; <spanx style="verb">A3</spanx> -&gt; <spanx style="verb">Y</spanx></t>

<t>Since <spanx style="verb">X</spanx> already trusts <spanx style="verb">T2</spanx>, it possesses a verified copy of <spanx style="verb">T2</spanx>'s public key. 
Using that key, <spanx style="verb">X</spanx> can securely obtain <spanx style="verb">T23</spanx>'s public key from <spanx style="verb">T2</spanx>.</t>

<t>Repeating this process allows <spanx style="verb">X</spanx> to obtain a correct copy of <spanx style="verb">S</spanx>'s public key.</t>

<t>Because <spanx style="verb">S</spanx> is an attester of <spanx style="verb">A332</spanx>, <spanx style="verb">X</spanx> can securely obtain <spanx style="verb">A332</spanx>'s public key from <spanx style="verb">S</spanx>.
The same process can be repeated down the attester chain until <spanx style="verb">X</spanx> obtains
an authenticated copy of <spanx style="verb">Y</spanx>'s public key.</t>

<t><spanx style="verb">Y</spanx> can perform the same procedure independently in the opposite direction.
After the discovery process completes, both parties possess verified
copies of each other's public keys and therefore operate in a KNOWN environment.</t>

<t>Unlike the traditional TLS model, this mechanism does not require 
globally trusted root certificate authorities. As long as
the trust networks of the two parties overlap, they can discover a
trust chain that enables secure communication.</t>

<t>As with most trust-chain-based systems, the security of this discovery 
process depends on the weakest link in the chain: if any intermediate 
identity's key is compromised, it can undermine the trust established 
through it. This risk can be reduced by periodically re-verifying the 
trusted keys.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

&RFC2119;
&RFC8174;
&RFC8259;
<reference anchor="UAX15" target="https://www.unicode.org/reports/tr15/">
  <front>
    <title>Unicode Standard Annex #15: Unicode Normalization Forms</title>
    <author >
      <organization>The Unicode Consortium</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
&RFC8785;
&RFC4648;
<reference anchor="FIPS180-4" target="https://doi.org/10.6028/NIST.FIPS.180-4">
  <front>
    <title>Secure Hash Standard (SHS)</title>
    <author >
      <organization>National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
</reference>
<reference anchor="FIPS202" target="https://doi.org/10.6028/NIST.FIPS.202">
  <front>
    <title>SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions</title>
    <author >
      <organization>National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
</reference>
&RFC8032;
&RFC7693;
<reference anchor="FIPS186-5" 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 (NIST)</organization>
    </author>
    <date year="2023" month="February"/>
  </front>
</reference>
&RFC8017;
&RFC1321;
<reference anchor="ISO13239" target="https://www.iso.org/standard/37010.html">
  <front>
    <title>Information technology - Telecommunications and information exchange between systems - High-level data link control (HDLC) procedures</title>
    <author >
      <organization>International Organization for Standardization</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="ISO3166" target="https://www.iso.org/standard/72482.html">
  <front>
    <title>Codes for the representation of names of countries and their subdivisions - Part 1: Country codes</title>
    <author >
      <organization>International Organization for Standardization</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="SP800-38D" target="https://csrc.nist.gov/pubs/sp/800/38/d/final">
  <front>
    <title>Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC</title>
    <author >
      <organization>National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2007" month="November"/>
  </front>
</reference>
<reference anchor="FIPS197" target="https://doi.org/10.6028/NIST.FIPS.197-upd1">
  <front>
    <title>Advanced Encryption Standard (AES)</title>
    <author >
      <organization>National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2023" month="May"/>
  </front>
</reference>
&RFC5958;
&RFC7468;


    </references>

    <references title='Informative References' anchor="sec-informative-references">

&RFC1034;
&RFC5891;
&RFC9110;
&RFC8615;
&RFC2045;
&RFC5646;
&RFC9112;
&RFC9293;


    </references>

</references>


<?line 1289?>



  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA819e3Pb2JHv//gUiFyuSFmS1tu2NpUdRZLHSsaPa9lJZrOp
IkgciYhAgAFASYyv8132s+wXu/3r7vMCKY9nK6m6UzUWSRycR59+d58+w+Ew
6YquNCfpZdWZpjJdepmbin5bpe+buqundZluX16e7yTZZNKYO2p4ee4eJXk9
rbI5vZ432XU3vMuaKrtZDYsiHy60zXB3N5lmnbmpm9VJWlTXddIuJ/OibYu6
+rhaGPyYm4WpMHBSLJqTtGuWbbe/u/tydz/JGpOdpN+byjRZmdzXze1NUy8X
mLF7K71yPSbJrVlRq/wkTdI0HaaFrke+Zctuhu80IzTm3+ambbMbI1/a4qbK
umVjkgRt6+aEf8c/9F9RtSfpf47+IOvUH6+XZSlQ+MP//Dc/SP+zLrv/+e9K
G9TNTVYVf+cho3nrczPPipJgWBfH9P93N/g6mtbzJKnqZk6v3RnM4sOrs/29
vZf68cXe80P7cf+If/10+qe9I55v2mXNjelO0lnXLdqTZ8/u7+9Hy6qY1rkZ
0XSeNWZRN137rGv2jp7JG4IHW5+kVXrVZVWeNXl6WlXmIX1CPaf22VtMq9QV
pa/oW7vFnQQgk3WfpB9nxr13VlctDVss5zrx5y+OdA2Hx4cv8PHV5furvRe7
w8PN6yD48Pz3dkfHu/svnr29vPo4wjsjfilayZWZ0j6mr7N25lezffX6aufR
yb7lFWUlbVJL3Sw7k9bX7uU2pb/pRzOdVXVZ0zZvY/gd7iAnFD9J93f3joa7
L3Qd+7v7P3cV9Eq8htenwwM3gZP0vWnmy45nOfxt1ppclod5XTx0hFXZpDTD
d8tusezSV8tqipaPb84/b73Yzd2Dfd3N58cvD/xuHg8fwcqv7Sa9FEHivLgp
OprplSXQYE/Pr/6le7p/MORt4TXuPdc17h3s7+Hj5dU7+njw8nHCK9qal9nq
mM8Onu/SkmfdvIyWeEnMkemdiKrzMxrS9EpD/GAOCubHMusiaG8eprOsujHp
xHT3xlRpu2o7M2/p7dfFzWxYmjtTYkVZWhbVbTqtq64Bc399/sPZTkrcempy
gurjuCISwgLzXcDTUpqGA6j+JoA52Ds+/hlweb5/+GJ/HS5nxDtaHoSYd0qs
i6ZJ3FPGpr0E823xYVovaVWFEfBQ46JJSdjkxV3RMtSG6fus6dK9E2JFaLpK
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

-->

</rfc>

