Re: [DNSOP] mixfr - issue #10 - Client RRSIG logic simplification

Frederico A C Neves <fneves@registro.br> Wed, 04 April 2018 01:32 UTC

Return-Path: <fneves@registro.br>
X-Original-To: dnsop@ietfa.amsl.com
Delivered-To: dnsop@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id D43EE12D94A for <dnsop@ietfa.amsl.com>; Tue, 3 Apr 2018 18:32:50 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.91
X-Spam-Level:
X-Spam-Status: No, score=-6.91 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001, TVD_PH_BODY_ACCOUNTS_PRE=0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id yOR60WUWKZfG for <dnsop@ietfa.amsl.com>; Tue, 3 Apr 2018 18:32:48 -0700 (PDT)
Received: from clone.registro.br (clone.registro.br [IPv6:2001:12ff:0:2::4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 78C8E12D889 for <dnsop@ietf.org>; Tue, 3 Apr 2018 18:32:48 -0700 (PDT)
Received: by clone.registro.br (Postfix, from userid 1000) id 092822A7C73; Tue, 3 Apr 2018 22:32:46 -0300 (BRT)
Date: Tue, 03 Apr 2018 22:32:46 -0300
From: Frederico A C Neves <fneves@registro.br>
To: Matthijs Mekking <matthijs@pletterpet.nl>
Cc: dnsop@ietf.org
Message-ID: <20180404013246.GE10662@registro.br>
References: <20180329184513.GF62218@registro.br> <c62db666-fc1b-8ef8-8fbb-42443e1b69a0@pletterpet.nl>
MIME-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Disposition: inline
In-Reply-To: <c62db666-fc1b-8ef8-8fbb-42443e1b69a0@pletterpet.nl>
Archived-At: <https://mailarchive.ietf.org/arch/msg/dnsop/ckCvhYeQSHSpiI-7ABzuRvnCJKs>
Subject: Re: [DNSOP] mixfr - issue #10 - Client RRSIG logic simplification
X-BeenThere: dnsop@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: IETF DNSOP WG mailing list <dnsop.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/dnsop>, <mailto:dnsop-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/dnsop/>
List-Post: <mailto:dnsop@ietf.org>
List-Help: <mailto:dnsop-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/dnsop>, <mailto:dnsop-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 04 Apr 2018 01:32:51 -0000

Hi Matthijs,

On Tue, Apr 03, 2018 at 02:37:12PM +0200, Matthijs Mekking wrote:
> Hi Frederico,
> 
> On 03/29/2018 08:45 PM, Frederico A C Neves wrote:
> > I was looking at our server to evaluate the MIXFR implementation and
> > it seams to me that the current text covering dnssec aware client
> > logic don't take in account that a posterior record at the addition
> > section, by an MIXFR DNSSEC aware server, will implicitly replace the
> > RRSIG RRset.
> 
> I am unclear what case you are covering.

Any situation that you have an updated RRset. It is implicit that
you'll have to update the signature, so I was arguing that this is
afterward covered by 3.6 Replace a RRset. My "simplified" logic take
this in account to don't impose this extra logic at the client for
updated RRsets, only for removed RRsets, explicit or when a removal of
RR causes it.

So the actual difference on the wire is one server replacing the RRSIG
and the other adding it. For the client processing is RRSIG removal
logic only at RRset removal in one case and at any change for the
other. Bellow a zone at serial 1 and 2 and the two MIXFR versions.

example.	IN	SOA	serial=1
example.	IN	RRSIG SOA
a.example.	IN	A	192.0.2.1
a.example.	IN	RRSIG A
b.example.	IN	A	192.0.2.2
b.example.	IN	A	192.0.2.3
b.example.	IN	RRSIG A

example.	IN	SOA	serial=2
example.	IN	RRSIG SOA
b.example.	IN	A	192.0.2.3
b.example.	IN	A	192.0.2.4
b.example.	IN	RRSIG A
c.example.	IN	A	192.0.2.5
c.example.	IN	RRSIG A


# "simplified MIXFR"
example.	IN	SOA	serial=2
example.	IN	SOA	serial=1
a.example.	ANY	A
b.example.	IN	A	192.0.2.2
example.	IN	SOA	serial=2
b.example.	IN	A	192.0.2.4
b.example.	ANY	RRSIG A
c.example.	IN	A	192.0.2.5
c.example.	IN	RRSIG A
example.	IN	SOA	serial=2

# "implicit RRSIG removal at any change"
example.	IN	SOA	serial=2
example.	IN	SOA	serial=1
a.example.	ANY	A
b.example.	IN	A	192.0.2.2
example.	IN	SOA	serial=2
b.example.	IN	A	192.0.2.4
b.example.	IN	RRSIG A
c.example.	IN	A	192.0.2.5
c.example.	IN	RRSIG A
example.	IN	SOA	serial=2

> 
> > Logic could be simplified only to Deletions of RRs, when they conclude
> > a removal of a RRset, or RRsets by itself.
> 
> No, also if there is an RR addition, it means the RRset has changed, so 
> existing RRSIG records can be implicitly removed.
> 

That is true but in this case you imply that it will be later added. I
was proposing to replace it.

> > All the other cases, addition or replacement, will be covered
> > automatically by an addition or replace of a RRSIG RRset. There is no
> > need to extra client logic to remove RRSIG, at addition of a RR, and
> > at deletion of a RR if it not remove the RRset.
> 
> Note there is no such thing as an RRSIG RRset. I tried to clarify this 
> in the terminology bis document:

So how do you call, two RR for the same name, type and class in a
double signed zone? Never mind I was not aware of this, thanks! Change
"a RRSIG RRset" by "any RRSIGs" and the logic still stands.

> 
>    https://www.ietf.org/mail-archive/web/dnsop/current/msg22118.html
> 
> Note that adding an RRSIG is different than replacing an RRSIG.

Ok, but we could achive the same end result with both logics and
operations.

> 
> > This is documented as issue #10 and includes proposed text.
> > 
> > https://github.com/matje/mixfr/issues/10
> 
> I think it makes more sense to keep the text as is, that is when 
> changing an RRset implicitly remove the corresponding RRSIG records. I 
> am opposed to only removing corresponding RRSIG on a RR deletion.
> 

I think my version is easyer imposing less checks on clients but I can
live with the current text

I just realized the draft needs a new example for 4.2. The current one
is based on "Delete All RRsets of a Type". This operations was removed
in the current version of the draft.

> Best regards,
>    Matthijs

Fred