InternetEngineeringTaskForce(IETF)R.BushRequestforComments:8210InternetInitiativeJapanUpdates:6810R.AusteinCategory:StandardsTrackDragonResearchLabsISSN:2070-1721September2017InternetEngineeringTaskForce(IETF)R.BushRequestforComments:8210InternetInitiativeJapanUpdates:6810R.AusteinCategory:StandardsTrackDragonResearchLabsISSN:2070-1721September2017TheResourcePublicKeyInfrastructure(RPKI)toRouterProtocol,Version1
资源公钥基础设施(RPKI)到路由器协议,版本1
Abstract
摘要
InordertoverifiablyvalidatetheoriginAutonomousSystemsandAutonomousSystemPathsofBGPannouncements,routersneedasimplebutreliablemechanismtoreceiveResourcePublicKeyInfrastructure(RFC6480)prefixorigindataandrouterkeysfromatrustedcache.Thisdocumentdescribesaprotocoltodeliverthem.
为了可验证地验证BGP公告的源自治系统和自治系统路径,路由器需要一种简单但可靠的机制来从可信缓存接收资源公钥基础设施(RFC6480)前缀源数据和路由器密钥。本文档描述了交付它们的协议。
Thisdocumentdescribesversion1oftheRPKI-Routerprotocol.RFC6810describesversion0.ThisdocumentupdatesRFC6810.
本文档介绍RPKI路由器协议的版本1。RFC6810描述了版本0。本文档更新了RFC6810。
StatusofThisMemo
关于下段备忘
ThisisanInternetStandardsTrackdocument.
这是一份互联网标准跟踪文件。
ThisdocumentisaproductoftheInternetEngineeringTaskForce(IETF).ItrepresentstheconsensusoftheIETFcommunity.IthasreceivedpublicreviewandhasbeenapprovedforpublicationbytheInternetEngineeringSteeringGroup(IESG).FurtherinformationonInternetStandardsisavailableinSection2ofRFC7841.
本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经接受了公众审查,并已被互联网工程指导小组(IESG)批准出版。有关互联网标准的更多信息,请参见RFC7841第2节。
TableofContents
目录
为了以可验证的方式验证原始自治系统(ASes)和BGP公告的路径,路由器需要一种简单但可靠的机制来从可信缓存接收加密验证的资源公钥基础设施(RPKI)[RFC6480]前缀原始数据和路由器密钥。本文档描述了交付它们的协议。该设计被有意限制为可用于当前大多数ISP路由器平台。
Thisdocumentupdates[RFC6810].
本文件更新了[RFC6810]。
Section3describesthedeploymentstructure,andSection4thenpresentsanoperationaloverview.ThebinarypayloadsoftheprotocolareformallydescribedinSection5,andtheexpectedProtocolDataUnit(PDU)sequencesaredescribedinSection8.ThetransportprotocoloptionsaredescribedinSection9.Section10detailshowroutersandcachesareconfiguredtoconnectandauthenticate.Section11describeslikelydeploymentscenarios.ThetraditionalsecurityandIANAconsiderationsendthedocument.
第3节介绍了部署结构,第4节介绍了操作概述。第5节正式描述了协议的二进制有效载荷,第8节描述了预期的协议数据单元(PDU)序列。第9节介绍了传输协议选项。第10节详细介绍了如何配置路由器和缓存以进行连接和身份验证。第11节描述了可能的部署场景。传统的安全和IANA考虑结束了文档。
TheprotocolisextensibleinordertosupportnewPDUswithnewsemantics,ifdeploymentexperienceindicatesthattheyareneeded.PDUsareversionedshoulddeploymentexperiencecallforchange.
如果部署经验表明需要新的PDU,则该协议是可扩展的,以支持具有新语义的新PDU。如果部署经验需要更改,PDU将进行版本控制。
本文件中的关键词“必须”、“不得”、“必需”、“应”、“不应”、“建议”、“不建议”、“可”和“可选”在所有大写字母出现时(如图所示)应按照BCP14[RFC2119][RFC8174]所述进行解释。
Thissectionsummarizesthesignificantchangesbetween[RFC6810]andtheprotocoldescribedinthisdocument.
本节总结了[RFC6810]与本文件所述协议之间的重大变化。
oNewRouterKeyPDUtype(Section5.10)added.
o增加了新的路由器密钥PDU类型(第5.10节)。
oExplicittimingparameters(Section5.8,Section6)added.
o增加了明确的定时参数(第5.8节,第6节)。
oProtocolversionnumberincrementedfrom0(zero)to1(one).
o协议版本号从0(零)增加到1(一)。
oProtocolversionnumbernegotiation(Section7)added.
o增加协议版本号协商(第7节)。
Thefollowingtermsareusedwithspecialmeaning.
下列术语具有特殊含义。
GlobalRPKI:TheauthoritativedataoftheRPKIarepublishedinadistributedsetofserversattheIANA,RegionalInternetRegistries(RIRs),NationalInternetRegistries(NIRs),andISPs;see[RFC6481].
全球RPKI:RPKI的权威数据发布在IANA、区域互联网注册中心(RIR)、国家互联网注册中心(NIR)和ISP的分布式服务器集中;见[RFC6481]。
Cache:AcacheisacoalescedcopyofthepublishedGlobalRPKIdata,periodicallyfetchedorrefreshed,directlyorindirectly,usingthersyncprotocol[RFC5781]orsomesuccessor.RelyingPartysoftwareisusedtogatherandvalidatethedistributeddataoftheRPKIintoacache.TrustingthiscachefurtherisamatterbetweentheproviderofthecacheandaRelyingParty.
缓存:缓存是已发布的全局RPKI数据的合并副本,使用rsync协议[RFC5781]或某些后续协议直接或间接地定期获取或刷新。依赖方软件用于将RPKI的分布式数据收集并验证到缓存中。进一步信任此缓存是缓存提供者和依赖方之间的问题。
SessionID:Whenacacheserverisstarted,itgeneratesaSessionIDtouniquelyidentifytheinstanceofthecacheandtobindittothesequenceofSerialNumbersthatcacheinstancewillgenerate.ThisallowstheroutertorestartafailedsessionknowingthattheSerialNumberitisusingiscommensuratewiththatofthecache.
会话ID:启动缓存服务器时,它会生成一个会话ID,以唯一标识缓存实例,并将其绑定到缓存实例将生成的序列号序列。这允许路由器在知道其使用的序列号与缓存的序列号相称的情况下重新启动失败的会话。
PayloadPDU:ApayloadPDUisaprotocolmessagewhichcontainsdataforusebytherouter,asopposedtoaPDUwhichconveysthecontrolmechanismsofthisprotocol.PrefixesandRouterKeysareexamplesofpayloadPDUs.
有效负载PDU:有效负载PDU是一种协议消息,它包含路由器使用的数据,而不是传递此协议控制机制的PDU。前缀和路由器密钥是有效负载PDU的示例。
DeploymentoftheRPKItoreachroutershasathree-levelstructureasfollows:
将RPKI部署到reach路由器具有如下三级结构:
GlobalRPKI:TheauthoritativedataoftheRPKIarepublishedinadistributedsetofserversattheIANA,RIRs,NIRs,andISPs(see[RFC6481]).
全球RPKI:RPKI的权威数据发布在IANA、RIRs、NIRs和ISP的分布式服务器集中(见[RFC6481])。
LocalCaches:LocalcachesarealocalsetofoneormorecollectedandverifiedcachesofRPKIdata.ARelyingParty,e.g.,routerorotherclient,MUSThaveatrustrelationshipwith,andatrustedtransportchannelto,anycache(s)ituses.
本地缓存:本地缓存是由一个或多个收集和验证的RPKI数据缓存组成的本地集。依赖方(例如路由器或其他客户端)必须与所使用的任何缓存建立信任关系,并具有可信的传输通道。
Routers:Arouterfetchesdatafromalocalcacheusingtheprotocoldescribedinthisdocument.Itissaidtobeaclientofthecache.ThereMAYbemechanismsfortheroutertoassureitselfoftheauthenticityofthecacheandtoauthenticateitselftothecache(seeSection9).
路由器:路由器使用本文档中描述的协议从本地缓存获取数据。据说它是缓存的客户端。路由器可能有机制来确保缓存的真实性,并向缓存验证自身(参见第9节)。
Arouterestablishesandkeepsopenaconnectiontooneormorecacheswithwhichithasclient/serverrelationships.Itisconfiguredwithasemi-orderedlistofcachesandestablishesaconnectiontothemostpreferredcache,orsetofcaches,whichaccepttheconnections.
路由器建立并保持与一个或多个具有客户机/服务器关系的缓存的连接。它配置了一个半有序的缓存列表,并建立到最首选缓存或一组缓存的连接,这些缓存接受连接。
TherouterMUSTchoosethemostpreferred,byconfiguration,cacheorsetofcachessothattheoperatormaycontrolloadontheircachesandtheGlobalRPKI.
路由器必须根据配置选择最首选的缓存或缓存集,以便操作员可以控制其缓存和全局RPKI的负载。
路由器以串行查询的形式周期性地向缓存发送其已从该缓存接收数据的最新序列号,即路由器的当前序列号。当路由器使用缓存建立新会话或希望重置当前关系时,它会发送重置查询。
缓存使用自给定序列号以来发生的所有数据更改响应串行查询。这可能是空集,在这种情况下,仍然发送数据结束PDU(第5.8节)。注意,用于确定“自给定序列号”的序列号比较必须考虑环绕;见[RFC1982]。
Whentherouterhasreceivedalldatarecordsfromthecache,itsetsitscurrentSerialNumbertothatoftheSerialNumberinthereceivedEndofDataPDU.
当路由器从缓存中接收到所有数据记录时,它将其当前序列号设置为数据PDU接收端的序列号。
Whenthecacheupdatesitsdatabase,itsendsaNotifyPDUtoeverycurrentlyconnectedrouter.Thisisahintthatnowwouldbeagoodtimefortheroutertopollforanupdate,butitisonlyahint.Theprotocolrequirestheroutertopollforupdatesperiodicallyinanycase.
当缓存更新其数据库时,它会向每个当前连接的路由器发送一个NotifyPDU。这是一个提示,现在是路由器轮询更新的好时机,但这只是一个提示。协议要求路由器在任何情况下定期轮询更新。
Strictlyspeaking,aroutercouldtrackacachesimplybyaskingforacompletedataseteverytimeitupdates,butthiswouldbeveryinefficient.TheSerial-Number-basedincrementalupdatemechanism
严格地说,路由器只需在每次更新时请求一个完整的数据集就可以跟踪缓存,但这将是非常低效的。基于序列号的增量更新机制
allowsanefficienttransferofjustthedatarecordswhichhavechangedsincethelastupdate.Aswithanyupdateprotocolbasedonincrementaltransfers,theroutermustbepreparedtofallbacktoafulltransferifforanyreasonthecacheisunabletoprovidethenecessaryincrementaldata.Unlikesomeincrementaltransferprotocols,thisprotocolrequirestheroutertomakeanexplicitrequesttostartthefallbackprocess;thisisdeliberate,asthecachehasnowayofknowingwhethertherouterhasalsoestablishedsessionswithothercachesthatmaybeabletoprovidebetterservice.
仅允许有效传输自上次更新以来已更改的数据记录。与任何基于增量传输的更新协议一样,如果缓存因任何原因无法提供必要的增量数据,路由器必须准备好退回到完全传输。与某些增量传输协议不同,该协议要求路由器发出显式请求以启动回退过程;这是故意的,因为缓存无法知道路由器是否也与其他缓存建立了会话,这些缓存可能能够提供更好的服务。
TheexchangesbetweenthecacheandtherouteraresequencesofexchangesofthefollowingPDUsaccordingtotherulesdescribedinSection8.
根据第8节中描述的规则,高速缓存和路由器之间的交换是以下PDU的交换序列。
保留字段(在PDU图表中标记为“零”)在传输时必须为零,在接收时必须忽略。
PDUscontainthefollowingdataelements:
PDU包含以下数据元素:
ProtocolVersion:An8-bitunsignedinteger,currently1,denotingtheversionofthisprotocol.
协议版本:一个8位无符号整数,当前为1,表示此协议的版本。
PDUType:An8-bitunsignedinteger,denotingthetypeofthePDU,e.g.,IPv4Prefix.
PDU类型:一个8位无符号整数,表示PDU的类型,例如IPv4前缀。
SerialNumber:TheSerialNumberoftheRPKIcachewhenthissetofPDUswasreceivedfromanupstreamcacheserverorgatheredfromtheGlobalRPKI.AcacheincrementsitsSerialNumberwhencompletingarigorouslyvalidatedupdatefromaparentcacheortheGlobalRPKI.
序列号:从上游缓存服务器接收此PDU集或从全局RPKI收集此PDU集时,RPKI缓存的序列号。从父缓存或全局RPKI完成严格验证的更新时,缓存会增加其序列号。
SessionID:A16-bitunsignedinteger.Whenacacheserverisstarted,itgeneratesaSessionIDtoidentifytheinstanceofthecacheandtobindittothesequenceofSerialNumbersthatcacheinstancewillgenerate.ThisallowstheroutertorestartafailedsessionknowingthattheSerialNumberitisusingiscommensuratewiththatofthecache.If,atanytimeaftertheprotocolversionhasbeennegotiated(Section7),eithertherouterorthecachefindsthatthevalueoftheSessionIDisnot
会话ID:一个16位无符号整数。当启动缓存服务器时,它会生成一个会话ID来标识缓存实例,并将其绑定到缓存实例将生成的序列号序列。这允许路由器在知道其使用的序列号与缓存的序列号相称的情况下重新启动失败的会话。如果在协议版本协商后的任何时候(第7节),路由器或缓存发现会话ID的值不正确
与另一方一样,检测到不匹配的一方必须立即终止会话,并使用代码为0的错误报告PDU(“损坏数据”),路由器必须刷新从该缓存中获取的所有数据。
Notethatsessionsarespecifictoaparticularprotocolversion.Thatis,ifacacheserversupportsmultipleversionsofthisprotocol,happenstousethesameSessionIDvalueformultipleprotocolversions,andfurtherhappenstousethesameSerialNumbervaluesfortwoormoresessionsusingthesameSessionIDbutdifferentProtocolVersionvalues,theSerialNumbersarenotcommensurate.ThefulltestforwhetherSerialNumbersarecommensuraterequirescomparingProtocolVersion,SessionID,andSerialNumber.Toreducetheriskofconfusion,cacheserversSHOULDNOTusethesameSessionIDacrossmultipleprotocolversions,buteveniftheydo,routersMUSTtreatsessionswithdifferentProtocolVersionfieldsasseparatesessionseveniftheydohappentohavethesameSessionID.
请注意,会话特定于特定的协议版本。也就是说,如果缓存服务器支持此协议的多个版本,恰好对多个协议版本使用相同的会话ID值,并且恰好对使用相同会话ID但不同协议版本值的两个或多个会话使用相同的序列号值,则序列号是不相称的。序列号是否相称的完整测试需要比较协议版本、会话ID和序列号。为了减少混淆的风险,缓存服务器不应在多个协议版本中使用相同的会话ID,但即使它们使用相同的会话ID,路由器也必须将具有不同协议版本字段的会话视为单独的会话,即使它们恰好具有相同的会话ID。
UsingpersistentstoragefortheSessionIDoraclock-basedschemeforgeneratingSessionIDsshouldavoidtheriskofSessionIDcollisions.
使用会话ID的持久存储或基于时钟的方案生成会话ID应该避免会话ID冲突的风险。
TheSessionIDmightbeapseudorandomvalue,astrictlyincreasingvalueifthecachehasreliablestorage,etcetera.Aseconds-since-epochtimestampvaluesuchasthePOSIXtime()functionmakesagoodSessionIDvalue.
Length:A32-bitunsignedintegerwhichhasasitsvaluethecountofthebytesintheentirePDU,includingthe8bytesofheaderwhichincludesthelengthfield.
长度:一个32位无符号整数,其值为整个PDU中的字节数,包括包含长度字段的8字节头。
Flags:Thelowest-orderbitoftheFlagsfieldis1foranannouncementand0forawithdrawal.ForaPrefixPDU(IPv4orIPv6),theflagindicateswhetherthisPDUannouncesanewrighttoannouncetheprefixorwithdrawsapreviouslyannouncedright;awithdraweffectivelydeletesonepreviouslyannouncedPrefixPDUwiththeexactsamePrefix,Length,Max-Len,andAutonomousSystemNumber(ASN).Similarly,foraRouterKeyPDU,theflagindicateswhetherthisPDUannouncesanewRouterKeyordeletesonepreviouslyannouncedRouterKeyPDUwiththeexactsameASNumber,subjectKeyIdentifier,andsubjectPublicKeyInfo.
标志:标志字段的最低顺序位为1表示公告,0表示撤回。对于前缀PDU(IPv4或IPv6),该标志指示该PDU是宣布新的前缀权利还是撤销先前宣布的权利;撤回有效地删除了一个先前公布的前缀PDU,该前缀具有完全相同的前缀、长度、最大长度和自治系统编号(ASN)。类似地,对于路由器密钥PDU,该标志指示该PDU是宣布一个新的路由器密钥,还是删除一个先前宣布的与Number、subjectKeyIdentifier和subjectPublicKeyInfo完全相同的路由器密钥PDU。
TheremainingbitsintheFlagsfieldarereservedforfutureuse.Inprotocolversion1,theyMUSTbezeroontransmissionandMUSTbeignoredonreceipt.
标志字段中的剩余位保留供将来使用。在协议版本1中,它们在传输时必须为零,在接收时必须忽略。
PrefixLength:An8-bitunsignedintegerdenotingtheshortestprefixallowedbythePrefixelement.
前缀长度:8位无符号整数,表示前缀元素允许的最短前缀。
MaxLength:An8-bitunsignedintegerdenotingthelongestprefixallowedbythePrefixelement.ThisMUSTNOTbelessthanthePrefixLengthelement.
最大长度:一个8位无符号整数,表示prefix元素允许的最长前缀。这不能小于前缀长度元素。
Prefix:TheIPv4orIPv6prefixoftheROA.
前缀:ROA的IPv4或IPv6前缀。
AutonomousSystemNumber:A32-bitunsignedintegerrepresentinganASNallowedtoannounceaprefixorassociatedwitharouterkey.
自治系统号:一个32位无符号整数,表示允许宣布前缀或与路由器密钥关联的ASN。
SubjectKeyIdentifier:20-octetSubjectKeyIdentifier(SKI)valueofarouterkey,asdescribedin[RFC6487].
主题密钥标识符:路由器密钥的20个八位组主题密钥标识符(SKI)值,如[RFC6487]所述。
Subject公钥信息:路由器密钥的subjectPublicKeyInfo值,如[RFC8208]中所述。这是subjectPublicKeyInfo的完整ASN.1顺序编码,包括subjectPublicKeyInfo序列的ASN.1标记和长度值。
RefreshInterval:Intervalbetweennormalcachepolls.SeeSection6.
刷新间隔:正常缓存轮询之间的间隔。见第6节。
RetryInterval:Intervalbetweencachepollretriesafterafailedcachepoll.SeeSection6.
重试间隔:缓存轮询失败后,缓存轮询重试之间的间隔。见第6节。
ExpireInterval:Intervalduringwhichdatafetchedfromacacheremainsvalidintheabsenceofasuccessfulsubsequentcachepoll.SeeSection6.
Thecachenotifiestherouterthatthecachehasnewdata.
缓存通知路由器缓存有新数据。
TheSessionIDreassurestherouterthattheSerialNumbersarecommensurate,i.e.,thecachesessionhasnotbeenchanged.
会话ID向路由器保证序列号是相称的,即缓存会话没有更改。
UponreceiptofaSerialNotifyPDU,therouterMAYissueanimmediateSerialQuery(Section5.3)orResetQuery(Section5.4)withoutwaitingfortheRefreshIntervaltimer(seeSection6)toexpire.
收到串行通知PDU后,路由器可立即发出串行查询(第5.3节)或重置查询(第5.4节),而无需等待刷新间隔计时器(见第6节)过期。
SerialNotifyistheonlymessagethatthecachecansendthatisnotinresponsetoamessagefromtherouter.
串行通知是缓存可以发送的唯一一条不响应路由器消息的消息。
IftherouterreceivesaSerialNotifyPDUduringtheinitialstartupperiodwheretherouterandcachearestillnegotiatingtoagreeonaprotocolversion,therouterMUSTsimplyignoretheSerialNotifyPDU,eveniftheSerialNotifyPDUisforanunexpectedprotocolversion.SeeSection7fordetails.
如果路由器在初始启动期间收到串行通知PDU,其中路由器和缓存仍在协商协议版本,则路由器必须忽略串行通知PDU,即使串行通知PDU用于意外的协议版本。详见第7节。
路由器发送一个串行查询,向缓存请求自串行查询中指定的序列号之后发生的所有通知和取款。
ThecacherepliestothisquerywithaCacheResponsePDU(Section5.5)ifthecachehasa(possiblynull)recordofthechangessincetheSerialNumberspecifiedbytherouter,followedbyzeroormorepayloadPDUsandanEndOfDataPDU(Section5.8).
如果缓存具有自路由器指定的序列号以来的更改记录(可能为空),则缓存使用缓存响应PDU(第5.5节)响应此查询,然后是零个或多个有效负载PDU和数据结束PDU(第5.8节)。
当响应串行查询时,缓存必须返回使路由器与缓存同步所需的最小更改集。也就是说,如果特定前缀或路由器密钥在路由器指定的序列号和缓存的当前序列号之间经历了多次更改,则缓存必须合并这些更改,以向路由器提供这些更改的最简单视图。通常,这意味着,对于任何特定前缀或路由器密钥,数据流将包括最多一次撤销,然后最多一次公告,并且如果所有更改都取消,则数据流将根本不提及前缀或路由器密钥。
这种方法的基本原理是,RPKI路由器协议的全部目的是将工作从路由器转移到缓存,因此,缓存的工作应该是简化更改集,从而减少路由器的工作。
Ifthecachedoesnothavethedataneededtoupdatetherouter,perhapsbecauseitsrecordsdonotgobacktotheSerialNumberintheSerialQuery,thenitrespondswithaCacheResetPDU(Section5.9).
如果缓存没有更新路由器所需的数据,可能是因为其记录没有返回到串行查询中的序列号,那么它会使用缓存重置PDU(第5.9节)进行响应。
TheSessionIDtellsthecachewhatinstancetherouterexpectstoensurethattheSerialNumbersarecommensurate,i.e.,thecachesessionhasnotbeenchanged.
会话ID告诉缓存路由器希望哪个实例确保序列号相称,即缓存会话未更改。
路由器告诉缓存它想要接收全部活动的、当前的、未撤消的数据库。缓存使用缓存响应PDU(第5.5节)进行响应,然后是零个或多个有效负载PDU和数据结束PDU(第5.8节)。
缓存使用零个或多个有效负载PDU响应查询。当响应串行查询(第5.3节)时,缓存发送自客户端路由器发送序列号以来发生的一组通知和取款。当回复重置查询(第5.4节)时,缓存发送其拥有的所有数据记录集;在这种情况下,有效负载PDU中的撤回/宣布字段必须具有值1(宣布)。
InresponsetoaResetQuery,thenewvalueoftheSessionIDtellstheroutertheinstanceofthecachesessionforfutureconfirmation.InresponsetoaSerialQuery,theSessionIDbeingthesamereassurestherouterthattheSerialNumbersarecommensurate,i.e.,thecachesessionhasnotbeenchanged.
作为对重置查询的响应,会话ID的新值告诉路由器缓存会话的实例,以供将来确认。作为对串行查询的响应,相同的会话ID向路由器保证序列号是相称的,即高速缓存会话没有改变。
标志字段的最低顺序位为1表示公告,0表示撤回。
IntheRPKI,nothingpreventsasigningcertificatefromissuingtwoidenticalROAs.Inthiscase,therewouldbenosemanticdifferencebetweentheobjects,merelyaprocessredundancy.
在RPKI中,没有任何东西可以阻止签名证书颁发两个相同的ROA。在这种情况下,对象之间没有语义差异,只是一个过程冗余。
IntheRPKI,thereisalsoanactualneedforwhatmightappeartoarouterasidenticalIPvXPDUs.Thiscanoccurwhenanupstreamcertificateisbeingreissuedorthereisanaddressownershiptransferupthevalidationchain.TheROAwouldbeidenticalintheroutersense,i.e.,havethesame{Prefix,Len,Max-Len,ASN},butitwouldhaveadifferentvalidationpathintheRPKI.ThisisimportanttotheRPKIbutnottotherouter.
在RPKI中,还需要一个路由器可能认为相同的IPvXPDU。当重新颁发上游证书或验证链上存在地址所有权转移时,可能会发生这种情况。ROA在路由器意义上是相同的,即具有相同的{Prefix,Len,MaxLen,ASN},但在RPKI中具有不同的验证路径。这对RPKI很重要,但对路由器不重要。
ThecacheserverMUSTensurethatithastoldtherouterclienttohaveoneandonlyoneIPvXPDUforaunique{Prefix,Len,Max-Len,ASN}atanyonepointintime.ShouldtherouterclientreceiveanIPvXPDUwitha{Prefix,Len,Max-Len,ASN}identicaltooneitalreadyhasactive,itSHOULDraiseaDuplicateAnnouncementReceivederror.
与IPv4前缀PDU类似,它多了96位,没有魔力。
Thecachetellstherouterithasnomoredatafortherequest.
缓存告诉路由器它没有更多的请求数据。
TheSessionIDandProtocolVersionMUSTbethesameasthatofthecorrespondingCacheResponsewhichbeganthe(possiblynull)sequenceofpayloadPDUs.
会话ID和协议版本必须与启动有效负载PDU序列(可能为空)的相应缓存响应的会话ID和协议版本相同。
ThecachemayrespondtoaSerialQueryinformingtherouterthatthecachecannotprovideanincrementalupdatestartingfromtheSerialNumberspecifiedbytherouter.TheroutermustdecidewhethertoissueaResetQueryorswitchtoadifferentcache.
高速缓存可以响应串行查询,通知路由器高速缓存不能提供从路由器指定的序列号开始的增量更新。路由器必须决定是发出重置查询还是切换到其他缓存。
ThecacheserverMUSTensurethatithastoldtherouterclienttohaveoneandonlyoneRouterKeyPDUforaunique{SKI,ASN,SubjectPublicKey}atanyonepointintime.ShouldtherouterclientreceiveaRouterKeyPDUwitha{SKI,ASN,SubjectPublicKey}identicaltooneitalreadyhasactive,itSHOULDraiseaDuplicateAnnouncementReceivederror.
NotethataparticularASNmayappearinmultipleRouterKeyPDUswithdifferentSubjectPublicKeyvalues,whileaparticularSubjectPublicKeyvaluemayappearinmultipleRouterKeyPDUswithdifferentASNs.Intheinterestofkeepingtheannouncementandwithdrawalsemanticsassimpleaspossiblefortherouter,thisprotocolmakesnoattempttocompresseitherofthesecases.
注意,特定ASN可能出现在具有不同主题公钥值的多个路由器密钥pdu中,而特定主题公钥值可能出现在具有不同ASN的多个路由器密钥pdu中。为了使路由器的公告和撤回语义尽可能简单,该协议不试图压缩这两种情况。
Alsonotethatitispossible,albeitveryunlikely,formultipledistinctSubjectPublicKeyvaluestohashtothesameSKI.Forthisreason,implementationsMUSTcompareSubjectPublicKeyvaluesaswellasSKIswhendetectingduplicatePDUs.
还请注意,多个不同的主题公钥值散列到同一SKI是可能的,尽管可能性很小。因此,在检测重复的PDU时,实现必须比较主题公钥值以及SKI。
ThisPDUisusedbyeitherpartytoreportanerrortotheother.
任何一方使用此PDU向另一方报告错误。
ErrorreportsareonlysentasresponsestootherPDUs,nottoreporterrorsinErrorReportPDUs.
错误报告仅作为响应发送到其他PDU,而不是在错误报告PDU中报告错误。
ErrorcodesaredescribedinSection12.
第12节描述了错误代码。
AnErrorReportPDUMUSTNOTbesentforanErrorReportPDU.IfanerroneousErrorReportPDUisreceived,thesessionSHOULDbedropped.
不得为错误报告PDU发送错误报告PDU。如果收到错误的错误报告PDU,则应放弃会话。
IftheerrorisassociatedwithaPDUofexcessivelength,i.e.,toolongtobeanylegalPDUotherthananotherErrorReport,orapossiblycorruptlength,theErroneousPDUfieldMAYbetruncated.
Thediagnostictextisoptional;ifnotpresent,theLengthofErrorTextfieldMUSTbezero.Iferrortextispresent,itMUSTbeastringinUTF-8encoding(see[RFC3629]).
诊断文本是可选的;如果不存在,则错误文本字段的长度必须为零。如果存在错误文本,则它必须是UTF-8编码的字符串(请参阅[RFC3629])。
RefreshInterval:Thisparametertellstherouterhowlongtowaitbeforenextattemptingtopollthecacheandbetweensubsequentattempts,usingaSerialQueryorResetQueryPDU.TherouterSHOULDNOTpollthecachesoonerthanindicatedbythisparameter.NotethatreceiptofaSerialNotifyPDUoverridesthisinterval
andsuggeststhattherouterissueanimmediatequerywithoutwaitingfortheRefreshIntervaltoexpire.CountdownforthistimerstartsuponreceiptofthecontainingEndOfDataPDU.
并建议路由器在不等待刷新间隔过期的情况下立即发出查询。此计时器的倒计时在接收到包含数据PDU结尾时开始。
Minimumallowedvalue:1second.
允许的最小值:1秒。
Maximumallowedvalue:86400seconds(1day).
最大允许值:86400秒(1天)。
Recommendeddefault:3600seconds(1hour).
推荐默认值:3600秒(1小时)。
RetryInterval:ThisparametertellstherouterhowlongtowaitbeforeretryingafailedSerialQueryorResetQuery.TherouterSHOULDNOTretrysoonerthanindicatedbythisparameter.Notethataprotocolversionmismatchoverridesthisinterval:iftherouterneedstodowngradetoalowerprotocolversionnumber,itMAYsendthefirstSerialQueryorResetQueryimmediately.Countdownforthistimerstartsuponfailureofthequeryandrestartsaftereachsubsequentfailureuntilaquerysucceeds.
Maximumallowedvalue:7200seconds(2hours).
最大允许值:7200秒(2小时)。
Recommendeddefault:600seconds(10minutes).
推荐默认值:600秒(10分钟)。
ExpireInterval:Thisparametertellstherouterhowlongitcancontinuetousethecurrentversionofthedatawhileunabletoperformasuccessfulsubsequentquery.TherouterMUSTNOTretainthedatapastthetimeindicatedbythisparameter.CountdownforthistimerstartsuponreceiptofthecontainingEndOfDataPDU.
Minimumallowedvalue:600seconds(10minutes).
最小允许值:600秒(10分钟)。
Maximumallowedvalue:172800seconds(2days).
最大允许值:172800秒(2天)。
Recommendeddefault:7200seconds(2hours).
建议默认值:7200秒(2小时)。
Iftherouterhasneverissuedasuccessfulqueryagainstaparticularcache,itSHOULDretryperiodicallyusingthedefaultRetryInterval,above.
如果路由器从未对特定缓存发出过成功的查询,它应该使用上面的默认重试间隔定期重试。
CachesMUSTsetExpireIntervaltoavaluelargerthaneitherRefreshIntervalorRetryInterval.
缓存必须将过期间隔设置为大于刷新间隔或重试间隔的值。
ArouterMUSTstarteachtransportconnectionbyissuingeitheraResetQueryoraSerialQuery.Thisquerywilltellthecachewhichversionofthisprotocoltherouterimplements.
路由器必须通过发出重置查询或串行查询来启动每个传输连接。此查询将告诉缓存路由器实现的协议版本。
如果支持版本1的缓存从指定版本0的路由器接收到查询,则缓存必须降级到协议版本0[RFC6810],或发送错误代码为4的版本1错误报告PDU(“不支持的协议版本”),并终止连接。
Ifarouterwhichsupportsversion1sendsaquerytoacachewhichonlysupportsversion0,oneoftwothingswillhappen:
如果支持版本1的路由器向仅支持版本0的缓存发送查询,则会发生以下两种情况之一:
1.Thecachemayterminatetheconnection,perhapswithaversion0ErrorReportPDU.Inthiscase,therouterMAYretrytheconnectionusingprotocolversion0.
1.缓存可能会终止连接,可能会使用版本0错误报告PDU。在这种情况下,路由器可以使用协议版本0重试连接。
2.Thecachemayreplywithaversion0response.Inthiscase,therouterMUSTeitherdowngradetoversion0orterminatetheconnection.
2.缓存可能会以版本0响应进行回复。在这种情况下,路由器必须降级到版本0或终止连接。
Inanyofthedowngradedcombinationsabove,thenewfeaturesofversion1willnotbeavailable,andallPDUswillhave0intheirversionfields.
在上述任何降级组合中,版本1的新功能将不可用,所有PDU的版本字段中都将有0。
IfeitherpartyreceivesaPDUcontaininganunrecognizedProtocolVersion(neither0nor1)duringthisnegotiation,itMUSTeitherdowngradetoaknownversionorterminatetheconnection,withanErrorReportPDUunlessthereceivedPDUisitselfanErrorReportPDU.
如果任何一方在此协商期间收到包含无法识别的协议版本(既不是0也不是1)的PDU,则必须降级到已知版本或终止连接,并提供错误报告PDU,除非收到的PDU本身是错误报告PDU。
TherouterMUSTignoreanySerialNotifyPDUsitmightreceivefromthecacheduringthisinitialstartupperiod,regardlessoftheProtocolVersionfieldintheSerialNotifyPDU.SinceSessionIDandSerialNumbervaluesarespecifictoaparticularprotocolversion,thevaluesinthenotificationarenotusefultotherouter.Evenifthesevaluesweremeaningful,theonlyeffectthatprocessingthenotificationwouldhavewouldbetotriggerexactlythesameResetQueryorSerialQuerythattherouterhasalreadysentaspartofthenot-yet-completeversionnegotiationprocess,sothereisnothingtobegainedbyprocessingnotificationsuntilversionnegotiationcompletes.
无论串行通知PDU中的协议版本字段如何,路由器都必须忽略在此初始启动期间可能从缓存接收到的任何串行通知PDU。由于会话ID和序列号值特定于特定的协议版本,因此通知中的值对路由器没有用处。即使这些值是有意义的,处理通知的唯一效果将是触发路由器作为尚未完成的版本协商过程的一部分已经发送的完全相同的重置查询或串行查询,因此,在版本协商完成之前,处理通知不会带来任何好处。
CachesSHOULDNOTsendSerialNotifyPDUsbeforeversionnegotiationcompletes.Routers,however,MUSThandlesuchnotifications(byignoringthem)forbackwardscompatibilitywithcachesservingprotocolversion0.
在版本协商完成之前,缓存不应发送串行通知PDU。但是,路由器必须处理此类通知(通过忽略它们),以便与服务于协议版本0的缓存向后兼容。
OncethecacheandrouterhaveagreeduponaProtocolVersionviathenegotiationprocessabove,thatversionisstableforthelifeofthesession.SeeSection5.1foradiscussionoftheinteractionbetweenProtocolVersionandSessionID.
一旦缓存和路由器通过上述协商过程商定了协议版本,该版本在会话生命周期内是稳定的。有关协议版本和会话ID之间交互的讨论,请参见第5.1节。
如果任一方在上述协商完成后收到不同协议版本的PDU,则该方必须放弃会话;除非包含意外协议版本的PDU本身是错误报告PDU,否则丢弃会话的一方应发送错误代码为8的错误报告(“意外协议版本”)。
ThesequencesofPDUtransmissionsfallintofourconversationsasfollows:
PDU传输序列分为以下四个对话:
首次建立传输连接时,路由器必须发送重置查询或串行查询。如果路由器具有来自具有相同缓存的中断会话的大量未过期数据,并且记住该会话的会话ID,则串行查询是合适的,在这种情况下,包含前一会话会话ID的串行查询将允许路由器更新自身,同时确保序列号相称,并且路由器和缓存使用的是协议的兼容版本。在所有其他情况下,路由器缺少快速重新同步所需的数据,因此必须返回到重置查询。
TheResetQuerysequenceisalsousedwhentherouterreceivesaCacheReset,choosesanewcache,orfearsthatithasotherwiselostitsway.
当路由器接收到缓存重置、选择新缓存或担心丢失路径时,也会使用重置查询序列。
SeeSection7fordetailsonversionnegotiation.
有关版本协商的详细信息,请参见第7节。
Tolimitthelengthoftimeacachemustkeepthedatanecessarytogenerateincrementalupdates,arouterMUSTsendeitheraSerialQueryoraResetQueryperiodically.Thisalsoactsasakeep-aliveattheapplicationlayer.SeeSection6fordetailsontherequiredpollingfrequency.
当缓存的序列号发生变化时,缓存服务器应发送一个带有其当前序列号的通知PDU,并期望路由器随后可以比其他情况更早地发出串行查询。这类似于[RFC1996]中的DNS通知。缓存必须将串行通知的频率限制为每分钟不超过一次。
WhenthetransportlayerisupandeitheratimerhasgoneoffintherouterorthecachehassentaNotifyPDU,therouterqueriesfornewdatabysendingaSerialQuery,andthecachesendsalldatanewerthantheserialintheSerialQuery.
当传输层启动且路由器中的计时器已关闭或缓存已发送NotifyPDU时,路由器通过发送串行查询来查询新数据,并且缓存发送串行查询中比串行查询中的串行数据更新的所有数据。
Tolimitthelengthoftimeacachemustkeepoldwithdraws,arouterMUSTsendeitheraSerialQueryoraResetQueryperiodically.SeeSection6fordetailsontherequiredpollingfrequency.
CacheRouter~~|<------SerialQuery------|Rrequestsdata|----ErrorReportPDU---->|CNoDataAvailable~~CacheRouter~~|<------SerialQuery------|Rrequestsdata|----ErrorReportPDU---->|CNoDataAvailable~~CacheRouter~~|<------ResetQuery-------|Rrequestsdata|----ErrorReportPDU---->|CNoDataAvailable~~CacheRouter~~|<------ResetQuery-------|Rrequestsdata|----ErrorReportPDU---->|CNoDataAvailable~~ThecachemayrespondtoeitheraSerialQueryoraResetQueryinformingtherouterthatthecachecannotsupplyanyupdateatall.Themostlikelycauseisthatthecachehasloststate,perhapsduetoarestart,andhasnotyetrecovered.Whileitispossiblethatacachemightgointosuchastatewithoutdroppinganyofitsactive
缓存可以响应串行查询或重置查询,通知路由器缓存根本无法提供任何更新。最可能的原因是缓存已丢失状态(可能是由于重新启动),并且尚未恢复。虽然缓存可能会进入这种状态,但不会删除其任何活动缓存
sessions,arouterismorelikelytoseethisbehaviorwhenitinitiallyconnectsandissuesaResetQuerywhilethecacheisstillrebuildingitsdatabase.
在会话中,当路由器最初连接并在缓存仍在重建其数据库时发出重置查询时,更可能看到这种行为。
Whenarouterreceivesthiskindoferror,therouterSHOULDattempttoconnecttoanyothercachesinitscachelist,inpreferenceorder.Ifnoothercachesareavailable,therouterMUSTissueperiodicResetQueriesuntilitgetsanewusableloadfromthecache.
当路由器收到此类错误时,路由器应尝试按优先顺序连接到其缓存列表中的任何其他缓存。如果没有其他缓存可用,路由器必须定期发出重置查询,直到从缓存获得新的可用负载。
Thetransport-layersessionbetweenarouterandacachecarriesthebinaryPDUsinapersistentsession.
路由器和缓存之间的传输层会话在持久会话中承载二进制PDU。
TopreventcachespoofingandDoSattacksbyillegitimaterouters,itishighlydesirablethattherouterandthecachebeauthenticatedtoeachother.Integrityprotectionforpayloadsisalsodesirabletoprotectagainstmonkey-in-the-middle(MITM)attacks.Unfortunately,thereisnoprotocoltodosoonallcurrentlyusedplatforms.Therefore,asofthewritingofthisdocument,thereisnomandatory-to-implementtransportwhichprovidesauthenticationandintegrityprotection.
为了防止非法路由器的缓存欺骗和DoS攻击,非常希望路由器和缓存相互验证。有效负载的完整性保护也有助于防止中间猴子(MITM)攻击。不幸的是,在所有当前使用的平台上都没有这样做的协议。因此,在编写本文件时,没有强制要求实施提供身份验证和完整性保护的传输。
Toreduceexposuretodroppedbutnon-terminatedsessions,bothcachesandroutersSHOULDenablekeep-aliveswhenavailableinthechosentransportprotocol.
为了减少对已丢弃但未终止会话的暴露,缓存和路由器应在所选传输协议中可用时启用keepalives。
Itisexpectedthat,whentheTCPAuthenticationOption(TCP-AO)[RFC5925]isavailableonallplatformsdeployedbyoperators,itwillbecomethemandatory-to-implementtransport.
预计,当TCP认证选项(TCP-AO)[RFC5925]在运营商部署的所有平台上可用时,将强制实施传输。
CachesandroutersMUSTimplementunprotectedtransportoverTCPusingaport,rpki-rtr(323);seeSection14.OperatorsSHOULDuseproceduralmeans,e.g.,accesscontrollists(ACLs),toreducetheexposuretoauthenticationissues.
缓存和路由器必须使用端口rpkirtr(323)通过TCP实现无保护传输;见第14节。运营商应使用程序手段,例如访问控制列表(ACL),以减少认证问题的暴露。
IfunprotectedTCPisthetransport,thecacheandroutersMUSTbeonthesametrustedandcontrollednetwork.
如果传输的是不受保护的TCP,则缓存和路由器必须位于同一个受信任和受控制的网络上。
Ifavailabletotheoperator,cachesandroutersMUSTuseoneofthefollowingmoreprotectedprotocols:
如果操作员可用,缓存和路由器必须使用以下更受保护的协议之一:
oCachesandroutersSHOULDuseTCP-AOtransport[RFC5925]overtherpki-rtrport.
o缓存和路由器应通过rpkirtr端口使用TCP-AO传输[RFC5925]。
oCachesandroutersMAYuseSecureShellversion2(SSHv2)transport[RFC4252]usingthenormalSSHport.Foranexample,seeSection9.1.
o缓存和路由器可以使用普通SSH端口使用SecureShell版本2(SSHv2)传输[RFC4252]。有关示例,请参见第9.1节。
oCachesandroutersMAYuseTCPMD5transport[RFC2385]usingtherpki-rtrport.NotethatTCPMD5hasbeenobsoletedbyTCP-AO[RFC5925].
o缓存和路由器可以使用rpkirtr端口使用TCPMD5传输[RFC2385]。请注意,TCPMD5已被TCP-AO[RFC5925]淘汰。
oCachesandroutersMAYuseTCPoverIPsectransport[RFC4301]usingtherpki-rtrport.
o缓存和路由器可以使用rpkirtr端口使用TCPoverIPsec传输[RFC4301]。
oCachesandroutersMAYuseTransportLayerSecurity(TLS)transport[RFC5246]usingportrpki-rtr-tls(324);seeSection14.
o缓存和路由器可以使用端口rpkirtrTLS(324)使用传输层安全(TLS)传输[RFC5246];见第14节。
要在SSH上运行,客户端路由器首先使用SSHv2传输协议建立SSH传输连接,客户端和服务器交换消息完整性和加密密钥。然后,客户端调用“sshuserauth”服务对应用程序进行身份验证,如ssh身份验证协议[RFC4252]中所述。一旦应用程序成功通过身份验证,客户端将调用“ssh连接”服务,也称为ssh连接协议。
建立ssh连接服务后,客户端将打开一个类型为“session”的通道,这将导致ssh会话。
一旦建立了SSH会话,应用程序将调用应用程序传输作为名为“rpkirtr”的SSH子系统。子系统支持是SSHv2的一项功能,不包括在SSHv1中。将此协议作为SSH子系统运行可以避免应用程序需要识别shell提示或跳过无关信息,例如在shell启动时发送的系统消息。
Itisassumedthattherouterandcachehaveexchangedkeysoutofbandbysomereasonablysecuredmeans.
假定路由器和缓存通过某种合理安全的方式在带外交换密钥。
CacheserverssupportingSSHtransportMUSTacceptRSAauthenticationandSHOULDacceptEllipticCurveDigitalSignatureAlgorithm(ECDSA)authentication.UserauthenticationMUSTbesupported;hostauthenticationMAYbesupported.ImplementationsMAYsupportpasswordauthentication.ClientroutersSHOULDverifythepublickeyofthecachetoavoidMITMattacks.
支持SSH传输的缓存服务器必须接受RSA身份验证,并且应该接受椭圆曲线数字签名算法(ECDSA)身份验证。必须支持用户身份验证;可能支持主机身份验证。实现可能支持密码身份验证。客户端路由器应验证缓存的公钥,以避免MITM攻击。
ClientroutersusingTLStransportMUSTpresentclient-sidecertificatestoauthenticatethemselvestothecacheinordertoallowthecachetomanagetheloadbyrejectingconnectionsfromunauthorizedrouters.Inprinciple,anytypeofcertificateandCertificationAuthority(CA)maybeused;however,ingeneral,cacheoperatorswillwishtocreatetheirownsmall-scaleCAandissuecertificatestoeachauthorizedrouter.Thissimplifiescredentialrollover;anyunrevoked,unexpiredcertificatefromtheproperCAmaybeused.
用于验证此协议中客户端路由器的证书必须包括subjectAltName扩展[RFC5280],其中包含一个或多个IP地址标识;在验证路由器的证书时,缓存必须根据这些IP地址标识检查TLS连接的IP地址,如果没有一个IP地址标识与连接匹配,则应拒绝连接。
路由器还必须使用[RFC6125]中描述的subjectAltNamedNSName标识验证缓存的TLS服务器证书,以避免MITM攻击。[RFC6125]中定义的规则和指南适用于此处,并考虑以下因素:
oSupportfortheDNS-IDidentifiertype(thatis,thedNSNameidentityinthesubjectAltNameextension)isREQUIREDinrpki-rtrserverandclientimplementationswhichuseTLS.Certificationauthoritieswhichissuerpki-rtrservercertificatesMUSTsupporttheDNS-IDidentifiertype,andtheDNS-IDidentifiertypeMUSTbepresentinrpki-rtrservercertificates.
o在使用TLS的rpkirtr服务器和客户端实现中,需要支持DNS-ID标识符类型(即subjectAltName扩展中的dNSName标识)。颁发rpkirtr服务器证书的证书颁发机构必须支持DNS-ID标识符类型,并且DNS-ID标识符类型必须存在于rpkirtr服务器证书中。
orpkirtr服务器证书中的DNS名称不应包含通配符“*”。
o使用TLS的rpkirtr实现不得使用通用名称(CN-ID)标识符;CN字段可能出现在服务器证书的使用者名称中,但不得在[RFC6125]中描述的规则内用于身份验证。
o客户端路由器必须将其“参考标识符”设置为rpkirtr缓存的DNS名称。
IfTCPMD5isused,implementationsMUSTsupportkeylengthsofatleast80printableASCIIbytes,perSection4.5of[RFC2385].ImplementationsMUSTalsosupporthexadecimalsequencesofatleast32characters,i.e.,128bits.
如果使用TCPMD5,根据[RFC2385]第4.5节,实现必须支持至少80个可打印ASCII字节的密钥长度。实现还必须支持至少32个字符的十六进制序列,即128位。
KeyrolloverwithTCPMD5isproblematic.CacheserversSHOULDsupport[RFC4808].
使用TCPMD5进行密钥翻转是有问题的。缓存服务器应支持[RFC4808]。
ImplementationsMUSTsupportkeylengthsofatleast80printableASCIIbytes.ImplementationsMUSTalsosupporthexadecimalsequencesofatleast32characters,i.e.,128bits.MessageAuthenticationCode(MAC)lengthsofatleast96bitsMUSTbesupported,perSection5.1of[RFC5925].
实现必须支持至少80个可打印ASCII字节的密钥长度。实现还必须支持至少32个字符的十六进制序列,即128位。根据[RFC5925]第5.1节,必须支持至少96位的消息认证码(MAC)长度。
Thecryptographicalgorithmsandassociatedparametersdescribedin[RFC5926]MUSTbesupported.
Acachehasthepublicauthenticationdataforeachrouteritisconfiguredtosupport.
缓存具有配置为支持的每个路由器的公共身份验证数据。
路由器可被配置为与缓存的选择对等,并且缓存可被配置为支持路由器的选择。每个节点必须具有每个对等节点的名称和身份验证数据。此外,在路由器中,此列表对每个服务器都有一个非唯一的首选项值。这种偏好仅仅表示接近,而不是信任、偏好信念等等。客户端路由器尝试按照首选顺序与每个潜在的服务缓存建立会话,然后开始从它可以连接和验证的最首选缓存加载数据。路由器的缓存列表包含以下元素:
首选项:一个无符号整数,表示路由器连接到该缓存的首选项;值越低,首选项越多。
Name:TheIPaddressorfullyqualifieddomainnameofthecache.
名称:缓存的IP地址或完全限定的域名。
缓存凭据:向路由器验证缓存身份所需的任何凭据(如公钥)。
路由器凭据:向缓存验证路由器身份所需的任何凭据(如私钥或证书)。
DuetothedistributednatureoftheRPKI,cachessimplycannotberigorouslysynchronous.AclientmayholddatafrommultiplecachesbutMUSTkeepthedatamarkedastosource,aslaterupdatesMUSTaffectthecorrectdata.
由于RPKI的分布式特性,缓存不能严格同步。客户机可以保存来自多个缓存的数据,但必须将数据标记为源,因为以后的更新必须影响正确的数据。
JustastheremaybemorethanonecoveringROAfromasinglecache,theremaybemultiplecoveringROAsfrommultiplecaches.Theresultsareasdescribedin[RFC6811].
正如一个缓存可能有多个覆盖ROA一样,多个缓存也可能有多个覆盖ROA。结果如[RFC6811]所述。
Ifdatafrommultiplecachesareheld,implementationsMUSTNOTdistinguishbetweendatasourceswhenperformingvalidationofBGPannouncements.
如果保存了来自多个缓存的数据,则在执行BGP公告验证时,实现不得区分数据源。
Whenamore-preferredcachebecomesavailable,ifresourcesallow,itwouldbeprudentfortheclienttostartfetchingfromthatcache.
如果资源允许,当一个更首选的缓存可用时,客户机开始从该缓存获取数据是明智的。
TheclientSHOULDattempttomaintainatleastonesetofdata,regardlessofwhetherithaschosenadifferentcacheorestablishedanewconnectiontothepreviouscache.
客户机应尝试维护至少一组数据,无论它选择了不同的缓存还是建立了到以前缓存的新连接。
AclientMAYdropthedatafromaparticularcachewhenitisfullyinsyncwithoneormoreothercaches.
当数据与一个或多个其他缓存完全同步时,客户端可能会从特定缓存中删除数据。
SeeSection6fordetailsonwhattodowhentheclientisnotabletorefreshfromaparticularcache.
有关客户端无法从特定缓存刷新时的操作的详细信息,请参见第6节。
Ifaclientlosesconnectivitytoacacheitisusingorotherwisedecidestoswitchtoanewcache,itSHOULDretainthedatafromthepreviouscacheuntilithasafullsetofdatafromoneormoreothercaches.Notethatthismayalreadybetrueatthepointofconnectionlossiftheclienthasconnectionstomorethanonecache.
如果客户端与正在使用的缓存失去连接,或者决定切换到新缓存,则它应该保留以前缓存中的数据,直到拥有来自一个或多个其他缓存的完整数据集。请注意,如果客户端连接到多个缓存,则在连接丢失时可能已经是这样。
Forillustration,wepresentthreelikelydeploymentscenarios:
为了进行说明,我们提供了三种可能的部署场景:
SmallEndSite:ThesmallmultihomedendsitemaywishtooutsourcetheRPKIcachetooneormoreoftheirupstreamISPs.TheywouldexchangeauthenticationmaterialwiththeISPusingsomeout-of-bandmechanism,andtheirrouter(s)wouldconnecttothecache(s)ofoneormoreupstreamISPs.TheISPswouldlikelydeploycachesintendedforcustomeruseseparatelyfromthecacheswithwhichtheirownBGPspeakerspeer.
小型终端站点:小型多主机终端站点可能希望将RPKI缓存外包给一个或多个上游ISP。他们将使用带外机制与ISP交换身份验证材料,并且他们的路由器将连接到一个或多个上游ISP的缓存。ISP可能会分别部署供客户使用的缓存,而不是与他们自己的BGP扬声器对等的缓存。
LargeEndSite:Alargermultihomedendsitemightrunoneormorecaches,arrangingtheminahierarchyofclientcaches,eachfetchingfromaservingcachewhichisclosertotheGlobalRPKI.TheymightconfigurefallbackpeeringstoupstreamISPcaches.
大型终端站点:大型多主机终端站点可能运行一个或多个缓存,将它们排列在客户端缓存的层次结构中,每个缓存都从更接近全局RPKI的服务缓存获取。他们可能会将回退对等配置到上游ISP缓存。
ISPBackbone:AlargeISPwouldlikelyhaveoneormoreredundantcachesineachmajorpointofpresence(PoP),andthesecacheswouldfetchfromeachotherinanISP-dependenttopologysoasnottoplaceundueloadontheGlobalRPKI.
ISP主干网:大型ISP可能在每个主要存在点(PoP)中有一个或多个冗余缓存,这些缓存将在依赖ISP的拓扑中相互提取,以避免对全局RPKI造成过度负载。
ExperiencewithlargeDNScachedeploymentshasshownthatcomplextopologiesareill-advised,asitiseasytomakeerrorsinthegraph,e.g.,notmaintainaloop-freecondition.
大型DNS缓存部署的经验表明,复杂拓扑是不明智的,因为它很容易在图中出错,例如,无法保持无循环状态。
Ofcourse,theseareillustrations,andthereareotherpossibledeploymentstrategies.ItisexpectedthatminimizingloadontheGlobalRPKIserverswillbeamajorconsideration.
当然,这些都是说明,还有其他可能的部署策略。预计最大限度地减少全局RPKI服务器上的负载将是一个主要考虑因素。
Thissectioncontainsapreliminarylistoferrorcodes.Theauthorsexpectadditionstothelistduringdevelopmentoftheinitialimplementations.ThereisanIANAregistrywherevaliderrorcodesarelisted;seeSection14.ErrorswhichareconsideredfatalMUSTcausethesessiontobedropped.
本节包含错误代码的初步列表。作者希望在初始实现的开发过程中添加到列表中。有一个IANA注册表,其中列出了有效的错误代码;见第14节。被认为是致命的错误必须导致会话被删除。
0:CorruptData(fatal):ThereceiverbelievesthereceivedPDUtobecorruptinamannernotspecifiedbyanothererrorcode.
0:损坏的数据(致命):接收器认为接收到的PDU以其他错误代码未指定的方式损坏。
1:InternalError(fatal):Thepartyreportingtheerrorexperiencedsomekindofinternalerrorunrelatedtoprotocoloperation(ranoutofmemory,acodingassertionfailed,etcetera).
1:内部错误(致命):报告错误的一方遇到与协议操作无关的某种内部错误(内存不足、编码断言失败等)。
2:NoDataAvailable:ThecachebelievesitselftobeingoodworkingorderbutisunabletoanswereitheraSerialQueryoraResetQuerybecauseithasnousefuldataavailableatthistime.ThisislikelytobeatemporaryerrorandmostlikelyindicatesthatthecachehasnotyetcompletedpullingdownaninitialcurrentdatasetfromtheGlobalRPKIsystemaftersomekindofeventthatinvalidatedwhateverdataitmighthavepreviouslyheld(reboot,networkpartition,etcetera).
2:无可用数据:缓存认为自己处于良好的工作状态,但无法回答串行查询或重置查询,因为此时没有可用的有用数据。这很可能是一个临时错误,并且很可能表明缓存尚未完成从全局RPKI系统中提取初始当前数据集的操作,因为发生了某种事件,使其先前保存的任何数据无效(重新启动、网络分区等)。
3:无效请求(致命):缓存服务器认为客户端的请求无效。
4:UnsupportedProtocolVersion(fatal):TheProtocolVersionisnotknownbythereceiverofthePDU.
4:不支持的协议版本(致命):PDU的接收器不知道协议版本。
5:UnsupportedPDUType(fatal):ThePDUTypeisnotknownbythereceiverofthePDU.
5:不支持的PDU类型(致命):PDU的接收器不知道PDU类型。
6:撤消未知记录(致命):接收到的PDU具有标志=0,但接收方数据库中不存在匹配的记录(IPvXPDU的{Prefix,Len,MaxLen,ASN}元组或路由器密钥PDU的{SKI,ASN,SubjectPublicKey}元组)。
7:DuplicateAnnouncementReceived(fatal):ThereceivedPDUhasFlag=1,butamatchingrecord({Prefix,Len,Max-Len,ASN}tupleforanIPvXPDUor{SKI,ASN,SubjectPublicKey}tupleforaRouterKeyPDU)isalreadyactiveintherouter.
7:接收到重复公告(致命):接收到的PDU具有标志=1,但匹配记录(IPvXPDU的{Prefix,Len,MaxLen,ASN}元组或路由器密钥PDU的{SKI,ASN,SubjectPublicKey}元组)已在路由器中处于活动状态。
8:UnexpectedProtocolVersion(fatal):ThereceivedPDUhasaProtocolVersionfieldthatdiffersfromtheprotocolversionnegotiatedinSection7.
8:意外协议版本(致命):收到的PDU具有与第7节中协商的协议版本不同的协议版本字段。
Asthisdocumentdescribesasecurityprotocol,manyaspectsofsecurityinterestaredescribedintherelevantsections.Thissectionpointsoutissueswhichmaynotbeobviousinothersections.
CacheValidation:InorderforacollectionofcachesasdescribedinSection11toguaranteeaconsistentview,theyneedtobegivenconsistenttrustanchorstouseintheirinternalvalidationprocess.Distributionofaconsistenttrustanchorisassumedtobeoutofband.
缓存验证:为了保证第11节中描述的缓存集合具有一致的视图,需要为它们提供一致的信任锚,以便在其内部验证过程中使用。假设一致信任锚的分布在带外。
CachePeerIdentification:Therouterinitiatesatransportconnectiontoacache,whichitidentifiesbyeitherIPaddressorfullyqualifieddomainname.BeawarethataDNSoraddressspoofingattackcouldmakethecorrectcacheunreachable.Nosessionwouldbeestablished,astheauthorizationkeyswouldnotmatch.
TransportSecurity:TheRPKIreliesonobject,notserverortransport,trust.Thatis,theIANAroottrustanchorisdistributedtoallcachesthroughsomeout-of-bandmeansandcanthenbeusedbyeachcachetovalidatecertificatesandROAsallthewaydownthetree.Theinter-cacherelationshipsarebasedonthisobjectsecuritymodel;hence,theinter-cachetransportcanbelightlyprotected.
传输安全性:RPKI依赖于对象信任,而不是服务器或传输信任。也就是说,IANA根信任锚通过一些带外方式分布到所有缓存,然后每个缓存都可以使用IANA根信任锚来验证证书和树下的ROA。缓存间关系基于此对象安全模型;因此,缓存间传输可以得到轻微的保护。
However,thisprotocoldocumentassumesthattherouterscannotdothevalidationcryptography.Hence,thelastlink,fromcachetorouter,issecuredbyserverauthenticationandtransport-levelsecurity.Thisisdangerous,asserverauthenticationandtransporthaveverydifferentthreatmodelsthanobjectsecurity.
然而,本协议文件假定路由器无法进行验证加密。因此,从缓存到路由器的最后一条链路是由服务器身份验证和传输级安全保护的。这是很危险的,因为服务器身份验证和传输与对象安全具有非常不同的威胁模型。
因此,信任关系的强度以及路由器和缓存之间的传输至关重要。你把你的路线押在这上面了。
虽然我们不能说缓存必须在同一个LAN上,但如果只是由于企业希望将缓存任务卸载给其上游ISP的问题,那么本地性、信任和控制是非常关键的问题。从受控和受保护(防止DDoS、MITM)传输的角度来看,缓存应该尽可能靠近路由器。它还应该在拓扑上是封闭的,这样就需要最少的经过验证的路由数据来引导路由器对缓存的访问。
TheidentityofthecacheserverSHOULDbeverifiedandauthenticatedbytherouterclient,andviceversa,beforeanydataareexchanged.
在交换任何数据之前,路由器客户端应验证和验证缓存服务器的身份,反之亦然。
Transportswhichcannotprovidethenecessaryauthenticationandintegrity(seeSection9)mustrelyonnetworkdesignandoperationalcontrolstoprovideprotectionagainstspoofing/corruptionattacks.AspointedoutinSection9,TCP-AOisthelong-termplan.ProtocolswhichprovideintegrityandauthenticitySHOULDbeused,andiftheycannot,i.e.,TCPisusedasthetransport,therouterandcacheMUSTbeonthesametrusted,controllednetwork.
无法提供必要的身份验证和完整性(见第9节)的传输必须依靠网络设计和操作控制来提供防欺骗/破坏攻击的保护。如第9节所述,TCP-AO是一项长期计划。应使用提供完整性和真实性的协议,如果不能,即使用TCP作为传输,则路由器和缓存必须位于同一受信任的受控网络上。
ThissectiononlydiscussesupdatesrequiredintheexistingIANAprotocolregistriestoaccommodateversion1ofthisprotocol.See[RFC6810]forIANAconsiderationsfromtheoriginal(version0)protocol.
本节仅讨论现有IANA协议注册表中需要的更新,以适应本协议的版本1。有关原始(版本0)协议的IANA注意事项,请参见[RFC6810]。
IANA“rpkirtrpdu”注册表中的所有现有条目对于协议版本0仍然有效。协议版本0中允许的所有PDU类型在协议版本1中也允许,并添加了新的路由器密钥PDU。为了减少混淆的可能性,协议版本1中的路由器密钥PDU使用的PDU编号在此注册为协议版本0中的保留(和未使用)。
ThepolicyforaddingtotheregistryisRFCRequiredper[RFC8126];thedocumentmustbeeitherStandardsTrackorExperimental.
添加到注册表的策略是[RFC8126]要求的RFC;文档必须是标准跟踪或实验性的。
“rpkirtrpdu”注册表已更新如下:
IANA“rpkirtrerror”注册表中的所有现有条目对于所有协议版本仍然有效。协议版本1添加了一个新的错误代码:
Acknowledgements
致谢
TheauthorswishtothankNilsBars,SteveBellovin,TimBruijnzeels,RexFernando,RichardHansen,PaulHoffman,FabianHoller,RussHousley,PradoshMohapatra,KeyurPatel,DavidMandelberg,SandyMurphy,RobertRaszuk,AndreasReuter,ThomasC.Schmidt,JohnScudder,RuedigerVolk,MatthiasWaehlisch,andDavidWard.ParticularthanksgotoHannesGredlerforshowingusthedangersofunnecessaryfields.
作者希望感谢尼尔斯·巴尔斯、史蒂夫·贝洛文、蒂姆·布鲁伊泽尔斯、雷克斯·费尔南多、理查德·汉森、保罗·霍夫曼、法比安·霍勒、鲁斯·霍斯利、普拉多什·莫哈帕特拉、凯尔·帕特尔、大卫·曼德尔伯格、桑迪·墨菲、罗伯特·拉祖克、安德烈亚斯·路透社、托马斯·施密特、约翰·斯卡德尔、鲁迪格·沃尔克、马蒂亚斯·韦利什和大卫·沃德。特别感谢HannesGredler向我们展示了不必要领域的危险。
Nodoubtthislistisincomplete.Weapologizetoanycontributorwhosenamewemissed.
毫无疑问,这份清单是不完整的。我们向我们遗漏姓名的任何贡献者道歉。
作者地址
RandyBushInternetInitiativeJapan5147CrystalSpringsBainbridgeIsland,Washington98110UnitedStatesofAmerica
兰迪·布什互联网倡议日本5147水晶泉班布里奇岛,华盛顿98110美利坚合众国