Subject: Re: [Sidrops] I-D Action: draft-sidrops-bgpsec-validation-signaling-05.txt

From: "Borchert, Oliver (Fed)" <[email-masked]>
Date: Thu, 15 Oct 2020 19:14:21 +0000

Hi Job,

I'm sorry for my late reply, my emailer was hiding this email from me and I just found it.

I do not believe there is a need to change the title to specifically include "Internal BGP".
Within the latest changes, we specifically aligned the draft to follow the signaling as 
specified within RFC 4360.  As you know, RFC 4360 does govern the boundaries in which 
non-transitive attributes can be used and we referred to RFC 4360 where ever necessary.

In fact, upon your request during 108, we modified the draft in such that it goes one step 
further by limiting the signaling of validation state to only values that were locally computed 
by the sending BGP router itself.  That is, at the router level, the attribute is non-transitive, even in the case of iBGP.

Therefore I do not see any need for further modification. 

Thanks,
Oliver

-----------------------------------------------
Oliver Borchert, Computer Scientist
National Institute of Standards and Technology
(Office) +1.301.975.4856

On 9/30/20, 10:10 AM, "Sidrops on behalf of Job Snijders" <[email-masked] on behalf of [email-masked]> wrote:

    Dear all,

    I have reviewed the document and would like to offer some feedback.

    The title probably should read "BGPsec Validation State Signaling via Internal BGP" 

    Furthermore the document probably benefits replacing "BGP neighbor" with
    "IBGP neighbor", similarly "BGP peer" and "peer" should be replaced with
    "IBGP neighbor" and "neighbor" for more consistent reading. Emphasis on
    IBGP is important as this document outlines non-transitive extended
    communities. (Let's park discussion about EBGP vs CONFED vs IBGP for the
    sake of progressing conversation about the substance of this draft)

    Internal inconsistency in draft-sidrops-bgpsec-validation-signaling
    -------------------------------------------------------------------

    RFC 8205 section 5.1 states "BGPsec validation need only be performed at
    the eBGP edge.", and also "a BGPsec speaker MAY temporarily defer
    validation of incoming UPDATE messages." 

    With the above in mind, in section 4 of draft-sidrops-bgpsec-validation-signaling
    the first paragraph references an EBGP speaker that received a BGPsec
    UPDATE from a neighbor outside the administrative domain. If one follows
    the logical outcomes of temporarily deferment of validation, the EBGP
    node was unable to perform BGPsec path validation, thus MUST set
    validation state 'Unverified'. Consequently the BGP UPDATE is
    distributed to IBGP speakers, which all have to perform full BGPsec path
    validation in order to confirm that the validation state is indeed
    "Unverified". One might as well not attach any community at all because
    speaker A doesn't signal of note - because it doesn't know.

    If the EBGP edge device that (temporarily or forever) is unable to do
    BGPsec validation, it will for the duration of that event be unable to
    set the appropriate community, as it cannot validate. Whatever
    communities it sets, other nodes in the network still need to verify
    whether or not the community is true. As such, the communities are
    merely overhead.

    Imagine a two node network (ascii art, mind your MUA):

    				 +--------+
    				 |AS 65123|
    				 +----+---+
    					  |
    			   +------+----+
    	+--EBGP1---+ AS 650001 +----------------EBGP2------+
    	|          +-----------+                           |
    	|                                                  |
    	|        +-----------------------------------+     |
    	|        | AS 65666 running draft-signaling  |     |
    	|        |                                   |     |
    	|        | +---------------+                 |     |
    	+----------+ BGP speaker A |****IBGP         |     |
    			 | +---------------+     *           |     |
    			 |                       *           |     |
    			 |               +-------*-------+   |     |
    			 |               | BGP Speaker B +---------+
    			 |               +---------------+   |
    			 |                                   |
    			 +-----------------------------------+

    If BGP speaker A cannot perform BGPsec validation on EBGP1, it can't
    confirm whether _65001_65123$ is a valid BGPSec_PATH or not. But
    whatever conclusion speaker A draws, speaker B receives the
    _650001_65123$ path via its own EBGP2 session with 650001. Whatever
    validation (and signaling) happens via the IBGP session, it does not in
    any way positively impact speaker B's decisions, as speaker B can't use
    IBGP information as input into its decision making process regarding the
    BGP UPDATE received via EBGP2. Draft-sidrops-bgpsec-validation-signaling
    is not a replacement or alternative to the RPKI-To-Router protocol.

    If the meaning of the 'unverified' state is 'maybe I will do validation
    later, maybe not', I don't see any practical application.

    If the meaning of 'valid' is to be taken at face value, again, there is
    no value in a standardized community, see RFC 3514.

    If the meaning of 'invalid' is that following BGPsec path validation the
    route is deemed invalid, then why was it propagated in the first place?

    If Speaker B is not able to do Path Validation, whatever 'invalid'
    signal it receives on its IBGP session does not and cannot override or
    influence what was received via EBGP2.

    The text in the abstract and introduction about 'temporarily deferment of
    validation' should probably be removed as it is hard to see how in the
    situation of temporarily deferment the existence of these communities
    makes sense.

    Undeployability
    ---------------

    An architectural choice to use BGP communities for any purpose
    oftentimes stems from an operator's ability to deploy 'a new thing' in a
    network where (part of) the nodes have not yet been upgraded. Good
    useful examples of this mechanism are GRACEFUL_SHUTDOWN and NO_EXPORT.

    The document states in section 3 "If the router supports the extension
    as defined in this document" ... which implies that all nodes in an
    administrative domain must be upgraded, which in turn somewhat nullifies
    the justification to use communities in the first place. This doesn't
    allow a brownfield upgrade!

    Section 3.1 "Error Handling at Peers" reads as a simple paragraph, but
    is brittle and error-prone to implement in routing policy. Most network
    operators are accustomed to implementing a 'test & branch' procedure by
    positive community matching and then taking some action. RFC 1997
    defines communities as "A community is a group of destinations which
    share some common property." The implication is that when multiple
    communities are attached to a route, the route simply has multiple
    properties.

    However, this document outlines a mechanism where specific combinations
    of communities are invalid input: "(0x43,TBD,0) ∩ (0x43,TBD,1)", or
    "(0x43,TBD,1) ∩ (0x43,TBD,2)", or "(0x43,TBD,2) ∩ (0x43,TBD,0)". In
    currently available commercial|free-of-the-shelf BGP implementations
    implementing adequate error handling is error-prone. RFC 8097 shares
    this weakness.

    The Introduction proposes that a reduction of path validation processing
    load can be achieved, however Section 4 states that if there is a
    discrepancy between the locally computed validation state and the
    community, the locally computed state takes precedence. Thus, no load
    processing reduction can be achieved because a BGPsec capable node must
    compute the validation state before it can compare it to the community.

    Not analogous to RFC 8097
    -------------------------

    To many this draft may appear as 'for sure, we need something similar
    for bgpsec as we have for route origin validation' - but I think no such
    equivalence exists, or needs to exist.

    RFC 8097 defines a set of BGP communities which can optionally be
    associated with a prefix *after* the Origin Validation procedure (RFC
    6811) *successfully* is executed. This in contrast to
    draft-bgpsec-validation-signaling, where a node is *unable* to path
    validation, thus can never set the appropriate communities. RFC 8097
    does not describe a situation where Origin Validation is temporarily
    deferred.

    Reject don't tag (do, don't talk about doing it)
    ------------------------------------------------

    If a route is considered invalid (for whatever reason, beauty is in the
    eye of the beholder), the route should be rejected. Merely tagging an
    invalid route with a specific community and propagating it further, is a
    useless excercise. Such designs hampers deployment of actual security
    measures. If an operator wants to tag invalid routes for analytical
    purposes, they can easily do so and can choose from milions of values
    using any of the flavors of communities that are available. If you *are*
    propagating an invalid route, you are propagating an invalid route - in
    which case it does not matter whatever communities are attached to it.

    Conclusion
    ----------

    At this point in time I don't think this draft can proceed to
    publication, from the document itself it is not clear to me what
    benefits can be achieved and how this benefits Internet operations. The
    draft requires new code on devices in addition to what a BGPsec capable
    implementation would require. And in today's world there aren't
    off-the-shelf BGPsec implementations to start with, so piling on
    additional code requirements is too early in the innovation cycle
    anyhow. Using communities is no substitute for BGPsec validation or for
    RTR, this document may subtly lead people to believe otherwise.

    It is possible I misunderstood things, I look forward to feedback from
    the group.

    Kind regards,

    Job

    ps. nitpick: one of the author's company names seems misspelled.

    On Fri, Sep 25, 2020 at 07:19:10PM -0700, [email-masked] wrote:
    > 
    > A New Internet-Draft is available from the on-line Internet-Drafts directories.
    > This draft is a work item of the SIDR Operations WG of the IETF.
    > 
    >         Title           : BGPsec Validation State Signaling
    >         Authors         : Oliver Borchert
    >                           Doug Montgomery
    >                           Daniel Kopp
    > 	Filename        : draft-sidrops-bgpsec-validation-signaling-05.txt
    > 	Pages           : 8
    > 	Date            : 2020-09-25
    > 
    > Abstract:
    >    This document defines a new BGP non-transitive extended community to
    >    carry the BGPsec path validation state.  BGP speakers that receive
    >    this community string can use the embedded BGPsec validation state in
    >    conjunction with configured local policies to influence their
    >    decision process.  The ability to accept and act on BGPsec path
    >    validation state from a neighbor allows for a reduction of path
    >    validation processing load and/or increased resilience in the event
    >    that a router is temporarily unable to perform local path validation.
    > 
    > 
    > The IETF datatracker status page for this draft is:
    > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fdraft-sidrops-bgpsec-validation-signaling%2F&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565010135&amp;sdata=j%2Foh6jiZlwSn1Mct6aBZUfX7F7IWgfbLcv89c5gvsJ0%3D&amp;reserved=0
    > 
    > There are also htmlized versions available at:
    > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-sidrops-bgpsec-validation-signaling-05&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565010135&amp;sdata=3xIMx3oHQ19n9ew7MBgoXvhTUkWm%2BxAGxqVtt%2BY3rR8%3D&amp;reserved=0
    > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Fdraft-sidrops-bgpsec-validation-signaling-05&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565020091&amp;sdata=c4JC9l9ljT0k2pO%2BXVDtNtcRPxLljbH5Xe8dMsO3wcE%3D&amp;reserved=0
    > 
    > A diff from the previous version is available at:
    > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Frfcdiff%3Furl2%3Ddraft-sidrops-bgpsec-validation-signaling-05&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565020091&amp;sdata=d4zUvQ%2FqIzT5rFJrGYQA40lNdw3GHfeWXbPGWXUaKEM%3D&amp;reserved=0
    > 
    > 
    > Please note that it may take a couple of minutes from the time of submission
    > until the htmlized version and diff are available at tools.ietf.org.
    > 
    > Internet-Drafts are also available by anonymous FTP at:
    > https://gcc02.safelinks.protection.outlook.com/?url=ftp%3A%2F%2Fftp.ietf.org%2Finternet-drafts%2F&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565020091&amp;sdata=bH0U1QIrlyWFsQ76zz%2FNBMlCNK18geKnrDIAAIyFUOU%3D&amp;reserved=0
    > 
    > 
    > _______________________________________________
    > Sidrops mailing list
    > [email-masked]
    > https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Fsidrops&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565020091&amp;sdata=YUjNAzORi4NTfdI2bVvD3wzEqGZ7F%2BtzhmfRxRPKEI4%3D&amp;reserved=0

    _______________________________________________
    Sidrops mailing list
    [email-masked]
    https://gcc02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.ietf.org%2Fmailman%2Flistinfo%2Fsidrops&amp;data=02%7C01%7Coliver.borchert%40nist.gov%7C912e66dc7cdc4e408fd908d8654aa58a%7C2ab5d82fd8fa4797a93e054655c61dec%7C1%7C1%7C637370718565020091&amp;sdata=YUjNAzORi4NTfdI2bVvD3wzEqGZ7F%2BtzhmfRxRPKEI4%3D&amp;reserved=0

