<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<rfc category="std" docName="draft-huston-sidr-aao-profile-01.txt" ipr="trust200902">
  <front>
    <title abbrev="AS Adjacency Profile">A Profile for AS Adjacency Attestation Objects</title>

    <author fullname="Geoff Huston" initials="G." surname="Huston">
      <organization abbrev="APNIC"></organization>
      <address>
        <email>gih@apnic.net</email>
        <uri>http://www.apnic.net</uri>
      </address>
    </author>

    <author fullname="George Michaelson" initials="G." surname="Michaelson">
      <organization abbrev="APNIC"></organization>
      <address>
        <email>ggm@apnic.net</email>
        <uri>http://www.apnic.net</uri>
      </address>
    </author>
    <date month="May" year="2009" />
    <area>Internet</area>
    <workgroup>SIDR</workgroup>
    <abstract>

      <t>This document defines a standard profile for AS Adjacency
      Attestation Objects (AAOs). An AAO is a digitally signed object
      that provides a means of verifying that an AS has made an
      attestation that it has a inter-domain routing adjacency with
      one or more other AS's, with the associated inference that this
      AS may announce or receive routes with these adjacent AS's in
      the inter-domain domain environment.</t>

    </abstract>
  </front>

  <middle>
    <section anchor="intro" title="Introduction">

      <t>The primary purpose of the Internet IP Address and AS Number
      Resource Public Key Infrastructure (RPKI) system <xref
      target="ID.ietf-sidr-arch"></xref> is to improve routing
      security. As part of this security framework, a mechanism is
      defined here to allow entities to verify that an AS attests that
      is adjacent to one or more other AS's, with the inference that
      it may elect to announce routes to these adjacent AS's in the
      inter-domain routing environment. An AAO provides this
      function.</t>

      <t>An AAO is a digitally signed object that makes use of
      Cryptographic Message Syntax (CMS) <xref
      target="RFC3852"></xref> as a standard encapsulation format. CMS
      was chosen to take advantage of existing open source software
      available for processing messages in this format.</t>

      <t>The AAO is an attestation authored by the local AS that the
      local AS is a routing peer to each of the AS's that are
      enumerated in an associated AS list. An AAO is a two part
      structure, containing the local AS and a list of AS's. The AAO
      is signed by a an EE Resource Certificate that has the local AS
      as the value of its AS number resource extension.</t>

      <section title="Terminology">

        <t>It is assumed that the reader is familiar with the terms
        and concepts described in "Internet X.509 Public Key
        Infrastructure Certificate and Certificate Revocation List
        (CRL) Profile" <xref target="RFC5280"></xref>, "X.509
        Extensions for IP Addresses and AS Identifiers" <xref
        target="RFC3779"></xref>, "Internet Protocol" <xref
        target="RFC0791"></xref>, "Internet Protocol Version 6 (IPv6)
        Addressing Architecture" <xref target="RFC4291"></xref>,
        "Internet Registry IP Allocation Guidelines" <xref
        target="RFC2050"></xref>, and related regional Internet
        registry address management policy documents, and BGP-4 <xref
        target="RFC4271"></xref></t>

        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
        "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
        "OPTIONAL" in this document are to be interpreted as described
        in RFC 2119.</t>

      </section>
    </section>

    <section title="Semantic Interpretation of an AAO">

      <t>An AAO is an attestation on the part of a AS holder that it
      supports inter-domain routing adjacencies to each of the AS's
      listed in the AAO.  The AAO does not list any prefixes that may
      be announced to the adjacent AS's either directly or
      indirectly. The AAO also does not list any local routing
      policies that may be applied to the routes that are advertised
      across this adjacency, nor any routing policies that may be
      applied to routes that are learned from this adjacency.</t>

      <t>The AAO is intended to provide "closure" with respect to
      interpretation of the AAO by relying parties, to the extent that
      if a valid AAO exists for a local AS, then from the perspective
      of that local AS all adjacencies with those AS's listed in the
      valid AAO can be regarded as "valid" and any other adjacency
      from the perspective of the local AS can be regarded as
      potentially "invalid". In other words an AAO is an attestation
      of adjacency with the AS's listed in the AAO and an implicit
      attestion of the denial of adjacency with all other AS's. Where
      an AS holder has published two or more valid AAO's, the set of
      "valid" adjacent AS's refers to the union of the lists of
      adjacent AS's and all other AS's can be regarded as "invalid"
      from the perspective of the local AS.</t>

      <t>It is reasonable for a relying party to infer from a valid
      AAO that the signing AS has the intent to advertise route
      objects across this adjacency, and is prepared to learn route
      objects that are passed to it from the adjacent AS.</t>

      <t>It is noted that an AAO is an asymmetric assertion, where one
      AS is asserting that an inter-domain routing adjacency with
      another AS is asserted to exist, but this assertion is not
      explicitly acknowledged by the remote AS in the context of a
      single AAO. Relying parties may elect to place greater levels of
      confidence in the existence of an inter-domain routing adjacency
      when both AS's have signed and published AAO objects that
      contain mutual references.</t>

      <t>It is also noted that there is a subtle distinction that
      could be drawn here between the appropriate semantic
      interpretation a pair of unilateral assertions of adjacency
      using two AAOs and a bilateral assertion of adjacency where both
      AS's sign a single assertion of the existence of an inter-domain
      routing adjacency between these AS's. This bilateral approach,
      using a single assertion with two digital signatures, is not
      defined in this document.</t>

    </section>

    <section title="Basic Format">

      <t>Using CMS syntax, an AAO is a type of signed-data object. The
      general format of a CMS object is:</t>

      <figure>
        <artwork><![CDATA[
      ContentInfo ::= SEQUENCE { 
        contentType ContentType, 
        content [0] EXPLICIT ANY DEFINED BY contentType } 
    
      ContentType ::= OBJECT IDENTIFIER 
]]></artwork>
      </figure>

      <t>As a AAO is a signed-data object, it uses the corresponding
      OID, 1.2.840.113549.1.7.2. <xref target="RFC3852"></xref></t>

      <section title="Signed-Data Content Type">

        <t>According to the CMS standard, the signed-data content type
        shall have ASN.1 type SignedData:</t>

        <figure>
          <artwork><![CDATA[
      SignedData ::= SEQUENCE { 
        version CMSVersion, 
        digestAlgorithms DigestAlgorithmIdentifiers, 
        encapContentInfo EncapsulatedContentInfo, 
        certificates [0] IMPLICIT CertificateSet OPTIONAL, 
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, 
        signerInfos SignerInfos } 
    
      DigestAlgorithmIdentifiers ::= SET OF DigestAlgorithmIdentifier 
    
      SignerInfos ::= SET OF SignerInfo 
]]></artwork>
        </figure>

        <section title="version">
          <t>The version is the syntax version number. It MUST be 3,
          corresponding to the signerInfo structure having version number
          3.</t>
        </section>

        <section title="digestAlgorithms">

          <t>The digestAlgorithms set MUST include only SHA-256, the
          OID for which is 2.16.840.1.101.3.4.2.1. <xref
          target="RFC4055"></xref> It MUST NOT contain any other
          algorithms.</t>

        </section>

        <section title="encapContentInfo">

          <t>encapContentInfo is the signed content, consisting of a
          content type identifier and the content itself.</t>

          <figure>
            <artwork><![CDATA[
      EncapsulatedContentInfo ::= SEQUENCE { 
        eContentType ContentType, 
        eContent [0] EXPLICIT OCTET STRING OPTIONAL } 
    
      ContentType ::= OBJECT IDENTIFIER 
]]></artwork>
          </figure>

          <section title="eContentType">

            <t>The ContentType for a AAO is defined as
            id-ct-ASAdjancyAttest and has the numerical value of
            1.2.840.113549.1.9.16.1.32.</t>

            <figure>
              <artwork><![CDATA[
      id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840)
                                rsadsi(113549) pkcs(1) pkcs9(9) 16 }
   
      id-ct OBJECT IDENTIFIER ::= { id-smime 1 } 
    
      id-ct-ASAdjacencyAttest OBJECT IDENTIFIER ::= { id-ct 32 } 
]]></artwork>
            </figure>
          </section>

          <section title="eContent">

            <t>The content of an AAO identifies one or more AS's that
            the signing AS is attesting that it has a routing
            adjacency with.  Multiple adjacencies can be attested on
            one or more AAOs.</t>

            <t>The AAO contains no routing policy qualifications, nor
            does it reference any address prefixes that may be
            announced within the context of that routing
            adjacency.</t>

            <t>An AAO is formally defined as:</t>

            <figure>
              <artwork><![CDATA[
      id-ct-ASAdjacencyAttest ::= SEQUENCE { 
        version [0] INTEGER DEFAULT 0, 
        ASIdentifiers       ::= SEQUENCE OF ASIdOrRange,
        localASNum ASId} 

      ASIdOrRange         ::= CHOICE {
        id                  ASId,
        range               ASRange }

      ASRange             ::= SEQUENCE {
        min                 ASId,
        max                 ASId }

      ASId                ::= INTEGER]]></artwork>
            </figure>

            <section title="version">

              <t>The version number of the ASAdjacencyAttestation MUST
              be 0.</t>

            </section>

            <section title="ASIdentifiers">

              <t>The ASIdentifiers element is a SEQUENCE containing AS
              numbers for which the localASnum AS is attesting the
              existence of a routing adjacency. Any pair of items in
              the asIdentifiers SEQUENCE MUST NOT overlap. Any
              contiguous series of AS identifiers MUST be combined
              into a single range whenever possible. The AS
              identifiers in the asIdentifiers element MUST be sorted
              by increasing numeric value.</t>

              <section title="ASIdOrRange">

                <t>The ASIdOrRange type is a CHOICE of either a single
                integer (ASId) or a single sequence (ASRange).</t>

              </section>

              <section title="ASRange">

                <t>The ASRange type is a SEQUENCE consisting of a min
                and a max element, and is used to specify a range of
                AS identifier values.</t>

                <section title="min and max">

                  <t>The min and max elements have type ASId. The min
                  element is used to specify the value of the minimum
                  AS identifier in the range, and the max element
                  specifies the value of the maximum AS identifier in
                  the range.</t>

                </section>
              </section>

              <section title="ASId">

                <t>The ASId type is an INTEGER.</t>

              </section>
            </section>

            <section title="localASNum">

              <t>The localASNum field contains the AS that is making
              the attestation of routing adjacency to each of the AS's
              listed in the ASIdentifiers element.</t>

            </section>
          </section>
        </section>

        <section title="CertificateSet">

          <t>The CertificateSet type is defined in section 10 of <xref
          target="RFC3852"></xref></t>

        </section>

        <section title="certificates">

          <t>The certificates element MUST be included and MUST
          contain only the single end entity resource certificate
          needed to validate this AAO.</t>

        </section>

        <section title="crls">

          <t>The crls element MUST be omitted.</t>

        </section>

        <section title="signerInfos">

          <t>SignerInfo is defined under CMS as:</t>

          <figure>
            <artwork><![CDATA[
      SignerInfo ::= SEQUENCE { 
        version CMSVersion, 
        sid SignerIdentifier, 
        digestAlgorithm DigestAlgorithmIdentifier, 
        signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, 
        signatureAlgorithm SignatureAlgorithmIdentifier, 
        signature SignatureValue, 
        unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL } 
]]></artwork>
          </figure>

          <section title="version">

            <t>The version number MUST be 3, corresponding with the
            choice of SubjectKeyIdentifier for the sid.</t>

          </section>

          <section title="sid">
            <t>The sid is defined as:</t>

            <figure>
              <artwork><![CDATA[
      SignerIdentifier ::= CHOICE { 
        issuerAndSerialNumber IssuerAndSerialNumber, 
        subjectKeyIdentifier [0] SubjectKeyIdentifier } 
]]></artwork>
            </figure>

            <t>For a AAO, the sid MUST be a SubjectKeyIdentifier.</t>

          </section>

          <section title="digestAlgorithm">

            <t>The digestAlgorithm MUST be SHA-256, the OID for which
            is 2.16.840.1.101.3.4.2.1. <xref
            target="RFC4055"></xref></t>

          </section>

          <section title="signedAttrs">

            <t>The signedAttrs is defined as:</t>

            <figure>
              <artwork><![CDATA[
         SignedAttributes ::= SET SIZE (1..MAX) OF Attribute 
 
         Attribute ::= SEQUENCE { 
           attrType OBJECT IDENTIFIER, 
           attrValues SET OF AttributeValue } 
    
         AttributeValue ::= ANY 
]]></artwork>
            </figure>

            <t>The signedAttr element MUST be present and MUST include
            the content-type and message-digest signed attributes. The
            signer MAY also include the signing-time signed attribute,
            the binary-signing-time signed attribute, or both signed
            attributes. Other signed attributes that are deemed
            appropriate by the signer MAY also be included. The intent
            is to allow additional signed attributes to be included if
            a future need is identified. This does not cause an
            interoperability concern because unrecognized signed
            attributes are ignored by the relying party.</t>

            <t>The signedAttr MUST include only a single instance of
            any particular attribute. Additionally, even though the
            syntax allows for a SET OF AttributeValue, in a AAO the
            attrValues must consist of only a single
            AttributeValue</t>

            <section title="ContentType Attribute">

              <t>The ContentType attribute MUST be present. The
              attrType OID for the ContentType attribute is
              1.2.840.113549.1.9.3.</t>

              <t>The attrValues for the ContentType attribute in a AAO
              MUST be 1.2.840.113549.1.9.16.1.24 (matching the
              eContentType in the EncapsulatedContentInfo).</t>

            </section>

            <section title="MessageDigest Attribute">

              <t>The MessageDigest attribute MUST be present. The
              attrType OID for the MessageDigest Attribute is
              1.2.840.113549.1.9.4.</t>

              <t>The attrValues for the MessageDigest attribute
              contains the output of the digest algorithm applied to
              the content being signed, as specified in Section 11.1
              of <xref target="RFC3852"></xref>.</t>

            </section>

            <section title="SigningTime Attribute">

              <t>The SigningTime attribute MAY be present. If it is
              present it MUST be ignored by the relying party. The
              presence of absence of the SigningTime attribute in no
              way affects the validation of the AAO (as specified in
              Section 4). The attrType OID for the SigningTime
              attribute is 1.2.840.113549.1.9.5.</t>

              <t>The attrValues for the SigningTime attribute is
              defined as:</t>

              <figure>
                <artwork><![CDATA[
      SigningTime ::= Time 
    
      Time ::= CHOICE { 
           utcTime UTCTime, 
           generalizedTime GeneralizedTime } 
]]></artwork>
              </figure>

              <t>The Time element specifies the time, based on the
              local system clock, at which the digital signature was
              applied to the content.</t>

            </section>

            <section title="BinarySigningTimeAttribute">

              <t>The BinarySigningTime attribute MAY be present. If it
              is present it MUST be ignored by the relying party. The
              presence of absence of the BinarySigningTime attribute
              in no way affects the validation of the AAO (as
              specified in Section 3). The attrType OID for the
              SigningTime attribute is 1.2.840.113549.1.9.16.2.46.</t>

              <t>The attrValues for the SigningTime attribute is
              defined as:</t>

              <figure>
                <artwork><![CDATA[
      BinarySigningTime ::= BinaryTime 
    
      BinaryTime ::= INTEGER (0..MAX)
]]></artwork>
              </figure>

              <t>The BinaryTime element specifies the time, based on
              the local system clock, at which the digital signature
              was applied to the content.</t>

            </section>
          </section>

          <section title="signatureAlgorithm">

            <t>The signatureAlgorithm MUST be RSA (rsaEncryption), the
            OID for which is 1.2.840.113549.1.1.1.</t>

          </section>

          <section title="signature">

            <t>The signature value is defined as:</t>

            <figure>
              <artwork><![CDATA[
      SignatureValue ::= OCTET STRING 
]]></artwork>
            </figure>

            <t>The signature characteristics are defined by the digest and
            signature algorithms.</t>
          </section>

          <section title="unsignedAttrs">

            <t>unsignedAttrs MUST be omitted.</t>

          </section>
        </section>
      </section>
    </section>

    <section title="AAO Validation">

      <t>Before a relying party can use an AAO, the relying party must
      first use the RPKI to validate the AAO by performing the
      following steps.<vspace blankLines="1" />

      <list style="numbers">
          <t>Verify that the AAO syntax complies with this specification. In
          particular, verify the following:<vspace blankLines="1" /> <list
              style="format %c.">
              <t>The contentType of the CMS object is SignedData (OID
              1.2.840.113549.1.7.2). <vspace blankLines="1" /></t>

              <t>The version of the SignedData object is 3. <vspace
              blankLines="1" /></t>

              <t>The digestAlgorithm in the SignedData object is SHA-256 (OID
              2.16.840.1.101.3.4.2.1). <vspace blankLines="1" /></t>

              <t>The certificates field in the SignedData object is present
              and contains an EE certificate whose Subject Key Identifier
              (SKI) matches the sid field of the SignerInfo object. <vspace
              blankLines="1" /></t>

              <t>The crls field in the SignedData object is omitted. <vspace
              blankLines="1" /></t>

              <t>The eContentType in the EncapsulatedContentInfo is
              id-ct-ADAdjacencyAttest (OID 1.2.840.113549.1.9.16.1.32) <vspace
              blankLines="1" /></t>

              <t>The version of the id-ct-ASAdjacencyAttest is 0.<vspace
              blankLines="1" /></t>

              <t>The version of the SignerInfo is 3. <vspace
              blankLines="1" /></t>

              <t>The digestAlgorithm in the SignerInfo object is SHA-256 (OID
              2.16.840.1.101.3.4.2.1). <vspace blankLines="1" /></t>

              <t>The signatureAlgorithm in the SignerInfo object is RSA (OID
              1.2.840.113549.1.1.1). <vspace blankLines="1" /></t>

              <t>The signedAttrs field in the SignerInfo object is present and
              contains both the ContentType attribute (OID
              1.2.840.113549.1.9.3) and the MessageDigest attribute (OID
              1.2.840.113549.1.9.4).<vspace blankLines="1" /></t>

              <t>The unsignedAttrs field in the SignerInfo object is
              omitted.<vspace blankLines="1" /></t>
            </list></t>

          <t>Use the public key in the EE certificate to verify the signature
          on the AAO.<vspace blankLines="1" /></t>

          <t>Verify that the EE certificate has an Autonomous System
          Identifier Delegation Extension <xref target="RFC3779"></xref> and
          that the Autonomous System Identifier in that extension exactly
          matches the Autonomous System Identifier in the localASNum element
          of the AAO.<vspace blankLines="1" /></t>

          <t>Verify that the EE certificate is a valid end-entity certificate
          in the RPKI by constructing a valid certificate path to a trust
          anchor. (See <xref target="ID.ietf-sidr-res-certs"></xref> for more
          details.)</t>
        </list></t>
    </section>

    <section title="Security Considerations">

      <t>There is no assumption of confidentiality for the data in a
      AAO; it is anticipated that AAOs will be stored in repositories
      that are accessible to all ISPs, and potentially to all Internet
      users. There is no explicit authentication associated with a
      AAO, since the RPKI that is used for AAO validation provides
      authorization but not authentication.  Although the AAO is a
      signed, application layer object, there is no intent to convey
      non-repudiation via a AAO.</t>

      <t>The purpose of a AAO is to convey a unilateral statement of intent
      that an AS has the intention to announce route objects via a routing
      adjacency with another AS and has the intention to listen for route
      objects that are passed to it over a routing adjacency. This should not
      be interpreted as an authority, nor is a relying party justified in
      assuming that such an adjacency exists, nor that any valid routing
      announcements that are passed across this routing adjacency.</t>

      <t>A relying party may be able to place greater confidence in the
      inferred existence of a routing adjacency in the case where both AS
      holders mutually generate signed AAO objects that nominate each other as
      an adjacent AS.</t>

      <t>The AAO object does not convey any information relating to route
      policies that may be applied to the adjacency by either party to a route
      adjacency, nor what prefixes may be advertised across that adjacency,
      nor any attributes that may be associated with such advertisements.</t>
    </section>

    <section title="IANA Considerations">

      <t>[Note to IANA, to be removed prior to publication: there are
      no IANA considerations stated in this version of the
      document.]</t>

    </section>

    <section title="Acknowledgements">

      <t>The authors would like to acknowledge the work of Matt
      Lepinski, Stephen Kent and Derrick Kong, whose work on the Route
      Origin Attestation Profile was used as the starting point for
      this document.</t>

    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='./rfcs/bibxml/reference.RFC.3779.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.3852.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.5280.xml'?>

      <reference anchor="ID.ietf-sidr-arch">
        <front>
          <title>An Infrastructure to Support Secure Internet Routing</title>

          <author fullname="M. Lepinski" initials="M" surname="Lepinski">
            <organization>BBN Technologies</organization>
          </author>

          <author fullname="S. Kent" initials="S" surname="Kent">
            <organization>BBN Technologies</organization>
          </author>

          <date day="9" month="March" year="2009" />
        </front>

        <seriesInfo name="Internet-Draft" value="draft-ietf-sidr-arch" />

        <format target="http://draft-ietf-sidr-arch.potaroo.net" type="TXT" />
      </reference>

      <reference anchor="ID.ietf-sidr-res-certs">
        <front>
          <title>A Profile for X.509 PKIX Resource Certificates</title>

          <author fullname="G. Huston" initials="G" surname="Huston">
            <organization>APNIC</organization>
          </author>

          <author fullname="G. Michaelson" initials="G" surname="Michaleson">
            <organization>APNIC</organization>
          </author>

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

          <date day="25" month="February" year="2009" />
        </front>

        <seriesInfo name="Internet Draft" value="draft-ietf-sidr-res-certs" />

        <format target="http://draft-ietf-sidr-recerts.potaroo.net" type="TXT" />
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include='./rfcs/bibxml/reference.RFC.0791.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.2050.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.4055.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.4271.xml'?>

      <?rfc include='./rfcs/bibxml/reference.RFC.4291.xml'?>
    </references>
  </back>
</rfc>

