Re: [regext] Review of draft-ietf-regext-rdap-redacted-09

"Gould, James" <jgould@verisign.com> Wed, 23 November 2022 13:18 UTC

Return-Path: <jgould@verisign.com>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CF424C14F74D; Wed, 23 Nov 2022 05:18:01 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.396
X-Spam-Level:
X-Spam-Status: No, score=-4.396 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=verisign.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2QP9iR4_Knzm; Wed, 23 Nov 2022 05:17:57 -0800 (PST)
Received: from mail3.verisign.com (mail3.verisign.com [72.13.63.32]) (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 3FB82C1522AC; Wed, 23 Nov 2022 05:17:39 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verisign.com; l=51832; q=dns/txt; s=VRSN; t=1669209460; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=A7KxfU/Tj273XcFqonP/2iT6S1rSdE8nzR4S6qhzWMQ=; b=JZWytVTl3NpmR+/oA+vFkSbuh+wXUO8HC3x7DkvpXcMOOBQSQAcK8jmO qZJoo+Jx5LllpyhBfI8ccPGFI+8z/jb4ixUSXO90VUJz/VrH9kQXAKjbs x597IMfBYMwA5w1VOUO6mBag6qovKgxOMhG2OgkuWJyYeeTCD5Anf4bFd A7BZE3XinbucYJFw3cuiuYO7+wQjsOU/ZmElXE6z2m+HqNK0Mnf5fnPJQ EsC8yCVNt5ARNCe1mVHz9Ba8klETwixiaRI9QvqGGMDOIuZnAJUIzb5ej QEkyD6vZWPYkf6f6XWVC6jhnpG0QYecvSKNFt/+ZQP785E+BlFB9/KxHG g==;
IronPort-Data: A9a23:X9cTRa90UAlzY1elhuRIDrUDeH+TJUtcMsCJ2f8bNWPdYAuW7oE1v jtCCD7TOv+LfCKrLOnCW/2/ph8G6sXXz9BqS1Fp/3hnQyIQ9sbLCYyUdUmpb3PDf5CSEhNq5 pxANIefJ8pvRC+M+BqnObO99yAlhKqDFuesYAKo1kGdYCc9IMt2oU46wrJRbvdUvOWE7yOxV fLarZCGYlP0gG8vbTxMuq7c8Roxsf2r4jpI4gNubvpH5QWCzilEB58hfqzgdHGQrqu4vAKZb 72akOzmpDOxEzMFUI7NfmPTKxVSKlLqFVHSzCAQA8BOuzAazgQqyKE3KfEAXklejjSNjrhZx c5E3XCKYV5B0pbkxaJMDXG0LwkkZfccoeadeiDl2SCu5xaun0XEkq0G4H4eYNVwFtZfWQlm6 fEeITYRWRGP78reLGWTE7QEamwLdaEHDatH0p1S5Wix4cUOGPgvd573Cepwh1/csOgVRKqDO JBJAdZYRE+ojxVnYj/7AbpgxLv43iGXnzdw8Dp5roJvi4TfIZAYPBEA/7M5d/TTLfi5kHp0q Ur+1UTyPyMWGeXHiiKo2H6yicyfpgX0Ddd6+L2QrpaGgXW5/EpKNzs7ZQPi5+eyjVSmHdtTb VIO4Sxopq83nKCpZoClGUTn+zjd40VaB4o4/+4SsWlhzoLW7AGEAmQsUDNbaccnu8lwTjsvv rOMt4q4WW0w6uPKIZ6b3u2FvBeTIXkZFF8fVRdfFAkZ8f+9rKhm23ojSf4mSsZZlObdGjbvy jSLrwAyirMShogH2s2T8UrOjS7pp5XVQEsv6wraTn7g9A9wfMu/aoCh4kTW4d5BIZqXCF6bs xAsgcWR4fASJZCAiCLLR/8CdIxF/N6PKjuFnlhiD8F4si+z4TimfJsV6jY4Ll1va4AaYyTvJ kTUvGu9+aNuAZdjVocvC6rZNijg5fGI+QjNPhwMUudzXw==
IronPort-HdrOrdr: A9a23:+QJQ4K3GNn8Kfv04K9wotwqjBG8kLtp133Aq2lEZdPUzSL38qy nOpoV46faaslYssR0b9+xoW5PufZq0z/cc3WB7B8bAYOCJggqVBbAnw4fkzybpBiHyssVMvJ 0NT4FOTPn9F0Jzg8q/wgWpeuxL/PC3tISln/3XwXsodxxtcK0I1WpEIxyWCVJ7XzNLApcFFJ 6Rj/Atmwad
X-IronPort-AV: E=Sophos;i="5.96,187,1665446400"; d="png'150?scan'150,208,217,150";a="19497267"
Received: from BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) by BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.16; Wed, 23 Nov 2022 08:17:38 -0500
Received: from BRN1WNEX01.vcorp.ad.vrsn.com ([10.173.153.48]) by BRN1WNEX01.vcorp.ad.vrsn.com ([10.173.153.48]) with mapi id 15.01.2507.016; Wed, 23 Nov 2022 08:17:38 -0500
From: "Gould, James" <jgould@verisign.com>
To: "kowalik@denic.de" <kowalik@denic.de>, "draft-ietf-regext-rdap-redacted@ietf.org" <draft-ietf-regext-rdap-redacted@ietf.org>
CC: "regext@ietf.org" <regext@ietf.org>
Thread-Topic: [EXTERNAL] Re: Review of draft-ietf-regext-rdap-redacted-09
Thread-Index: AQHY/nTh5o7YKdIN5Ue3tRrUxug98q5Mq8UA///TOoA=
Date: Wed, 23 Nov 2022 13:17:38 +0000
Message-ID: <5EA84809-420F-4D91-A0A9-C3D505ADC92F@verisign.com>
References: <E254B96E-810F-42F8-91DA-EDDBBDF9EE00@verisign.com> <d8282bcc-b5a6-de84-2623-49b3c0bf5e4a@denic.de>
In-Reply-To: <d8282bcc-b5a6-de84-2623-49b3c0bf5e4a@denic.de>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/16.66.22101101
x-originating-ip: [10.170.148.18]
Content-Type: multipart/related; boundary="_004_5EA84809420F4D91A0A9C3D505ADC92Fverisigncom_"; type="multipart/alternative"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/AUAwb6NZzpU43472NuPpxGALvH4>
Subject: Re: [regext] Review of draft-ietf-regext-rdap-redacted-09
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 23 Nov 2022 13:18:01 -0000