---

From: Job Snijders <[email-masked]>
Date: Thu, 15 Oct 2020 19:39:13 +0000

Dear Oliver,

> I do not believe there is a need to change the title to specifically

OK, sure. The document title is just the document title.

> Therefore I do not see any need for further modification. 

I am not sure I follow. On the third line of my review I made a
suggestion about the title, to which you reacted, but then more text
followed. The rest of the review details technical obstacles I perceive
with the Internet-Draft in its current form.

I attempted to organize the review by using '------' (markdown format)
to separate the various conceptual issues I perceive.

Kind regards,

Job

---

From: "Borchert, Oliver (Fed)" <[email-masked]>
Date: Thu, 15 Oct 2020 20:53:35 +0000

Hi Job,

My bad, somehow I missed the technical portion of your review. I noticed the ----- but did not realize there is more to come, I mis-read it as part of an earlier email - sorry!

I will go over it now and get back to you.

Thanks,
Oliver

(GVoice) +1.240.668.4117

On 10/15/20, 3:39 PM, "Job Snijders" <[email-masked]> wrote:

    Dear Oliver,

    Kind regards,

    Job

---

From: "Borchert, Oliver (Fed)" <[email-masked]>
Date: Fri, 16 Oct 2020 01:49:28 +0000

Hi Job, 

