On Wed, May 12, 2021 at 3:32 PM Eric Orth <ericorth= 40google....@dmarc.ietf.org> wrote:
> > > On Wed, May 12, 2021 at 6:21 PM John Levine <jo...@taugh.com> wrote: > >> It appears that Joe Abley <jab...@hopcount.ca> said: >> >> Agreed that there is no such issue with either wire format if all >> parties in the ecosystem are bug-free and RFC-compliant. >> > >> >Do you know of an example of a DNS authoritative or recursive server >> that does return truncated RRSets in the ANSWER section? >> > > Honestly, those aren't the caches I'm worried about. What worries me the > most is the caching layers between the recursive and the client (e.g. > forwarders and various libraries on the enduser machine, including caching > in various clients themselves). While I don't have any examples in mind > specifically of these layers messing up RRSet cohesion, there are many > examples of various bugs in these layers (e.g. see all the recent > "name:wreck" fun), and there are a million implementations (hyperbolic) to > worry about. > > And given that these layers are typically past the last DNSSEC validation, > there is not a lot here to historically depend on fully correct behavior. > Who would have noticed if some bug in a client means that every once in a > while it's only attempting connections on 4 out of the 5 addresses it's > supposed to have received? > > My overall point is that I'm strongly in favor of the wire format with > less potential points of failure in correctly transmitting and stitching > together the individual components of endpoint information that really need > to stay cohesive. > Unless you have a guarantee that the client can always obtain the full and complete RRset from the resolver in non-attack situations, you already have a major problem (i.e. even assuming each SVCB plus SvcParameters is a single RR, but where more than one SVCB are published in an RRset). There are multiple problems, if you cannot guarantee the RRset being delivered to the client: 1. If an RRset contains both an AliasMode and a ServiceMode record, the client MUST ignore all ServiceMode records (per 2.4.1 of the draft). If the complete RRset is not returned, the client cannot be guaranteed to pick the right record. 2. If an RRset contains multiple ServiceMode records, the client SHOULD start making connection attempts with the highest priority record. If the complete RRset is not returned, the client cannot be guaranteed to pick the right record(s) in the right order. Note that if the client API to DNS only returns a single RR from an RRset, this will not in any way depend on the SvcPriority value, as that is an opaque value within the randomly-ordered RRset. So, either the client is guaranteed to get all the RRset members (and the draft is a viable approach to the intended goal), or it isn't (and it isn't). If the guarantee is present and applicable to the existing parts of the draft, it also absolutely guarantees the necessary preconditions for combining the key/value elements if they are split into different RRs in the RRset (rather than one combined entity). The entire path from resolver to client has to work for the existing draft to function as intended. And if it does, it is mathematically impossible for the split key/value mechanism to not also work. It is demonstrably more likely that a complex parser will have problems, than something that combines data from simple RRs in simple RRsets will have problems. (The history of SMTP is, I think, a good poster child for this, with MX, A, AAAA, plus DNSSEC and TLSA support in the clients, which are email transport things, not merely DNS things.) Brian
_______________________________________________ DNSOP mailing list DNSOP@ietf.org https://www.ietf.org/mailman/listinfo/dnsop