<?xml version="1.0" encoding="US-ASCII"?>
<!-- This template is for creating an Internet Draft using xml2rfc,
     which is available here: http://xml.resource.org. -->
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<!-- used by XSLT processors -->
<!-- For a complete list and description of processing instructions (PIs), 
     please see http://xml.resource.org/authoring/README.html. -->
<?rfc strict="yes" ?>
<!-- give errors regarding ID-nits and DTD validation -->
<!-- control the table of contents (ToC) -->
<?rfc toc="yes"?>
<!-- generate a ToC -->
<?rfc tocdepth="3"?>
<!-- the number of levels of subsections in ToC. default: 3 -->
<!-- control references -->
<?rfc symrefs="yes"?>
<!-- use symbolic references tags, i.e., [RFC2119] instead of [1] -->
<?rfc sortrefs="yes" ?>
<!-- sort the reference entries alphabetically -->
<!-- control vertical white space 
     (using these PIs as follows is recommended by the RFC Editor) -->
<?rfc compact="yes" ?>
<!-- do not start each main section on a new page -->
<?rfc subcompact="no" ?>
<!-- keep one blank line between list items -->
<!-- end of list of popular I-D processing instructions -->
<rfc category="std" docName="draft-qin-sidrops-toa-00" ipr="trust200902">
  <front>
    <title abbrev="Traffic Origin Authorization">A Profile for Traffic Origin
    Authorizations (TOAs)</title>

    <author fullname="Lancheng Qin" initials="L." surname="Qin">
      <organization>Zhongguancun Laboratory</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <country>China</country>
        </postal>

        <email>qinlc@mail.zgclab.edu.cn</email>
      </address>
    </author>

    <author fullname="Ben Maddison" initials="B." surname="Maddison">
      <organization>Workonline</organization>

      <address>
        <postal>
          <street/>

          <city>Cape Town</city>

          <region/>

          <code/>

          <country>South Africa</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>benm@workonline.africa</email>

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

    <author fullname="Dan Li" initials="D." surname="Li">
      <organization>Tsinghua University</organization>

      <address>
        <postal>
          <street/>

          <city>Beijing</city>

          <region/>

          <code/>

          <country>China</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>tolidan@tsinghua.edu.cn</email>

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

    <date day="25" month="June" year="2025"/>

    <!---->

    <keyword/>

    <abstract>
      <t>This document defines a standard profile for Traffic Origin
      Authorizations (TOAs), a Cryptographic Message Syntax (CMS) protected
      content type for use with the Resource Public Key Infrastructure (RPKI).
      A TOA is a digitally signed object that provides a means of verifying
      that an IP address block holder has authorized an Autonomous System (AS)
      to originate traffic using source IP addresses within the address
      block.</t>
    </abstract>

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

  <middle>
    <section title="Introduction">
      <t>Source Address Validation (SAV) aims to detect and discard data
      packets that use a spoofed source IP address. The fundamental concept of
      the current practice is directionality: for data packets using a given
      source IP address, only those coming from a specific direction are
      considered legitimate. BCP84 <xref target="RFC8704"/> introduces a more
      structured direction-based logic, i.e., identifying the incoming
      directions for traffic of a given source AS and determining the source
      prefix space that the AS is authorized to use.</t>

      <t>To support such validation, a mechanism is needed to allow entities
      to verify that an AS has been authorized to originate traffic using one
      or more prefixes as the source IP address. A Traffic Origin
      Authorization (TOA) provides this function.</t>

      <t>The TOA makes use of the template for RPKI digitally signed object
      <xref target="RFC6488"/>, which defines a Cryptographic Message Syntax
      (CMS) wrapper <xref target="RFC5652"/> for a generic validation
      procedure for RPKI signed objects. Therefore, to complete the
      specification of the TOA (see Section 4 of <xref target="RFC6488"/>),
      this document defines:<list style="symbols">
          <t>The OID that identifies the signed object as being a TOA. (This
          OID appears within the eContentType in the encapContentInfo object
          as well as the content-type signed attribute in the signerInfo
          object.)</t>

          <t>The ASN.1 syntax for the TOA eContent. (This is the payload that
          specifies the ASes being authorized to originate traffic as well as
          the prefixes that the ASes may use as the source IP address.) The
          TOA eContent is ASN.1 encoded using the Distinguished Encoding Rules
          (DER) <xref target="X.690"/>.</t>

          <t>Additional steps required to validate TOAs (in addition to the
          validation steps specified in <xref target="RFC6488"/>).</t>
        </list></t>

      <t>The content of a TOA identifies a list of one or more ASes that have
      been authorized by the IP address block holder to originate traffic and
      a list of one or more IP address prefixes within the address block that
      will be used as the source IP address. The IP address block holder can
      register one or more TOAs to authorize which ASes can originate traffic
      using specific prefixes within the block as the source IP address. By
      registering TOAs, IP address block holders can protect their source IP
      addresses from being forged by attackers inside unauthorized ASes. ISP
      or enterprise AS operators can use TOAs to improve the accuracy and
      robustness of SAV (see Section 6 for details).</t>

      <t>The TOA and the ROA <xref target="RFC9582"/> have the similar format
      but have different intentions and contents. Prefixes used as the source
      IP address in traffic (which is contained in TOAs) and prefixes
      advertised into the routing system (which is contained in ROAs) can be
      different and asymmetric for the same AS. For example, in the Content
      Delivery Networks (CDN) and Direct Server Return (DSR) scenario, the AS
      where the edge server is located does not advertise the anycast prefix
      but will originate traffic using a source IP address within the anycast
      prefix (see <xref
      target="I-D.ietf-savnet-inter-domain-problem-statement"/>).</t>
    </section>

    <section title="The TOA Content Type">
      <t>The content-type for a TOA is defined as id-ct-trafficOriginAuthz and
      has the numerical value of 1.2.840.113549.1.9.16.1.TBD.</t>

      <t>This OID MUST appear within both the eContentType in the
      encapContentInfo object and the content-type signed attribute in the
      signerInfo object (see <xref target="RFC6488"/>).</t>
    </section>

    <section title="The TOA eContent">
      <t>The content of a TOA identifies a list of one or more ASes that have
      been authorized by the address block holder to originate traffic and a
      list of one or more IP address prefixes within the address block that
      will be used as the source IP address. A TOA is formally defined as:</t>

      <figure>
        <artwork><![CDATA[RPKI-TOA-2025
     { iso(1) member-body(2) us(840) rsadsi(113549)
       pkcs(1) pkcs9(9) smime(16) mod(0)
       id-mod-rpkiTOA-2025(TBD) }

DEFINITIONS EXPLICIT TAGS ::=
BEGIN

IMPORTS
  CONTENT-TYPE
  FROM CryptographicMessageSyntax-2010 -- in [RFC6268]
    { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
      pkcs-9(9) smime(16) modules(0) id-mod-cms-2009(58) } ;

ct-trafficOriginAttestation CONTENT-TYPE ::=
  { TYPE TrafficOriginAttestation 
    IDENTIFIED BY id-ct-trafficOriginAuthz }

id-ct-trafficOriginAuthz  OBJECT IDENTIFIER ::=
  { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1)
    pkcs-9(9) id-smime(16) id-ct(1) trafficOriginAuthz(TBD) }

TrafficOriginAttestation ::= SEQUENCE {
  version [0]   INTEGER DEFAULT 0,
  asSet         ASSet,
  ipaddrBlocks  SEQUENCE (SIZE(1..2)) OF TOAIPAddressFamily }

ASSet ::= SEQUENCE (SIZE(1..10000)) OF ASID
ASID ::= INTEGER (0..4294967295)

TOAIPAddressFamily ::= SEQUENCE {
  addressFamily  ADDRESS-FAMILY.&afi ({AddressFamilySet}),
  addresses      ADDRESS-FAMILY.&Addresses 
                                             ({AddressFamilySet}{@addressFamily}) }

ADDRESS-FAMILY ::= CLASS {
  &afi              OCTET STRING (SIZE(2)) UNIQUE,
  &Addresses
  } WITH SYNTAX { AFI &afi ADDRESSES &Addresses }

AddressFamilySet ADDRESS-FAMILY ::= 
  { addressFamilyIPv4 | addressFamilyIPv6 }

addressFamilyIPv4 ADDRESS-FAMILY ::= 
  { AFI afi-IPv4 ADDRESSES TOAAddressesIPv4 }
addressFamilyIPv6 ADDRESS-FAMILY ::= 
  { AFI afi-IPv6 ADDRESSES TOAAddressesIPv6 }

afi-IPv4 OCTET STRING ::= '0001'H
afi-IPv6 OCTET STRING ::= '0002'H

TOAAddressesIPv4 ::= SEQUENCE (SIZE(1..MAX)) OF TOAIPAddress{ub-IPv4}
TOAAddressesIPv6 ::= SEQUENCE (SIZE(1..MAX)) OF TOAIPAddress{ub-IPv6}

ub-IPv4 INTEGER ::= 32
ub-IPv6 INTEGER ::= 128

TOAIPAddress {INTEGER: ub} ::= BIT STRING (SIZE(0..ub))

END]]></artwork>
      </figure>

      <section title="The version Element">
        <t>The version number of the TrafficOriginAttestation entry MUST be
        0.</t>
      </section>

      <section title="The asSet Element">
        <t>The asSet element contains a set of AS numbers that are authorized
        to originate traffic using source IP addresses within the given IP
        address prefixes.</t>
      </section>

      <section title="The ipaddrBlocks Element">
        <t>The ipaddrBlocks element encodes the set of IP address prefixes
        that the specified set of AS numbers is authorized to use as source
        addresses when originating traffic.</t>

        <section title="TOAIPAddressFamily">
          <t>Within the TOAIPAddressFamily structure, the addressFamily
          element contains the Address Family Identifier (AFI) of an IP
          address family. Each addressFamily MUST be either 0001 or 0002.
          There MUST be only one instance of TOAIPAddressFamily per unique AFI
          in the TOA.</t>

          <t>The addresses field contains IP prefixes as a sequence of type
          TOAIPAddress.</t>
        </section>

        <section title="TOAIPAddress">
          <t>This element is of type BIT STRING and represents a single IP
          address prefix <xref target="RFC3779"/>.</t>
        </section>
      </section>
    </section>

    <section title="TOA Validation">
      <t>To validate a TOA, the Relying Party (RP) MUST perform all the
      validation checks specified in <xref target="RFC6488"/> as well as the
      following additional specific validation steps:<list style="symbols">
          <t>The IP address delegation extension <xref target="RFC3779"/> is
          present in the end-entity (EE) certificate (contained within the
          TOA), and every IP address prefix in the TOA payload is contained
          within the set of IP addresses specified by the EE certificate's IP
          address delegation extension.</t>

          <t>The EE certificate's IP address delegation extension MUST NOT
          contain "inherit" elements as described in <xref
          target="RFC3779"/>.</t>

          <t>The Autonomous System identifier delegation extension described
          in <xref target="RFC3779"/> is not used in TOAs and MUST NOT be
          present in the EE certificate.</t>

          <t>The TOA content fully conforms with all requirements specified in
          Sections 2 and 3.</t>
        </list></t>

      <t>If any of the above checks fail, the TOA MUST be considered invalid
      and an error SHOULD be logged.</t>
    </section>

    <section title="Security Considerations">
      <t>The security considerations of <xref target="RFC6481"/>, <xref
      target="RFC6485"/>, <xref target="RFC6488"/>, and <xref
      target="RFC9582"/> also apply to the TOA object.</t>
    </section>

    <section title="Enhancing SAV with TOAs">
      <t>Without TOAs, current SAV mechanisms (e.g., EFP-uRPF <xref
      target="RFC8704"/>) typically use BGP data, ROAs, or IRR route objects
      to determine the legitimate source IP address space of a given AS.
      However, due to the asymmetry between prefixes used as the source IP
      address and prefixes advertised into the routing system (as mentioned in
      Section 1), using BGP data, ROAs, and IRR route objects to perform SAV
      will have false positives (i.e., blocking legitimate data packets) and
      false negatives (i.e., permitting spoofing data packets).</t>

      <t>By using TOAs, SAV can accurately identify whether an AS is
      authorized to use a specific source IP address to originate traffic. If
      an AS originates spoofing traffic using a source IP address authorized
      to other ASes in TOAs, TOA-based SAV can identify and discard this
      spoofing traffic. Therefore, it is highly recommended to improve the
      accuracy and robustness upon current SAV by using TOAs.</t>
    </section>

    <section title="IANA Considerations">
      <section title="SMI Security for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)">
        <t>IANA is requested to allocate the following in the "SMI Security
        for S/MIME CMS Content Type (1.2.840.113549.1.9.16.1)" registry:</t>

        <texttable>
          <ttcol>Decimal</ttcol>

          <ttcol>Description</ttcol>

          <ttcol>Reference</ttcol>

          <c>TBD</c>

          <c>id-ct-trafficOriginAuthz</c>

          <c>draft-qin-sidrops-toa</c>
        </texttable>
      </section>

      <section title="RPKI Signed Objects Registry">
        <t>Please add an item for the TOA file extension to the RPKI Signed
        Object registry
        (https://www.iana.org/assignments/rpki/rpki.xhtml#signed-objects) as
        follows:</t>

        <texttable>
          <ttcol>Name</ttcol>

          <ttcol>OID</ttcol>

          <ttcol>Reference</ttcol>

          <c>Traffic Origin Authorization</c>

          <c>1.2.840.113549.1.9.16.1.TBD</c>

          <c>draft-qin-sidrops-toa</c>
        </texttable>
      </section>

      <section title="File Extension">
        <t>Please add an item for the TOA file extension to the "RPKI
        Repository Name Scheme" registry created by <xref target="RFC6481"/>
        as follows:</t>

        <texttable>
          <ttcol>Filename Extension</ttcol>

          <ttcol>RPKI Object</ttcol>

          <ttcol>Reference</ttcol>

          <c>.toa</c>

          <c>Traffic Origin Authorization</c>

          <c>draft-qin-sidrops-toa</c>
        </texttable>
      </section>

      <section title="SMI Security for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)">
        <t>IANA is requested to allocate the following in the "SMI Security
        for S/MIME Module Identifier (1.2.840.113549.1.9.16.0)" registry:</t>

        <texttable>
          <ttcol>Decimal</ttcol>

          <ttcol>Description</ttcol>

          <ttcol>Reference</ttcol>

          <c>TBD</c>

          <c>id--rpkiTOA-2025</c>

          <c>draft-qin-sidrops-toa</c>
        </texttable>
      </section>

      <section title="Media Type Registry">
        <t>The IANA is requested to register the media type
        application/rpki-toa in the "Media Type" registry as follows:<figure>
            <artwork><![CDATA[Type name: application
Subtype name: rpki-toa
Required parameters: N/A
Optional parameters: N/A
Encoding considerations: binary
Security considerations: Carries an RPKI TOA. This media type contains no active content. See Section 5 of draft-qin-sidrops-toa for further information.
Interoperability considerations: None
Published specification: draft-qin-sidrops-toa
Applications that use this media type: RPKI operators
Additional information:
  Content: This media type is a signed object, as defined in [RFC6488], which contains a payload of a list of prefixes and an AS identifier as defined in draft-qin-sidrops-toa.
  Magic number(s): None
  File extension(s): .toa
  Macintosh file type code(s): None
Person & email address to contact for further information:
  Lancheng Qin <qinlc@mail.zgclab.edu.cn>
Intended usage: COMMON
Restrictions on usage: None
Change controller: IETF]]></artwork>
          </figure></t>
      </section>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include='reference.RFC.8174'?>

      <?rfc include='reference.RFC.5652'?>

      <?rfc include='reference.RFC.6488'?>

      <?rfc include='reference.RFC.3779'?>

      <?rfc include='reference.RFC.6485'?>

      <?rfc include='reference.RFC.6481'?>

      <?rfc include='reference.RFC.9582'?>

      <reference anchor="X.690">
        <front>
          <title>"Information Technology - ASN.1 encoding rules: pecification
          of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and
          Distinguished Encoding Rules (DER)"</title>

          <author fullname="ITU-T">
            <organization/>
          </author>

          <date year="2021"/>
        </front>
      </reference>
    </references>

    <references title="Informative References">
      <?rfc include='reference.RFC.8704'?>

      <?rfc include='reference.I-D.ietf-savnet-inter-domain-problem-statement'?>
    </references>
  </back>
</rfc>