Thanks for your comments, I removed some overhead to only focus on your 
technical review. I added [ob] in front of all my inline comments.

        				 +--------+
        				 |AS 65123|
        				 +----+---+
        					  |
        			   +------+----+

        BGP UPDATE received via EBGP2. 

[ob] You are correct that in this example, B does not gain anything from A.  Said 
[ob] that, once B validates and selects the route for instance using the EBGP2 path
[ob] and not the route it learned from A, it then will forward the route to A 
[ob] and A can receive and use the validation state it learned from B.
[ob] Here the operator also has a means of analyzing what happened.

        Draft-sidrops-bgpsec-validation-signaling
        is not a replacement or alternative to the RPKI-To-Router protocol.

[ob] We never said that draft-sidrops-bgpsec-validation-signaling is a 
[ob] replacement for rpki-to-router.  In fact both have a completely different
[ob] task to perform.  This draft only signals the validation state a router 
[ob] calculated to its peer.  RPKI-to-router provides ROA information and BGPsec
[ob] public keys to the router.  Two completely different tasks. 

[ob] If the router is overloaded it might perform lazy evaluation "defer the validation"
[ob] See RFC 8205.

[ob] The meaning of the validation state 'valid' is defined in RFC 8205 which we
[ob] defer too in this draft.

[ob] Dropping an invalid route is local policy so one might decide to not drop an 
[ob] invalid route but low-pref it instead and select if no other path is available.
[ob] Also, there are still the two other situations left, 'unverified' and 'valid'.