Pawel,

My responses are embedded with “JG3 –“.

Thanks,


--

JG

[cid:image001.png@01D8FF14.0C23C810]

James Gould
Fellow Engineer
jgould@Verisign.com<applewebdata://13890C55-AAE8-4BF3-A6CE-B4BA42740803/jgould@Verisign.com>

703-948-3271
12061 Bluemont Way
Reston, VA 20190

Verisign.com<http://verisigninc.com/>

From: Pawel Kowalik <kowalik@denic.de>
Date: Wednesday, November 23, 2022 at 5:58 AM
To: James Gould <jgould@verisign.com>, "draft-ietf-regext-rdap-redacted@ietf.org" <draft-ietf-regext-rdap-redacted@ietf.org>
Cc: "regext@ietf.org" <regext@ietf.org>
Subject: [EXTERNAL] Re: Review of draft-ietf-regext-rdap-redacted-09


Hi James,

My comments also inline.
Am 22.11.22 um 14:18 schrieb Gould, James:

[...]



    [PK] Looking at the Abstract and the Introduction of the draft it reads

    "This document describes an RDAP extension for explicitly identifying

    redacted RDAP response fields, using JSONPath as the default expression

    language.". I see a clear focus on "identify", whereas such strong

    normative language actually influences the way the redaction is done. I

    don't think this should be the main focus of this draft and a bit softer

    SHOULD allows to align servers to the best practice without a dilemma if

    one can use the rdapConformance "redacted" even if placeholders are in

    use for whatever reason. Placeholders are perfectly fitting the

    "Redaction by Replacement Value Method", so also fitting the draft.



