<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="exp" docName="draft-richer-vectors-of-trust-03"
     ipr="trust200902">
  <front>
    <title abbrev="vectors-of-trust">Vectors of Trust</title>

    <author fullname="Justin Richer" initials="J." role="editor"
            surname="Richer">
      <organization>Bespoke Engineering</organization>

      <address>
        <email>ietf@justin.richer.org</email>
      </address>
    </author>

    <author fullname="Leif Johansson" initials="L." surname="Johansson">
      <organization>Swedish University Network</organization>

      <address>
        <postal>
          <street>Thulegatan 11</street>

          <city>Stockholm</city>

          <region/>

          <code/>

          <country>Sweden</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>leifj@sunet.se</email>

        <uri>http://www.sunet.se</uri>
      </address>
    </author>

    <date day="21" month="July" year="2016"/>

    <abstract>
      <t>This document defines a mechanism for describing and signaling
      several aspects that are used to calculate trust placed in a digital
      identity transaction.</t>
    </abstract>

    <note title="Requirements Language">
      <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 <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section anchor="Introduction" title="Introduction">
      <t>This document defines a mechanism for measuring and signaling several
      aspects of digital identity and authentication transactions that are
      used to determine a level of trust in that transaction. In the past,
      there have been two extremes of communicating authentication transaction
      information.</t>

      <t>At one extreme, all attributes can be communicated with full
      provenance and associated trust markings. This approach seeks to create
      a fully-distributed attribute system to support functions such as
      attribute based access control (ABAC). These attributes can be used to
      describe the end user, the identity provider, the relying party, or even
      the transaction itself. While the information that can be expressed in
      this model is incredibly detailed and robust, the complexity of such a
      system is often prohibitive to realize, especially across security
      domains. In particular, a large burden is placed on relying parties
      needing to process the sea of disparate attributes when making a
      security decision.</t>

      <t>At the other extreme there are systems that collapse all of the
      attributes and aspects into a single scalar value that communicates, in
      sum, how much a transaction can be trusted. The NIST special publication
      <xref target="SP-800-63-2">800-63</xref> version 2 defines a linear
      scale Level of Assurance (LoA) measure that combines multiple attributes
      about an identity transaction into such a single measure. While this
      definition was originally narrowly targeted for a specific set of
      government use cases, the LoA scale appeared to be applicable with a
      wide variety of authentication scenarios in different domains. This has
      led to a proliferation of incompatible interpretations of the same scale
      in different contexts, preventing interoperability between each LoA
      definition in spite of their common measurement. LoA is artificially
      limited due to the original goal of creating a single linear scale.
      Since identity proofing strength increases linearly along with
      credential strength in the LoA scale, this scale is too limited for
      describing many valid and useful forms of an identity transaction that
      do not fit the government's original model. For example, an anonymously
      assigned hardware token can be used in cases where the real world
      identity of the subject cannot be known for privacy reasons, but the
      credential itself can be highly trusted. This is in contrast with a
      government employee accessing a government system, where the identity of
      the individual would need to be highly proofed and strongly credentialed
      at the same time.</t>

      <t>The Vectors of Trust (VoT) effort seeks to find a balance between
      these two extremes by creating a data model that combines attributes of
      the user and aspects of the authentication context into several values
      that can be communicated separately but in parallel with each other.
      This approach is both coarser grained than the distributed attributes
      model and finer grained than the single scalar model, with the hope that
      it is a viable balance of expressibility and processability.
      Importantly, these three levels of granularity can be mapped to each
      other. The information of several attributes can be folded into a vector
      component, while the vector itself can be folded into an assurance
      category. As such, the vectors of trust seeks to complement, not
      replace, these other identity and trust mechanisms in the larger
      identity ecosystem while providing a single value for RPs to
      process.</t>

      <section title="Terminology">
        <t><list style="hanging">
            <t hangText="Identity Provider (IdP)">A system that manages
            identity information and is able to assert this information across
            the network through an identity API.</t>

            <t hangText="Identity Subject">The person (user) engaging in the
            identity transaction, being identified by the identity provider
            and identified to the relying party.</t>

            <t hangText="Primary Credential">The means used by the identity
            subject to authenticate to the identity provider.</t>

            <t hangText="Federated Credential">The assertion presented by the
            IdP to the RP across the network to authenticate the user.</t>

            <t hangText="Relying Party (RP)">A system that consumes identity
            information from an IdP for the purposes of authenticating the
            user.</t>

            <t hangText="Trust Framework">A document containing business rules
            and legal clauses that defines how different parties in an
            identity transaction may act.</t>

            <t hangText="Trustmark">A verifiable attestation that a party has
            proved to follow the constraints of a trust framework.</t>

            <t hangText="Trustmark Provider">A system that issues and provides
            verification for trustmarks.</t>

            <t hangText="Vector">A multi-part data structure, used here for
            conveying information about an authentication transaction.</t>

            <t hangText="Vector Component">One of several constituent parts
            that make up a vector.</t>
          </list></t>
      </section>

      <section anchor="Model" title="An Identity Model">
        <t>This document assumes the following model for identity based on
        identity federation technologies:</t>

        <t>The identity subject (also known as the user) is associated with an
        identity provider which acts as a trusted third party on behalf of the
        user with regard to a relying party by making identity assertions
        about the user to the relying party.</t>

        <t>The real-world person represented by the identity subject is in
        possession of a primary credential bound to the identity subject by
        the identity provider (or an agent thereof) in such a way that the
        binding between the credential and the real-world user is a
        representation of the identity proofing process performed by the
        identity provider (or an agent thereof) to verify the identity of the
        real-world person. This is all carried by an identity assertion across
        the network to the relying party during the authentication
        transaction.</t>
      </section>

      <section anchor="Architecture" title="Component Architecture">
        <t>The term Vectors of Trust is based on the mathematical construct of
        a vector, which is defined as an item composed of multiple independent
        values.</t>

        <t>An important goal for this work is to balance the need for
        simplicity (particularly on the part of the relying party) with the
        need for expressiveness. As such, this vector construct is designed to
        be composable and extensible.</t>

        <t>All components of the vector construct MUST be orthogonal such that
        no aspect of a component overlaps an aspect of another component, as
        much as is possible.</t>
      </section>
    </section>

    <section anchor="Components" title="Component Definitions">
      <t>This specification defines four orthogonal components: identity
      proofing, primary credential usage, primary credential management, and
      assertion presentation. These dimensions MUST be evaluated by the RP in
      the context of a trust framework and SHOULD be combined with other
      information when making a trust and authorization decision.</t>

      <t>This specification also defines values for each component to be used
      in the absence of a more specific trust framework in <xref
      target="default-components"/>. It is expected that trust frameworks will
      provide context, semantics, and mapping to legal statutes and business
      rules for each value in each component. Consequently, a particular
      vector value can only be compared with vectors defined in the same
      context. The RP MUST understand and take into account the trust
      framework context in which a vector is being expressed in order for it
      to be processed securely.</t>

      <t>Each component is identified by a demarcator consisting of a single
      uppercase ASCII letter in the range <spanx style="verb">[A-Z]</spanx>.
      The demarcator SHOULD reflect the category with which it is associated
      in a natural manner. Demarcators for components MUST be registered as
      described in <xref target="IANA"/>. It is anticipated that trust
      framework definitions will use this registry to define specialized
      components, though it is RECOMMENDED that trust frameworks re-use
      existing components wherever possible.</t>

      <t>The value for a given component within a vector of trust is defined
      by its demarcator character followed by a single digit or lowercase
      ASCII letter in the range <spanx style="verb">[0-9a-z]</spanx>.
      Categories which have a natural ordering SHOULD use digits, with <spanx
      style="verb">0</spanx> as the lowest value. Categories which do not have
      a natural ordering, or which can have an ambiguous ordering, SHOULD use
      letters. Categories MAY use both letter style and number style value
      indicators. For example, a category could define <spanx style="verb">0</spanx>
      as a special "empty" value while using letters such as <spanx
      style="verb">a</spanx>, <spanx style="verb">b</spanx>, <spanx
      style="verb">c</spanx> for normal values can to differentiate between
      these types of options.</t>

      <t>Regardless of the type of value indicator used, the values assigned
      to each component of a vector MUST NOT be assumed always to have
      inherent ordinal properties when compared to the same or other
      components in the vector space. In other words, <spanx style="verb">1</spanx>
      is different from <spanx style="verb">2</spanx>, but it is dangerous to
      assume that <spanx style="verb">2</spanx> is always better than <spanx
      style="verb">1</spanx> in a given transaction.</t>

      <section anchor="IdentityProofing" title="Identity Proofing">
        <t>The Identity Proofing dimension defines, overall, how strongly the
        set of identity attributes have been verified and vetted. In other
        words, this dimension describes how likely it is that a given digital
        identity transaction corresponds to a particular (real-world) identity
        subject.</t>

        <t>This dimension SHALL be represented by the <spanx style="verb">P</spanx>
        demarcator and a single-character level value, such as <spanx
        style="verb">P0</spanx>, <spanx style="verb">P1</spanx>, etc. Most
        definitions of identity proofing will have a natural ordering, as more
        or less stringent proofing can be applied to an individual. In such
        cases it is RECOMMENDED that a digit style value be used for this
        component.</t>
      </section>

      <section anchor="Credential" title="Primary Credential Usage">
        <t>The primary credential usage dimension defines how strongly the
        primary credential can be verified by the IdP. In other words, how
        easily that credential could be spoofed or stolen.</t>

        <t>This dimension SHALL be represented by the <spanx style="verb">C</spanx>
        demarcator and a single-character level value, such as <spanx
        style="verb">Ca</spanx>, <spanx style="verb">Cb</spanx>, etc. Most
        definitions of credential usage will not have an overall natural
        ordering, as there may be several equivalent classes described within
        a trust framework. In such cases it is RECOMMENDED that a letter style
        value be used for this component. Multiple credential usage factors
        MAY be communicated simultaneously, such as when Multi-Factor
        Authentication is used.</t>
      </section>

      <section title="Primary Credential Management">
        <t>The primary credential management dimension conveys information
        about the expected lifecycle of the primary credential in use,
        including its binding, rotation, and revocation. In other words, the
        use and strength of policies, practices, and security controls used in
        managing the credential at the IdP and its binding to the intended
        individual.</t>

        <t>This dimension SHALL be represented by the <spanx style="verb">M</spanx>
        demarcator and a single-character level value, such as <spanx
        style="verb">Ma</spanx>, <spanx style="verb">Mb</spanx>, etc. Most
        definitions of credential management will not have an overall natural
        ordering, though there can be preference and comparison between values
        in some circumstances. In such cases it is RECOMMENDED that a letter
        style value be used for this component.</t>
      </section>

      <section anchor="AssertionPresentation" title="Assertion Presentation">
        <t>The Assertion Presentation dimension defines how well the given
        digital identity can be communicated across the network without
        information leaking to unintended parties, and without spoofing. In
        other words, this dimension describes how likely it is that a given
        digital identity was actually asserted by a given identity provider
        for a given transaction. While this information is largely already
        known by the RP as a side effect of processing an identity assertion,
        this dimension is still very useful when the RP <xref
        target="RequestingVector">requests a login</xref> and when describing
        the <xref target="discovery">capabilities of an IdP</xref>.</t>

        <t>This dimension SHALL be represented by the <spanx style="verb">A</spanx>
        demarcator and a level value, such as <spanx style="verb">Aa</spanx>,
        <spanx style="verb">Ab</spanx>, etc. Most definitions of assertion
        presentation will not have an overall natural ordering. In such cases,
        it is RECOMMENDED that a letter style value be used for this
        component.</t>
      </section>
    </section>

    <section anchor="default-components"
             title="Vectors of Trust Initial Component Value Definitions">
      <t>This specification defines the following general-purpose component
      definitions, which MAY be used when a more specific set is unavailable.
      These component values are referenced in a trustmark definition defined
      by [[ this document URL ]].</t>

      <t>It is anticipated that trust frameworks and specific applications of
      this specification will define their own component values. In order to
      simplify processing by RPs, it is RECOMMENDED that trust framework
      definitions carefully define component values such that they are
      mutually exclusive or subsumptive in order to avoid repeated vector
      components where possible.</t>

      <section title="Identity Proofing">
        <t>The identity proofing component of this vector definition
        represents increasing scrutiny during the proofing process. Higher
        levels are largely subsumptive of lower levels, such that <spanx
        style="verb">P2</spanx> fulfills requirements for <spanx style="verb">P1</spanx>,
        etc.</t>

        <t><list style="hanging">
            <t hangText="P0">No proofing is done, data is not guaranteed to be
            persistent across sessions</t>

            <t hangText="P1">Attributes are self-asserted but consistent over
            time, potentially pseudonymous</t>

            <t hangText="P2">Identity has been proofed either in person or
            remotely using trusted mechanisms (such as social proofing)</t>

            <t hangText="P3">There is a binding relationship between the
            identity provider and the identified party (such as
            signed/notarized documents, employment records)</t>
          </list></t>
      </section>

      <section title="Primary Credential Usage">
        <t>The primary credential usage component of this vector definition
        represents distinct categories of primary credential that MAY be used
        together in a single transaction.</t>

        <t><list style="hanging">
            <t hangText="C0">No credential is used / anonymous public
            service</t>

            <t hangText="Ca">Simple session cookies (with nothing else)</t>

            <t hangText="Cb">Known device</t>

            <t hangText="Cc">Shared secret such as a username and password
            combination</t>

            <t hangText="Cd">Cryptographic proof of key possession using
            shared key</t>

            <t hangText="Ce">Cryptographic proof of key possession using
            asymmetric key</t>

            <t hangText="Cf">Sealed hardware token / trusted biometric /
            TPM-backed keys</t>
          </list></t>
      </section>

      <section title="Primary Credential Management">
        <t>The primary credential management component of this vector
        definition represents distinct categories of management that MAY be
        considered separately or together in a single transaction.</t>

        <t><list style="hanging">
            <t hangText="Ma">Self-asserted primary credentials (user chooses
            their own credentials and must rotate or revoke them manually) /
            no additional verification for primary credential issuance or
            rotation</t>

            <t hangText="Mb">Remote issuance and rotation / use of backup
            recover credentials (such as email verification) / deletion on
            user request</t>

            <t hangText="Mc">Full proofing required for each issuance and
            rotation / revocation on suspicious activity</t>
          </list></t>
      </section>

      <section title="Assertion Presentation">
        <t>The assertion presentation component of this vector definition
        represents distinct categories of assertion which are RECOMMENDED to
        be used in a subsumptive manner but MAY be used together.</t>

        <t><list style="hanging">
            <t hangText="Aa">No protection / unsigned bearer identifier (such
            as a session cookie in a web browser)</t>

            <t hangText="Ab">Signed and verifiable assertion, passed through
            the user agent (web browser)</t>

            <t hangText="Ac">Signed and verifiable assertion, passed through a
            back channel</t>

            <t hangText="Ad">Assertion encrypted to the relying parties key
            and audience protected</t>
          </list></t>
      </section>
    </section>

    <section anchor="CommunicatingVectors"
             title="Communicating Vector Values to RPs">
      <t>A vector of trust is designed to be used in the context of an
      identity and authentication transaction, providing information about the
      context of a federated credential. The vector therefore needs to be able
      to be communicated in the context of the federated credential in a way
      that is strongly bound to the assertion representing the federated
      credential.</t>

      <t>This vector has several requirements for use.</t>

      <t><list style="symbols">
          <t>All applicable vector components and values need to be combined
          into a single vector.</t>

          <t>The vector can be communicated across the wire unbroken and
          untransformed.</t>

          <t>All vector components need to remain individually available, not
          "collapsed" into a single value.</t>

          <t>The vector needs to be protected in transit.</t>

          <t>The vector needs to be cryptographically bound to the assertion
          which it is describing.</t>
        </list></t>

      <t>These requirements lead us to defining a simple string-based
      representation of the vector that can be incorporated within a number of
      different locations and protocols without further encoding.</t>

      <section anchor="Serialization" title="On the Wire Representation">
        <t>The vector MUST be represented as a period-separated ('.') list of
        vector components, with no specific order. A vector component type MAY
        occur multiple times within a single vector, with each component
        separated by periods. Multiple values for a component are considered a
        logical AND of the values. A specific value of a vector component MUST
        NOT occur more than once in a single vector. That is, while <spanx
        style="verb">Cc.Cd</spanx> is a valid vector, <spanx style="verb">Cc.Cc</spanx>
        is not.</t>

        <t>Vector components MAY be omitted from a vector. No holding space is
        left for an omitted vector component. If a vector component is
        omitted, the vector is making no claim for that component. This MAY be
        distinct from a specific component value stating that a component was
        not used.</t>

        <t>Vector values MUST be communicated along side of a trustmark
        definition to give the components context. A vector value without
        context is unprocessable, and vectors defined in different contexts
        are not directly comparable as whole values. Different trustmarks MAY
        re-use component definitions (including their values), allowing
        comparison of individual components across contexts without requiring
        complete understanding of all aspects of a context. The proper
        processing of such cross-context values is outside the scope of this
        specification.</t>

        <t>For example, the vector value <spanx style="verb">P1.Cc.Ab</spanx>
        translates to "pseudonymous, proof of shared key, signed
        browser-passed verified assertion, and no claim made toward credential
        management" in the context of this specification's <xref
        target="default-components">definitions</xref>. The vector value of
        <spanx style="verb">Cb.Mc.Cd.Ac</spanx> translates to "known device,
        full proofing require for issuance and rotation, cryptographic proof
        of possession of a shared key, signed back-channel verified assertion,
        and no claim made toward identity proofing" in the same context.</t>
      </section>

      <section anchor="OIDC" title="In OpenID Connect">
        <t>In <xref target="OpenID">OpenID Connect</xref>, the IdP MUST send
        the vector as a string within the <spanx style="verb">vot</spanx>
        (vector of trust) claim in the ID token. The <xref
        target="Trustmark">trustmark</xref> that applies to this vector MUST
        be sent as an HTTPS URL in the <spanx style="verb">vtm</spanx> (vector
        trust mark) claim to provide context to the vector.</t>

        <t>For example, the body of an ID token claiming "pseudonymous, proof
        of shared key, signed back-channel verified token, and no claim made
        toward credential management" could look like this JSON object payload
        of the ID token.</t>

        <figure>
          <artwork><![CDATA[{ 
    "iss": "https://idp.example.com/", 
    "sub": "jondoe1234", 
    "vot": "P1.Cc.Ac",
    "vtm": "https://trustmark.example.org/trustmark/idp.example.com"
}]]></artwork>
        </figure>

        <t>The body of the ID token is signed and optionally encrypted using
        JOSE, as per the OpenID Connect specification. By putting the <spanx
        style="verb">vot</spanx> and <spanx style="verb">vtm</spanx> values
        inside the ID token, the vector and its context are strongly bound to
        the federated credential represented by the ID token.</t>
      </section>

      <section anchor="SAML" title="In SAML">
        <t>In SAML, a vector is communicated as an
        AuthenticationContextDeclRef. A vector is represented by prefixing it
        with the urn urn:ietf:param:[TBD] to form a full URN. The
        AuthenticationContextDeclaration corresponding to a given vector is a
        AuthenticationContextDeclaration element containing an Extension
        element with components of the vector represented by the following XML
        schema:</t>

        <figure>
          <artwork><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
    targetNamespace="urn:ietf:param:[TBD]:schema"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
   <xs:element name="Vector" type="VectorType">
      <xs:annotation>
         <xs:documentation>This represents a set of vector components.</xs:documentation>
      </xs:annotation>
   </xs:element>
   <xs:element name="Component" type="ComponentType">
      <xs:annotation>
         <xs:documentation>This represents a vector component.</xs:documentation>
      </xs:annotation>
   </xs:element>
   <xs:complexType name="VectorType">
      <xs:sequence>
         <xs:element ref="Component" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
   </xs:complexType>
   <xs:complexType name="ComponentType">
      <xs:attribute name="name" use="required">
         <xs:restriction base="xs:string"/>
      </xs:attribute>
      <xs:attribute name="value" use="required">
         <xs:restriction base="xs:integer"/>
      </xs:attribute> 
   </xs:complexType>
