RFC 6482

A Profile for Route Origin Authorizations (ROAs)

πŸ“… published February 2012, from ietf

RFC 6482: A Profile for Route Origin Authorizations (ROAs) πŸŽ€

Okay bestie, let's start with the basics πŸ’…. This RFC was written by M. Lepinski, S. Kent, and D. Kong from BBN Technologies. It's a Standards Track document, so it's the real deal ✨. The ISSN is 2070-1721, and it's dated February 2012. The header doesn't say it obsoletes or updates anything, so no drama there 🧚.

Abstract

Here's the vibe πŸ¦‹. This document sets out a standard profile for Route Origin Authorizations (ROAs). A ROA is a digitally signed object that lets someone check whether an IP address block holder has authorized an Autonomous System (AS) to originate routes to one or more prefixes inside that block. Verification, but make it cute πŸ”.

Status of This Memo

This is an Internet Standards Track document 🌸.

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community, and it went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more on Internet Standards, check Section 2 of RFC 5741 🫢.

Information about the current status of this document, any errata, and how to give feedback on it can be found at http://www.rfc-editor.org/info/rfc6482 πŸ’œ.

Copyright (c) 2012 IETF Trust and the persons identified as the document authors. All rights reserved 🌈.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) as they stand on the date this document was published. Please read these carefully, because they spell out your rights and restrictions for this document πŸ“œ. Code Components pulled out of this document must include Simplified BSD License text, as described in Section 4.e of the Trust Legal Provisions, and they come without warranty, as described in the Simplified BSD License πŸ’–.

Table of Contents

1. Introduction ....................................................2
   1.1. Terminology ................................................3
2. The ROA Content-Type ............................................3
3. The ROA eContent ................................................3
   3.1. version ....................................................4
   3.2. asID .......................................................4
   3.3. ipAddrBlocks ...............................................4
4. ROA Validation ..................................................5
5. Security Considerations .........................................5
6. Acknowledgments .................................................6
7. References ......................................................6
   7.1. Normative References .......................................6
   7.2. Informative References .....................................6
 Appendix A: ASN.1  Module..........................................8

1. Introduction ✨

Okay so the main goal of the Resource Public Key Infrastructure (RPKI) is to make routing more secure πŸ”. (See [RFC6480] if you want the full tea.) As part of that system, we need a way for people to check that an AS has been given permission by an IP address block holder to advertise routes to one or more prefixes inside that block. That's the job of a ROA πŸ’….

The ROA uses the template for RPKI digitally signed objects [RFC6488]. That template defines a Cryptographic Message Syntax (CMS) [RFC5652] wrapper for the ROA content, plus a generic validation procedure for RPKI signed objects. So to finish the specification of the ROA (see Section 4 of [RFC6488]), this document defines three things πŸ¦‹:

  1. The OID that identifies the signed object as a ROA. (This OID shows up in the eContentType in the encapContentInfo object, as well as in the content-type signed attribute in the signerInfo object.)
  2. The ASN.1 syntax for the ROA eContent. (This is the payload that says which AS is being authorized to originate routes, plus the prefixes that AS may originate routes to.) The ROA eContent is ASN.1 encoded using the Distinguished Encoding Rules (DER) [X.690] πŸŽ€.
  3. An additional step required to validate ROAs, on top of the validation steps specified in [RFC6488] ⭐.

1.1. Terminology

It's assumed you already know the terms and concepts from "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile" [RFC5280] and "X.509 Extensions for IP Addresses and AS Identifiers" [RFC3779] πŸ“š.

This document also uses the RPKI signed object profile [RFC6488], so you should be familiar with that one too. That profile uses certificates that follow the RPKI Resource Certificate Profile [RFC6487], so you should know that profile as well 🧚.

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 RFC 2119 [RFC2119] πŸ’–.

2. The ROA Content-Type

The content-type for a ROA is called routeOriginAuthz, and its numerical value is 1.2.840.113549.1.9.16.1.24 🌸.

This OID MUST appear both within the eContentType in the encapContentInfo object and as the content-type signed attribute in the signerInfo object (see [RFC6488]). No skipping one of them, bestie πŸ™ˆ.

3. The ROA eContent

The content of a ROA names one single AS that the address space holder has authorized to originate routes, along with a list of one or more IP address prefixes that will be advertised πŸ“. If the address space holder wants to authorize multiple ASes to advertise the same set of prefixes, they issue multiple ROAs, one per AS number. Here's the formal definition πŸ‘‘:

RouteOriginAttestation ::= SEQUENCE {
   version [0] INTEGER DEFAULT 0,
   asID  ASID,
   ipAddrBlocks SEQUENCE (SIZE(1..MAX)) OF ROAIPAddressFamily }

ASID ::= INTEGER

ROAIPAddressFamily ::= SEQUENCE {
   addressFamily OCTET STRING (SIZE (2..3)),
   addresses SEQUENCE (SIZE (1..MAX)) OF ROAIPAddress }

ROAIPAddress ::= SEQUENCE {
   address IPAddress,
   maxLength INTEGER OPTIONAL }

IPAddress ::= BIT STRING

Note that this content shows up as the eContent within the encapContentInfo (see [RFC6488]) 🫢.

3.1. version

The version number of the RouteOriginAttestation MUST be 0 πŸ”’.

3.2. asID

The asID field holds the AS number that's authorized to originate routes to the given IP address prefixes πŸŽ€.

3.3. ipAddrBlocks