[ob] In this case you would have a 'invalid' compared to an 'unverified' route.  
[ob] I believe this is local policy.  One could 'low-pref' the route.  See it 
[ob] from the other side.  Let's say A received the route, validated and the 
[ob] result is 'invalid', now it receives the route via IBGP from B, this time 
[ob] as 'unverified' because as you mention B defers validation.  Now A does 
[ob] perform validation and validates it as 'valid'.  In this case A send a 
[ob] withdrawal to B for the A(EBGP) route and both A and B will use B's route.
[ob] Even though only A knows it is valid.  

[ob] I know, the receiver does not know why a route was not verified.  And the 
[ob] reason does not change anything on the outcome.  Said that, 'temporarily deferment'
[ob] would be a most likely reason for not validating in the first place as 
[ob] mentioned in RFC 8205.  The important part here is to signal that it was
[ob] not validated at all.

        Undeployability
        ---------------

[ob] I disagree with your "implication" statement.  Not every router is required
[ob] to support this extension and as stated in the draft, the usage of this 
[ob] attribute is configurable on a per peer basis.

[ob] The draft clearly states to have no combinations of this community string 
[ob] in the same UPDATE, so I do not follow your point here.  If more than one 
[ob] instances of the attribute are found then all MUST be discarded. The argument
[ob] that implementations have issues with error handling does not hold.  I'm sorry
[ob] but as someone who worked on many software implementations over the years
[ob] this is not really a very convincing argument......