</xs:schema>
]]></artwork>
        </figure>

        <t>For instance the vector P1.Cc.Ac is represented by the
        AuthenticationContextDeclRef URN urn:ietf:param:[TBD]:P1.Cc.Ac (or
        urn:ietf:param:[TBD]:Cc.P1.Ac or ...) which corresponds to the
        following AuthenticationContextDeclaration:</t>

        <figure>
          <artwork><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<AuthenticationContextDeclaration xmlns="urn:oasis:names:tc:SAML:2.0:ac">
   <Extension>
      <vot:Vector>
         <vot:Component name="P" value="1"/>
         <vot:Component name="C" value="c"/>
         <vot:Component name="A" value="c"/>
      </vot:Vector>
   </Extension>
</AuthenticationContextDeclaration>
]]></artwork>
        </figure>
      </section>
    </section>

    <section anchor="RequestingVector" title="Requesting Vector Values">
      <t>In some identity protocols, the RP can request that particular vector
      components be applied to a given identity transaction. Using the same
      syntax as defined in <xref target="Serialization"/>, an RP can indicate
      that it desires particular aspects be present in the authentication.
      Processing and fulfillment of these requests are in the purview of the
      IdP and details are outside the scope of this specification.</t>

      <section anchor="RequestingOIDC" title="In OpenID Connect">
        <t>In <xref target="OpenID">OpenID Connect</xref>, the client MAY
        request a set of acceptable VoT values with the <spanx style="verb">vtr</spanx>
        (vector of trust request) claim request as part of the Request Object.
        The value of this field is an array of JSON strings, each string
        identifying an acceptable set of vector components. The component
        values within each vector are ANDed together while the separate
        vectors are ORed together. For example, a list of vectors in the form
        <spanx style="verb">["P1.Cb.Cc.Ab", "Ce.Ab"]</spanx> is stating that
        either the full set of "P1 AND Cb AND Cc AND Ab" simultaneously OR the
        set of "Ce AND Ab" simultaneously are acceptable to this RP for this
        transaction.</t>

        <t>Vector request values MAY omit components, indicating that any
        value is acceptable for that component category, including omission of
        that component in the response vector.</t>

        <t>The mechanism by which the IdP processes the <spanx style="verb">vtr</spanx>
        and maps that to the authentication transaction are out of scope of
        this specification.</t>
      </section>

      <section anchor="RequestingSAML" title="In SAML">
        <t>In <xref target="SAML">SAML</xref> the client can request a set of
        acceptable VoT values by including the corresponding
        AuthenticationContextDeclRef URIs together with an
        AuthenticationContextClassRef corresponding to the trust mark (cf
        below). The processing rules in [[ SAMLAuthnCtx ]] apply.</t>
      </section>
    </section>

    <section anchor="Trustmark" title="Trustmark">
      <t>When an RP receives a specific vector from an IdP, it needs to make a
      decision to trust the vector within a specific context. A trust
      framework can provide such a context, allowing legal and business rules
      to give weight to an IdP's claims. A trustmark is a verifiable claim to
      conform to a specific component of a trust framework, such as a verified
      identity provider. The trustmark conveys the root of trustworthiness
      about the claims and assertions made by the IdP, including the vector
      itself.</t>

      <t>The trustmark MUST be available from an HTTPS URL served by the trust
      framework provider. The contents of this URL are a <xref
      target="RFC7159">JSON</xref> document with the following fields:</t>

      <t><list style="hanging">
          <t hangText="idp">The issuer URL of the identity provider that this
          trustmark pertains to. This MUST match the corresponding issuer
          claim in the identity token, such as the OpenID Connect <spanx
          style="verb">iss</spanx> field. This MUST be an HTTPS URL.</t>

          <t hangText="trustmark_provider">The issuer URL of the trustmark
          provider that issues this trustmark. The URL that a trustmark is
          fetched from MUST start with the <spanx style="verb">iss</spanx> URL
          in this field. This MUST be an HTTPS URL.</t>

          <t hangText="P">Array of strings containing identity proofing values
          for which the identity provider has been assessed and approved.</t>

          <t hangText="C">Array of strings containing primary credential usage
          values for which the identity provider has been assessed and
          approved.</t>

          <t hangText="M">Array of strings containing primary credential
          management values for which the identity provider has been assessed
          and approved.</t>

          <t hangText="A">Array of strings containing assertion strength
          values for which the identity provider has been assessed and
          approved.</t>
        </list></t>

      <t>Additional vector component values MUST be listed in a similar
      fashion using their demarcator.</t>

      <t>For example, the following trustmark provided by the
      trustmark.example.org organization applies to the idp.example.org
      identity provider:</t>

      <figure>
        <artwork><![CDATA[{
  "idp": "https://idp.example.org/",
  "trustmark_provider": "https://trustmark.example.org/",
  "P": ["P0", "P1"],
  "C": ["C0", "Ca", "Cb"],
  "M": ["Mb"],
  "A": ["Ab", "Ac"]
}]]></artwork>
      </figure>

      <t>An RP wishing to check the claims made by an IdP can fetch the
      information from the trustmark provider about what claims the IdP is
      allowed to make in the first place and process them accordingly. The RP
      MAY cache the information returned from the trustmark URL.</t>

      <t>The operational aspects of the IdP MAY be included in the trustmark
      definition. For example, if a trustmark can indicate that an IdP uses
      multiple redundant hosts, encrypts all data at rest, or other
      operational security mechanisms that affect the trustworthiness of
      assertions made by the IdP. The definition of these additional aspects
      is outside the scope of this specfication.</t>

      <t>The means by which the RP decides which trustmark providers it trusts
      is out of scope for this specification and is generally configured out
      of band.</t>

      <t>Though most trust frameworks will provide a third-party independent
      verification service for components, an IdP MAY host its own trustmark.
      For example, a self-hosted trustmark would look like:</t>

      <figure>
        <artwork><![CDATA[{
  "idp": "https://idp.example.org/",
  "trustmark_provider": "https://idp.example.org/",
  "P": ["P0", "P1"],
  "C": ["C0", "Ca", "Cb"],
  "M": ["Mb"],
  "A": ["Ab", "Ac"]
}]]></artwork>
      </figure>
    </section>

    <section anchor="discovery" title="Discovery">
      <t>The IdP MAY list all of its available trustmarks as part of its
      discovery document, such as the OpenID Connect Discovery server
      configuration document. In this context, trustmarks are listed in the
      <spanx style="verb">trustmarks</spanx> element which contains a single
      <xref target="RFC7159">JSON</xref> object. The keys of this JSON object
      are trustmark provider issuer URLs and the values of this object are the
      corresponding trustmark URLs for this IdP.</t>

      <figure>
        <artwork><![CDATA[{
    "iss": "https://idp.example.org/",
    "trustmark": {
         "https://trustmark.example.org/": "https://trustmark.example.org/trustmark/idp.example.org/"
    }
}]]></artwork>
      </figure>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank the members of the Vectors of Trust
      mailing list in the IETF for discussion and feedback on the concept and
      document, and the members of the ISOC Trust and Identity team for their
      support.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This specification creates one registry and registers several values
      into an existing registry.</t>

      <section title="Vector Of Trust Components Registry">
        <t>The Vector of Trust Components Registry contains the definitions of
        vector components and their associated demarcators.</t>

        <t><list style="symbols">
            <t>Demarcator Symbol: P</t>

            <t>Description: Identity proofing</t>

            <t>Document: [[ this document ]]</t>
          </list><list style="symbols">
            <t>Demarcator Symbol: C</t>

            <t>Description: Primary credential usage</t>

            <t>Document: [[ this document ]]</t>
          </list><list style="symbols">
            <t>Demarcator Symbol: M</t>

            <t>Description: Primary credential management</t>

            <t>Document: [[ this document ]]</t>
          </list><list style="symbols">
            <t>Demarcator Symbol: A</t>

            <t>Description: Assertion presentation</t>

            <t>Document: [[ this document ]]</t>
          </list></t>
      </section>

      <section title="Additions to JWT Claims Registry">
        <t>This specification adds the following values to the JWT Claims
        Registry.</t>

        <t><list style="symbols">
            <t>Claim name: vot</t>

            <t>Description: Vector of Trust value</t>

            <t>Document: [[ this document ]]</t>
          </list><list style="symbols">
            <t>Demarcator Symbol: vtm</t>

            <t>Description: Vector of Trust Trustmark</t>

            <t>Document: [[ this document ]]</t>
          </list><list style="symbols">
            <t>Demarcator Symbol: vtr</t>

            <t>Description: Vector of Trust Request</t>

            <t>Document: [[ this document ]]</t>
          </list></t>
      </section>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The vector of trust value MUST be cryptographically protected in
      transit, using TLS as described in <xref target="BCP195"/>. The vector
      of trust value MUST be associated with a trustmark marker, and the two
      MUST be carried together in a cryptographically bound mechanism such as
      a signed identity assertion. A signed OpenID Connect ID Token and a
      signed SAML assertion both fulfil this requirement.</t>

      <t>The VoT framework provides a mechanism for describing and conveying
      trust information. It does not define any policies for asserting the
      values of the vector, nor does it define any policies for applying the
      values of a vector to an RP's security decision process. These policies
      MUST be agreed upon by the IdP and RP, and they SHOULD be expressed in
      detail in an associated trust framework.</t>
    </section>

    <section anchor="Privacy" title="Privacy Considerations">
      <t>By design, vector of trust values contain information about the
      user's authentication and associations that can be made thereto.
      Therefore, all aspects of a vector of trust contain potentially
      privacy-sensitive information and MUST be guarded as such. Even in the
      absence of specific attributes about a user, knowledge that the user has
      been highly proofed or issued a strong token could provide more
      information about the user than was intended. It is RECOMMENDED that
      systems in general use the minimum vectors applicable to their use case
      in order to prevent inadvertent information disclosure.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'?>

      <?rfc include='http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7159.xml'?>

      <reference anchor="OpenID">
        <front>
          <title>OpenID Connect Core 1.0</title>

          <author fullname="Nat Sakimura" initials="N." surname="Sakimura">
            <organization abbrev="NRI">Nomura Research Institute,
            Ltd.</organization>
          </author>

          <author fullname="John Bradley" initials="J." surname="Bradley">
            <organization abbrev="Ping Identity">Ping Identity</organization>
          </author>

          <author fullname="Michael B. Jones" initials="M.B." surname="Jones">
            <organization abbrev="Microsoft">Microsoft</organization>
          </author>

          <date day="8" month="November" year="2014"/>
        </front>

        <format target="http://openid.net/specs/openid-connect-core-1_0.html"
                type="HTML"/>
      </reference>
    </references>

    <references title="Informative References">
      <reference anchor="SP-800-63-2">
        <front>
          <title>Electronic Authentication Guideline</title>

          <author fullname="William E. Burr">
            <organization/>
          </author>

          <author fullname="Donna F. Dodson">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Elaine M. Newton">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Ray A. Perlner">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="W. Timothy Polk">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Sarbari Gupta">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <author fullname="Emad A.  Nabbus">
            <organization/>

            <address>
              <postal>
                <street/>

                <city/>

                <region/>

                <code/>

                <country/>
              </postal>

              <phone/>

              <facsimile/>

              <email/>

              <uri/>
            </address>
          </author>

          <date month="August" year="2013"/>
        </front>

        <format type="PDF"/>
      </reference>

      <reference anchor="BCP195"
                 target="http://www.rfc-editor.org/info/bcp195">
        <front>
          <title>Recommendations for Secure Use of Transport Layer Security
          (TLS) and Datagram Transport Layer Security (DTLS)</title>

          <author fullname="Y. Sheffer" initials="Y." surname="Sheffer">
            <organization/>
          </author>

          <author fullname="R. Holz" initials="R." surname="Holz">
            <organization/>
          </author>

          <author fullname="P. Saint-Andre" initials="P."
                  surname="Saint-Andre">
            <organization/>
          </author>

          <date month="May" year="2015"/>

          <abstract>
            <t>Transport Layer Security (TLS) and Datagram Transport Layer
            Security (DTLS) are widely used to protect data exchanged over
            application protocols such as HTTP, SMTP, IMAP, POP, SIP, and
            XMPP. Over the last few years, several serious attacks on TLS have
            emerged, including attacks on its most commonly used cipher suites
            and their modes of operation. This document provides
            recommendations for improving the security of deployed services
            that use TLS and DTLS. The recommendations are applicable to the
            majority of use cases.</t>
          </abstract>
        </front>

        <seriesInfo name="BCP" value="195"/>

        <seriesInfo name="RFC" value="7525"/>

        <seriesInfo name="DOI" value="10.17487/RFC7525"/>

        <format octets="60283" type="ASCII"/>
      </reference>
    </references>

    <section title="Document History">
      <t>-03</t>

      <t><list style="symbols">
          <t>Clarified language of LoA's in introduction.</t>

          <t>Added note on operational security in trustmarks.</t>

          <t>Removed empty sections and references.</t>
        </list></t>

      <t>-02</t>

      <t><list style="symbols">
          <t>Converted C, M, and A values to use letters instead of numbers in
          examples.</t>

          <t>Updated SAML to a structured example pending future updates.</t>

          <t>Defined guidance for when to use letters vs. numbers in category
          values.</t>

          <t>Restricted category demarcators to uppercase and values to
          lowercase and digits.</t>

          <t>Applied clarifying editorial changes from list comments.</t>
        </list></t>

      <t>- 01</t>

      <t><list style="symbols">
          <t>Added IANA registry for components.</t>

          <t>Added preliminary security considerations and privacy
          considerations.</t>

          <t>Split "credential binding" into "primary credential usage" and
          "primary credential management".</t>
        </list></t>

      <t>- 00</t>

      <t><list style="symbols">
          <t>Created initial IETF drafted based on strawman proposal discussed
          on VoT list.</t>

          <t>Split vector component definitions into their own section to
          allow extension and override.</t>

          <t>Solidified trustmark document definition.</t>
        </list></t>
    </section>
  </back>
</rfc>