The ipAddrBlocks field encodes the set of IP address prefixes that the AS is authorized to originate routes to. Heads up: the syntax here is more restrictive than the one used in the IP address delegation extension from RFC 3779. That extension can represent arbitrary address ranges, but ROAs only need to represent prefixes πŸ¦‹.

Inside the ROAIPAddressFamily structure, addressFamily holds the Address Family Identifier (AFI) of an IP address family. This specification only supports IPv4 and IPv6, so addressFamily MUST be either 0001 or 0002 🌈.

Inside a ROAIPAddress structure, the addresses field represents prefixes as a sequence of type IPAddress (see [RFC3779] for more details). If maxLength is present, it MUST be an integer that is greater than or equal to the length of the accompanying prefix, and less than or equal to the length (in bits) of an IP address in the address family (32 for IPv4 and 128 for IPv6). When it's there, maxLength tells you the longest IP address prefix that the AS is authorized to advertise πŸ“.

Here's an example to make it click ✨. Say the IP address prefix is 203.0.113/24 and the maxLength is 26. Then the AS is authorized to advertise any more specific prefix up to a maximum length of 26. In this example, the AS could advertise 203.0.113/24, 203.0.113.128/25, or 203.0.113.0/25, but NOT 203.0.113.0/27 πŸ™…β€β™€οΈ. When maxLength isn't present, the AS can only advertise the exact prefix written in the ROA πŸ’….

Now, a valid ROA can contain an IP address prefix (inside one ROAIPAddress element) that's covered by another IP address prefix (inside a separate ROAIPAddress element). For example, a ROA might contain the prefix 203.0.113/24 with maxLength 26, plus the prefix 203.0.113.0/28 with maxLength 28. (That ROA would authorize the indicated AS to advertise any prefix starting with 203.0.113 with a minimum length of 24 and a maximum length of 26, plus the specific prefix 203.0.113.0/28.) 🧠 Also, a ROA MAY contain two ROAIPAddress elements where the IP address prefix is identical in both. However, this is NOT RECOMMENDED. In that case, the ROAIPAddress with the shorter maxLength grants no extra privileges to the indicated AS, so it can be left out without changing what the ROA means πŸ™ˆ.

4. ROA Validation

Before a relying party can use a ROA to validate a routing announcement, the relying party MUST validate the ROA first πŸ›‘οΈ. To validate a ROA, the relying party MUST perform all the validation checks specified in [RFC6488], plus the following ROA-specific validation step:

  • The IP address delegation extension [RFC3779] is present in the end-entity (EE) certificate (contained within the ROA), and each IP address prefix(es) in the ROA is contained within the set of IP addresses specified by the EE certificate's IP address delegation extension πŸ’–.

8.1. Normative References πŸ“š

okay so these are the docs this one needs to read first, no cap πŸ’…

  • [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997. πŸŽ€
  • [RFC5652] Housley, R., "Cryptographic Message Syntax (CMS)", STD 70, RFC 5652, September 2009. 🌸
  • [RFC3779] Lynn, C., Kent, S., and K. Seo, "X.509 Extensions for IP Addresses and AS Identifiers", RFC 3779, June 2004. πŸ¦‹
  • [RFC5280] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R., and W. Polk, "Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 5280, May 2008. 🧚
  • [RFC6487] Huston, G., Michaelson, G., and R. Loomans, "A Profile for X.509 PKIX Resource Certificates", RFC 6487, February 2012. ✨
  • [RFC6488] Lepinski, M., Chi, A., and S. Kent, "Signed Object Template for the Resource Public Key Infrastructure (RPKI)", RFC 6488, February 2012. πŸ’œ
  • [X.690] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002, Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER). πŸ”₯

8.2. Informative References 🌈

  • [RFC6480] Lepinski, M. and S. Kent, "An Infrastructure to Support Secure Internet Routing", RFC 6480, February 2012. 🫢

Appendix A: ASN.1 Module πŸ’…

this appendix is normative, which means it's part of the actual spec, not just a nice-to-have πŸ™ˆ it gives you an ASN.1 module that spells out the ROA content in ASN.1 syntax, so you know exactly what bits go where πŸŽ€

RPKI-ROA { iso(1) member-body(2) us(840) rsadsi(113549)
   pkcs(1) pkcs9(9) smime(16) mod(0) 61 }

DEFINITIONS EXPLICIT TAGS ::= BEGIN

RouteOriginAttestation ::= SEQUENCE {
   version [0] INTEGER DEFAULT 0,
   asID  ASID,
   ipAddrBlocks SEQUENCE (SIZE(1..MAX)) OF ROAIPAddressFamily }

ASID ::= INTEGER

ROAIPAddressFamily ::= SEQUENCE {
   addressFamily OCTET STRING (SIZE (2..3)),
   addresses SEQUENCE (SIZE (1..MAX)) OF ROAIPAddress }

ROAIPAddress ::= SEQUENCE {
   address IPAddress,
   maxLength INTEGER OPTIONAL }

IPAddress ::= BIT STRING

END

Authors' Addresses 🌸

the wonderful people who wrote this one, all from BBN Technologies in Cambridge, MA πŸ¦‹

Matt Lepinski
BBN Technologies
10 Moulton Street
Cambridge MA 02138
EMail: mlepinski@bbn.com

Stephen Kent
BBN Technologies
10 Moulton Street
Cambridge MA 02138
EMail: skent@bbn.com

Derrick Kong
BBN Technologies
10 Moulton Street
Cambridge MA 02138
EMail: dkong@bbn.com
πŸ“¦ where this page comes from