O que ela faz
Informe uma rota, um prefixo e o sistema autônomo (AS, Autonomous System) que a origina, e a lista de Validated ROA Payloads (VRPs), os dados que um validador extrai dos Route Origin Authorizations (ROAs), contra a qual você quer conferi-la, e a ferramenta devolve o estado de validação da rota como a RFC 6811 o define: Valid, Invalid ou NotFound. Ela mostra o raciocínio VRP por VRP: quais VRPs cobrem o prefixo da rota, quais desses dão match com ela e por que cada VRP que cobre e não dá match falha. IPv4 e IPv6 são tratados, e o AS pode vir em asplain ou em asdot.
Ela não busca nada. Não há repositório da Resource Public Key Infrastructure (RPKI), validador ou route collector por trás: os VRPs são os que você colou, então a resposta vale para aquela lista e para nenhuma outra. Para conferir uma rota real contra a RPKI real, exporte os VRPs de um validador em que você confia e cole aqui, ou use um serviço público como a consulta de validação RPKI do RIPEstat que o artigo de segurança do BGP mostra.
A entrada
A rota é uma linha: um prefixo e o AS de origem, como 192.0.2.0/24 AS64496, 2001:db8::/32 AS1.0 ou 192.0.2.0/24 64496. A RFC 6811 tira a origem do AS mais à direita do AS_PATH quando o caminho termina num AS_SEQUENCE, usa o próprio AS do roteador quando o caminho está vazio ou termina num segmento de confederação, e usa o valor especial NONE nos outros casos; escreva NONE para esse caso (RFC 6811, seção 2). Uma rota com origem AS 0 é recusada: a RFC 7607 diz que esse UPDATE "MUST be considered as malformed", deve ser tratado como malformado, e que um BGP speaker "MUST NOT originate or propagate a route with an AS number of zero", não pode originar nem propagar a rota (RFC 7607, seção 2), então ela nunca chega à validação.
Os VRPs vêm um por linha: um prefixo, um maxLength opcional e o AS, separados por espaços, tabs ou vírgulas, como em 192.0.2.0/24 24 AS64496. O maxLength também pode vir colado ao prefixo depois de um hífen, 203.0.113.0/24-26, do jeito que a RFC 9319 escreve um ROA (RFC 9319, seção 3), e AS 64496 com espaço é lido como um AS só. Quando o AS vem com o prefixo AS, ele pode ficar em qualquer posição da linha, então AS64496,192.0.2.0/24,24 também funciona. Um # começa um comentário, e linhas em branco são ignoradas. Uma linha sem maxLength autoriza só o prefixo exato: "When the maxLength element is not present, the AS is only authorized to advertise the exact prefix", sem maxLength vale só o prefixo exato (RFC 9582, seção 4.3.2.2). Um maxLength menor que o prefixo, ou maior que 32 em IPv4 ou 128 em IPv6, é recusado, porque a mesma seção diz que ele "MUST be", precisa estar, dentro dessa faixa. Prefixos com bits ligados além do tamanho (192.0.2.1/24) são recusados, com o endereço de rede que provavelmente se quis dizer. VRPs idênticos contam uma vez só.
Você também pode colar um arquivo de Simplified Local Internet Number Resource Management with the RPKI (SLURM): o arquivo inteiro, um objeto com prefixAssertions ou o próprio array. Cada assertion traz prefix e asn e pode trazer maxPrefixLength e comment (RFC 8416, seção 3.4.1); qualquer outro membro é recusado, já que "JSON members that are not defined here MUST NOT be used in SLURM files", membros não definidos não podem ser usados (seção 3.1). Os prefixFilters de um arquivo são contados e não aplicados: eles removem VRPs vindos da validação RPKI, e "Locally Added Assertions MUST NOT be removed by output filtering", as assertions locais nunca saem pelos filtros (seção 3.2).
Como o estado é decidido
A ferramenta aplica as definições da RFC 6811 ao pé da letra. Um VRP cobre uma rota quando "the VRP prefix length is less than or equal to the Route prefix length, and the VRP prefix address and the Route prefix address are identical for all bits specified by the VRP prefix length", o prefixo do VRP não é mais longo e os bits coincidem. Ele dá match quando "the Route Prefix is Covered by that VRP, the Route prefix length is less than or equal to the VRP maximum length, and the Route Origin ASN is equal to the VRP ASN", cobre, respeita o maxLength e tem o mesmo AS. Daí: "NotFound: No VRP Covers the Route Prefix.", "Valid: At least one VRP Matches the Route Prefix." e "Invalid: At least one VRP Covers the Route Prefix, but no VRP Matches it.", os três estados (RFC 6811, seção 2). Um match basta, diga o que disserem os outros VRPs, e a ordem da lista não importa.
Cada VRP da tabela recebe um destes resultados: Match; Outro AS (cobre e traz um AS diferente); Específico demais (cobre, e a rota é mais longa que o maxLength); os dois ao mesmo tempo; AS 0; Origem NONE; Não cobre; e Outra família, para um VRP IPv4 contra uma rota IPv6 ou o contrário. Um match cujo prefixo de VRP é mais curto que a rota aparece marcado como feito pela faixa de maxLength.
AS 0
Um VRP com AS 0 cobre como qualquer outro, mas nunca dá match: "no Route can be Matched by a VRP whose ASN is zero", nenhuma rota dá match com AS 0 (RFC 6811, seção 2). É assim que um titular renega um bloco: um ROA de AS 0 diz que "the prefix described in the ROA, and any more specific prefix, should not be used in a routing context", nem o prefixo nem os mais específicos devem ser roteados (RFC 6483, seção 4). Quando só VRPs de AS 0 cobrem a rota, a ferramenta avisa. Quando outro VRP também dá match, a rota é Valid, porque um ROA de AS 0 "has a lower relative preference than any other ROA that has a routable AS as its subject", tem preferência menor que qualquer ROA com AS roteável (mesma seção). O maxLength de um VRP de AS 0 não muda o resultado, como a RFC 6483 observa, então a ferramenta deixa os VRPs de AS 0 fora das observações de maxLength.
maxLength e a RFC 9319
Todo VRP cujo maxLength é mais longo que o prefixo ganha uma observação com o número de prefixos que ele autoriza, que é 2 elevado a (maxLength menos tamanho mais 1), menos 1: um /24 com maxLength 26 autoriza 7, o /24, dois /25 e quatro /26, que é o próprio exemplo da RFC 9582 (RFC 9582, seção 4.3.2.2). A RFC 9319 pede que os operadores publiquem ROAs mínimos e diz que eles "SHOULD avoid using the maxLength attribute in their ROAs, since its inclusion will usually make the ROA non-minimal", devem evitar o maxLength (RFC 9319, seção 5); ela explica que os prefixos que um ROA autoriza e que o AS não anuncia ficam vulneráveis ao que o documento chama de forged-origin sub-prefix hijack (Abstract e seção 3). A observação mostra a faixa. Se cada prefixo dela é de fato anunciado, só o operador sabe dizer.
O que ela não faz
Ela não valida ROAs nem certificados: VRPs são, por definição, o que um validador produziu depois desse trabalho (RFC 6811, seção 2). Ela não aplica política: o que um roteador faz com uma rota Invalid é configuração do operador, e "An implementation MUST NOT exclude a route from the Adj-RIB-In or from consideration in the decision process as a side effect of its validation state, unless explicitly configured to do so", o estado sozinho não tira rota nenhuma (mesma seção). E ela confere só a origem: "the complete path attestation against the AS_PATH attribute of a route is outside the scope", o caminho inteiro fica de fora da validação de origem (seção 1).
Exemplos resolvidos
Com o VRP único 192.0.2.0/24 24 AS64496: 192.0.2.0/24 AS64496 é Valid; 192.0.2.0/24 AS64497 é Invalid (outro AS); 192.0.2.128/25 AS64496 é Invalid (específico demais); 198.51.100.0/24 AS64497 é NotFound; 192.0.2.0/24 NONE é Invalid. Com 192.0.2.0/24 AS64496 e 192.0.2.0/24 AS64497 na lista, 192.0.2.0/24 AS64497 é Valid. Só com 203.0.113.0/24 32 AS0, 203.0.113.0/24 AS64496 é Invalid; acrescente 203.0.113.128/25 AS64497 e a rota 203.0.113.128/25 AS64497 fica Valid. Com o 203.0.113.0/24 26 AS64496 da RFC 9582, o /24, 203.0.113.128/25 e 203.0.113.192/26 são Valid e 203.0.113.0/27 é Invalid. O ROA do Apêndice A da RFC 9582, AS 65536 para 2001:db8::/32, deixa 2001:db8::/32 AS65536 (em asdot, AS1.0) Valid e 2001:db8:1::/48 AS65536 Invalid. Todos esses casos são golden vectors.
API
O mesmo motor responde à operação /api/v1/rpki-origin-validation da API HTTP do site, descrita campo a campo no contrato OpenAPI da página da API, com exemplos tirados dos golden vectors. O contrato também diz se este site está servindo a API.
- Requisição. Um objeto JSON com
route(a linha da rota) evrps(a lista de VRPs como texto, um por linha, ou o JSON de um SLURM como texto ou como valor JSON), como{"route":"192.0.2.0/24 AS64497","vrps":"192.0.2.0/24 AS64496\n192.0.2.0/24 AS64497"}. - Resposta.
route(prefix,family,length,origineoriginAsdot),state,vrpFormat,vrpCount,covering,matching,vrps(cada um comindex,line,prefix,length,maxLength,maxLengthGiven,asn,covers,relatione, num match,viaMaxLength),maxLengthNotes(cada uma comauthorisedPrefixescomo string decimal),notes,duplicatesRemovedeslurmFiltersIgnored. Para a requisição acima, a API respondestateValid,covering2 ematching1, com as relaçõeswrong-asematch. - Erros. HTTP 400,
invalid_input, com a mensagem do motor, por exemplomaxLength 23 must be between the prefix length /24 and 32 (RFC 9582 section 4.3.2.2)para o VRP192.0.2.0/24 23 AS64496.
Fontes
- RFC 6811, BGP Prefix Origin Validation, janeiro de 2013 (lida em 2026-10-19): seções 1 e 2
- RFC 9582, A Profile for Route Origin Authorizations (ROAs), maio de 2024 (lida em 2026-10-19): seção 4.3.2.2 e Apêndice A; ela torna obsoleta a RFC 6482
- RFC 6483, Validation of Route Origination Using the Resource Certificate Public Key Infrastructure (PKI) and Route Origin Authorizations (ROAs), fevereiro de 2012 (lida em 2026-10-19): seção 4
- RFC 7607, Codification of AS 0 Processing, agosto de 2015 (lida em 2026-10-19): seção 2
- RFC 9319, The Use of maxLength in the Resource Public Key Infrastructure (RPKI), outubro de 2022 (lida em 2026-10-19): Abstract e seções 3 e 5
- RFC 8416, Simplified Local Internet Number Resource Management with the RPKI (SLURM), agosto de 2018 (lida em 2026-10-19): seções 3.1, 3.2 e 3.4.1
- RFC 5396, Textual Representation of Autonomous System (AS) Numbers, dezembro de 2008 (lida em 2026-10-19): seção 2
- RFC 5398, Autonomous System (AS) Number Reservation for Documentation Use, dezembro de 2008 (lida em 2026-10-19): seção 4, com a RFC 5737, seção 3, e a RFC 3849 para os endereços de documentação