JG2 - The use of placeholder text, such as "REDACTED", is an alternative approach that is incompatible with the method of redaction defined in this draft.  The draft explicitly states that the use of placeholder text MUST NOT be used for redaction, and it has no impact on the use of placeholder text for other purposes.

[PK2] This is exactly what I allude to. The document describes not only the "extension for explicitly identifying redacted RDAP response fields" but also dictates what methods of redaction are allowed and which not. If there is consensus that the document also shall mandate the methods of redaction I think the Abstract and Introduction part should state it as well.

The real question is whether the goal of making clear what part of the dataset was redacted not enough for this draft.
For the client the indication that some data is not real, don't use it, is just enough of information, no matter if the data was removed, set to null, empty or otherwise replaced, isn't it?

JG3 – What triggered the creation of this extension was a proposal to use placeholder text for redaction, which in my opinion is an anti-pattern that needs to be directly addressed.  I believe that you see the need to support a transition period that would be up to server policy.  See my comment below related to creating a Transition Considerations section to make this explicit.  The draft can define the methods for redaction, disallow the use of placeholder text for redaction outside of a transition period, and add explicit support for a transition period with a set of considerations.  Does this meet your needs?

Populating the existing value with a static placeholder value as a signal for redaction is different from what is defined for the "Redaction by Replacement Value Method", which changes the value to a non-static value or moves the location of the value.
[PK2] I believe it should be perfectly valid to replace one email with another email (for example privacy proxy email) without moving it, shouldn't it? For me it would be "Redaction by Replacement Value Method" where both paths are same.

JG3 – Yes, use of a privacy proxy email is a form of "Redaction by Replacement Value Method", since the real value is not being provided but a replacement value is being used instead.  In this case the “method” value is “replacementValue” and the “replacementPath” is not used.  Does this need to be clarified in the draft, since the intent is to support replacing the value in place or replacing the value using an alternate field, such as the replacement with the “contact—uri” property?


  If I currently implemented placeholder text for the purpose of redaction and I decided to implement redaction using the approach defined in this draft, then I don't see the purpose of running them in parallel even during a transition period, since clients should be notified of the transition and the draft includes the needed signaling using the "redacted" rdapConformance value.  Is there a specific use case that would warrant a softer transition?  If there is a softer transition use case warranted, then adding a Transition Considerations section, such as defined in section 6 of RFC 9154 "EPP Secure Authorization Information for Transfer, may be needed.

[PK2] Assuming the initial situation: RDAP server does not support "redacted" extension and puts the placeholder values and all the clients do not support "redacted" extension but know how to interpret the placeholder.

Now if the server would just turn on "redacted" first, not waiting for the clients, being fully compatible with the extension it would have to change the redaction with either empty value or removal of the fields. By doing this the clients which are not aware of "redacted" extension would potentially break due to changed behavior.

To avoid it the server would have to first make sure all clients support "redacted" before switching. This is somewhat impossible, as client is not informing the server in any way which extension it supports. If it would have a way to inform the server the problem would be gone as well, as server might have offered different representation to different clients. The other way around is to relax the requirement and allow the server operators to manage this.

SHOULD instead of MUST would give the operators a bit more of flexibility and same time none of the benefits of this draft would be lost.

JG3 – Ok, that helps.  I believe the biggest issue from a client perspective is when they expect a non-empty value, and the server implements the Redaction by Empty Value Method and then returns an empty value.  The use of the placeholder redaction text can be used in parallel with draft-ietf-regext-rdap-redacted during a transition period.  The duration of the transition period would be up to server policy.  What I don’t want to introduce is parallel forms of redaction for beyond a transition period.  How about including the definition of a transition period in a Transition Considerations section and updating the MUST NOT language to “The use of placeholder text … MUST NOT be used for redaction outside of a transition period defined in Section X . In the Transition Considerations section, it can define that placeholder redaction text may exist and may overlap with this extension during a transition period that is up to server policy.  Then there can be a set of considerations for the server and client in making the transition.  I believe this would address the transition more explicitly and leave the timing of the transition up to server policy.  Do you agree?