[ob] Not necessarily, using your topology from above, B receives the update from A.   
[ob] Let's assume for a moment A did validate and B is low on resources and decides 
[ob] to defer the validation.  Here, it receives a validation result from A and uses 
[ob[ it until B gains back resources and starts validating all remaining routes it 
[ob] did defer earlier.  It eventually will validate the UPDATE it learned from A and
[ob] B will use its own validation state, going forward.

[ob] Regardless that the end goal is that every single router performs its own 
[ob] BGPsec path validation, there are moments, where a router will defer this task.
[ob] That is why also RFC 8205 added that section.

[ob] Next to load processing, this attribute also allows validation analysis.  It 
[ob] makes it easier when analyzing the traffic to see the validation result of each 
[ob] router.  Here a well-defined attribute allows early integration into third party 
[ob] tools such as Wireshark or others. 

[ob] As developer of one of the reference implementations I think differently.

[ob] I don't really want to talk about RFC 8097 here but where you bring this up,
[ob] let me say that your statement of "successful execution" which I think you 
[ob] mean in regards to performing the validation algorithm is incorrect.

[ob] RFC 6811 clearly states that in case a router chooses not perform origin validation 
[ob] the router SHOULD assign "not-found" to the route, which in my opinion 
[ob] contradicts the definition of "not-found". Out of that reason, I proposed at 
[ob] IETF 103 in Bangkok the introduction of the validation state "unverified" to RFC 6811.

[ob] But this discussion is out of scope for this draft. 
[ob] Nevertheless, in case I can interest you: https://www.ietf.org/proceedings/103/slides/slides-103-sidrops-proposing-validation-state-unverified-00

[ob] Consider the following two received routes: 
[ob] Both routers peer with 1 & 8
[ob] R1 {1,2,3,4,5,6,7,p1}
[ob] R2 {8,9,p1}

[ob] BPV(A,R1) means BGPsec Path Validation for route R1 at router A.
[ob] Policy: Drop 'invalid'.

[ob] Validation:
[ob] BPV(A,R1) = deferred
[ob] BPV(A,R2) = deferred
[ob] BPV(B,R1) = valid
[ob] BPV(B,R2) = invalid

[ob] A defers BPV and selects R2 (shortest path). 
[ob] B on the other hand does perform path validation and selects the
[ob] longer valid route R1 over the shorter and invalid route R2. In fact
[ob] B ignores R2.

[ob] Now without the validation state communicated from B to A, A never
[ob] will know that it selected an invalid route - or more important with
[ob] R2 being valid and therefore more desirable, if A in case of the validation 
[ob] signaled would learn of the validation state for R2 could use policies 
[ob] that selects 'valid' over 'unverified'.

[ob] And yes, there are plenty of values available to craft custom community
[ob] values. And if this draft will not proceed that is what might happen.
[ob] But that would be a big loss, wouldn't it. Why do we standardize, so that
[ob] we do not need to hand craft each and every thing.  I strongly believe, 
[ob] mechanisms like BGPsec, same as RPKI do need standardized communities. 
[ob] They not only allow the vendor to provide an interoperable operator 
[ob] friendly functionality, they also allow third party vendors to create 
[ob] generalized filters in monitoring software without the need to always 
[ob] creating hacks. And as I understood from your earlier comments, communities 
[ob] are a good tool for early adopters - Especially like BGPsec. Even more
[ob] if commercial available monitoring software can filter for them and 
[ob] provide useful functionality to operators. 

[ob] Even though, BGPsec itself only provides the validation results 'valid' and
[ob] 'invalid' - actually it is "Not Valid" but let's stay with 'invalid', 
[ob] what does this mean in a BGPsec world with drop invalid.  We only see valid 
[ob] updates? Of course not - especially if the router needs to defer validation
[ob] due to heavy load. Then what? There is no binary 'valid' or 'invalid'.
[ob] Every time a router receives a route and defer validation, NO assumption
[ob] assumption on the validation state must be made. You said that yourself!  
[ob] So the more knowledge is communicated, the better. 

[ob] So, In my opinion, I do see a very big value in this community attribute.
[ob] It provides an additional data point for route selection - especially during 
[ob] heavy loads.   

[ob] Again, this community attribute not only communicates "valid" and "invalid", 
[ob] it also communicates "unverified". And that in itself is a very good mechanism
[ob] to prevent incorrect assumptions about the validation state of a received 
[ob] route.

        Conclusion
        ----------

[ob] I hope my explanations above helped to clarify your concerns and helped changing
[ob] your view on it. Others did show value and I hope you can join.

[ob] The argument that this attribute has no place because there are not
[ob] enough implementations out there does not make sense to me at all, 
[ob] especially as implementer of one of the open source reference implementations 
[ob] of BGPsec.

[ob] RTR? Do you mean RPKI-to-router as mentioned above? In that case, it has 
[ob] nothing to do with that.

[ob] This document is in no form a replacement of BGPsec path validation - I 
[ob] completely agree with you on that. It is a very helpful tool to allow 
[ob] routers to not break down during heavy loads, make usage of deferring 
[ob] validation until the load on the router goes down but still make usage
[ob] validation state it learned from its peer until own validation can be 
[ob] performed. 

[ob] I hope I could clarify some misunderstandings and concerns,

        Kind regards,

        Job

[ob] Thanks, 
[ob] I will fix that,
[ob] Oliver