<?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-as-adjacency-profile.txt"
     ipr="full3978">
  <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="September" year="2008" />

    <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 it may elect to announce routes to these
      adjacent AS's.</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 system, 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. 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>An AAO is a two part structure, that contains a list of AS's and a
      single "local' as. The AAO is an attestation that the local AS is a
      routing peer to each of the AS's in the list. The AAO is signed by a an
      EE Resource Certificate that has the local AS as its 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="Intepretation of an AAO">
      <t>An AAO is an attestation on the part of a AS holder that it operates
      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. The AAO does not refer to
      any individual BGP peer session, and may refer to one of many eBGP
      sessions between the same pair of AS's</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 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 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 perhaps 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="25" month="February" year="2008" />
        </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="1" month="August" year="2008" />
        </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>