[...]

    Another approach would be to define a way of interpreting the JSONPath

    so that it is reversible or even defining a subset of JSONPath which is

    reversible in the narrower RDAP context.



JG2 - I'm not sure what is meant by JSONPath that is reversable.  I believe that JSONPath needs to be used as defined.
[PK2] Reversable means that you can unambiguously re-create the original object structure based on the path. Normalized JSONPath have this property (see 2.8 of JSONPath draft) but may not be the best in case of array members identified by a property value of array member, like in jCard. The expressions like $.entities[?(@.roles[0]=='registrant')] can be also reversible, but this is not true for just any JSONPath expression. If we would define a narrowed down definition of JSONPath expressions which are allowed, we could achieve the property of reversibility and maybe even that one kind of object or property would have exactly one and only possible JSONPath describing it. Again - it's just an idea how to deal with removed paths. It may be also not worth following if we assume "redacted name" would be the leading property (see below).

JG3 – Thanks for the reference, I’ll review it and see whether something can be used.  My initial thought is that it’s going to be too complex and won’t cover the broad set of use cases in RDAP.  Right now, we’ll assume that it can’t be used in draft-ietf-regext-rdap-redacted, but it’s being reviewed.



    In the end, implementing a client, I would rather want to rely on the

    "redacted name" from the "JSON Values Registry" for paths which have

    been deleted, and treating the path member as only informative.



    If you agree for such processing by the client I suggest to put it down

    in the chapter 5 (maybe splitting it into server and client side).



JG2 - From a client perspective, I believe I would first key off the "redacted name" to route my display logic and then I would utilize a template RDAP response overlaid with the actual response and the JSONPath to indicate the redacted values.  It would be nice to hear from some clients on this to identify useful client JSONPath considerations.
[PK2] If I would be implementing the client likely I will do exactly this.

JG3 – Ok, the “JSONPath Considerations” section will have two subsections of “JSONPath Client Considerations” and “JSONPath Server Considerations”, where the above will be the starting JSONPath client consideration.  How about the JSONPath Client Consideration:

When the server is using the Redaction By Removal Method<file:///Users/jgould/projects/github/rdap-redaction/draft-ietf-regext-rdap-redacted.html#redaction-removal> (Section 3.1<file:///Users/jgould/projects/github/rdap-redaction/draft-ietf-regext-rdap-redacted.html#redaction-removal>) or the Redaction by Replacement Value Method<file:///Users/jgould/projects/github/rdap-redaction/draft-ietf-regext-rdap-redacted.html#redaction-replacement-value> (Section 3.3<file:///Users/jgould/projects/github/rdap-redaction/draft-ietf-regext-rdap-redacted.html#redaction-replacement-value>) with an alternate field value, the JSONPath expression of the "path" member will not resolve successfully with the redacted response. The client can first key off the "name" member for display logic and utilize a template RDAP response overlaid with the redacted response to successfully resolve the JSONPath expression.



[...]



JG2 - Your reference to $.entities[0] is an example of an element in an array, but its' not referring to a fixed field position of a fixed length array, such as the case for redacting the "fn" jCard property.  There is no intent to block all cases of redacting objects via the use of an array position.  Is there better language than "using the fixed field position of a fixed length array" to provide the proper scope?

OK, now I get it. My proposal would be: "The Redaction by Removal Method MUST NOT be used to remove an element of an array where position of the elements in the array determines semantic meaning of the element."

JG3 – Just a tweak, how about “The Redaction by Removal Method MUST NOT be used to remove an element of an array where the position of the element in the array determines semantic meaning.”?



Kind Regards,

Pawel