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

"Gould, James" <jgould@verisign.com> Tue, 22 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 ABADFC1522AB; Tue, 22 Nov 2022 05:18:24 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7.097
X-Spam-Level:
X-Spam-Status: No, score=-7.097 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, RCVD_IN_DNSWL_HI=-5, 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 cEYHoBWX6F9t; Tue, 22 Nov 2022 05:18:19 -0800 (PST)
Received: from mail2.verisign.com (mail2.verisign.com [72.13.63.31]) (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 5B5EAC1522B1; Tue, 22 Nov 2022 05:18:18 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verisign.com; l=20286; q=dns/txt; s=VRSN; t=1669123100; h=from:to:cc:subject:date:message-id:content-id: content-transfer-encoding:mime-version; bh=SMQ7Nj/uIzBE3c5K2Y8OQ7lu5xbLQkwOih5PSz2QQ/U=; b=bPRIKjoijzb18h7RAhev6unPJ74J3oL0Qju5Iu/d2LZ3JKN7C0uSDeD8 GkBFllAsJKB7nTqwx3YfimuxLGkuf0VKWyZSnjhm1nvMDx1bEHQIFuIAv OAqVQ/IRhbr3778C+mF4d5RRj1S5IOUcwBpnSDiP3An9rTzLfJFmpOmR2 zTRb4DIs/2qdo7wmHe2E+UD86u9m2mjpC9VeO2jFE4kfeq3XbRcurTOZC dgj/3zjK6VWGoGRHljC1RtkUlfcWYk3TZxhBwq5cNTpZzOQL9V8z9zn4E zbmsCrXB6QSHxWbWpEXEyKXjNRxVldypmMaqNIBqfnjYTBXGzqsAVPQEr A==;
IronPort-Data: A9a23:o8zwuKIs0gLy344xFE+R2pQlxSXFcZb7ZxGr2PjKsXjdYENS0T0Gn 2AfUWiHMvrcZ2OjKtB3O9yzpBkOuZKAytZlTAtorCE8RH908seUXt7xwmUcnc+xBpaaEB84t ZV2hv3odp1coqr0/0/1WlTZhSAgk/vOHtIQMcacUghpXwhoVSw9vhxqnu89k+ZAjMOwa++3k YqaT/b3ZRn0hVaYDkpOs/jZ8Uo15qyu0N8llgdWic5j7Qe2e0Y9Ucp3yZGZdxPQXoRSF+imc OfPpJnRErTxpkpF5nuNy94XQ2VSKlLgFVHmZkl+AsBOtiN/Shkaic7XAtJHMBsK1G/Z9zxG4 I4lWZSYEW/FN4WSwLhNC0Ew/ytWZcWq85efSZSzXFD6I+QrvBIAzt03ZHzaM7H09c5cEDhRz +RJGAoMTT+7ufK0wJahQ9Bj05FLwMnDZOvzu1lK9xeAMtALcciaBbvB4sVAmj48wN5UBvCYb M0cAdZtRE2YJUQQYRFOVcl4wLfAanrXKlW0rHqXqq0q52T70gFr0aPsP9yTcduPLSlQth/I+ zucoz+iav0cHPuS0Ge66lWSv7TOjwzcA9stFZSErPE/1TV/wURWUnX6T2CTov6mg0q/WPpTJ koV8WwioMAa+FaiQMW4XhCkrjuesxERS8YVCeEz8ESXx6bd6BqUCkAFQyJPLts8u6ceXzEl2 0+Vt9LkGTIpt6eaIU9x7Z+etzXrJi4YPTdbIDQaV00A4sKmqoZ1hAjJF5B9CrWzyNbyHFkc3 gy3kcT3vJ1L5eZj6klx1Qmvb+6EznQRcjMI2w==
IronPort-HdrOrdr: A9a23:1gdvY60PfKpWmONix+iK9QqjBG8kLtp133Aq2lEZdPUzSL38qy nOpoV46faaslYssR0b9+xoW5PufZq0z/cc3WB7B8bAYOCJggqVBbAnw4fkzybpBiHyssVMvJ 0NT4FOTPn9F0Jzg8q/wgWpeuxL/PC3tISln/3XwXsodxxtcK0I1WpEIxyWCVJ7XzNLApcFFJ 6Rj/Atmwad
X-IronPort-AV: E=Sophos;i="5.96,184,1665446400"; d="scan'208";a="18512433"
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; Tue, 22 Nov 2022 08:18:16 -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; Tue, 22 Nov 2022 08:18:16 -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: Re: Review of draft-ietf-regext-rdap-redacted-09
Thread-Index: AQHY/nTh5o7YKdIN5Ue3tRrUxug98g==
Date: Tue, 22 Nov 2022 13:18:16 +0000
Message-ID: <E254B96E-810F-42F8-91DA-EDDBBDF9EE00@verisign.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/16.66.22101101
x-originating-ip: [10.170.148.18]
Content-Type: text/plain; charset="utf-8"
Content-ID: <8750290448FB0E4D8D40532BB8834422@verisign.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/nP9BZFbwhOkgiMim9s5upRqCYRs>
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: Tue, 22 Nov 2022 13:18:24 -0000

Pawel,

Thanks again for your feedback.  You'll find my responses to your feedback embedded below with "JG2 -".  

-- 
 
JG



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/>

On 11/16/22, 12:14 PM, "Pawel Kowalik" <kowalik@denic.de> wrote:

    Hi James,

    See my feedback below.

    Am 15.11.22 um 21:15 schrieb Gould, James:
    > [...]
    >
    > JG - The use of placeholder values for redaction is prohibited based on the second normative sentence.  The normative language is needed to implement the redaction defined by the RDAP extension.  I agree that stating "A placeholder text value will not match" is too strong and needs to be changed to "A placeholder text may not match".  This will be changed in the next version of the draft.
    [PK] Yes, the changed text is way better.
    >
    >      My proposal would be to use SHOULD NOT instead of MUST NOT. It can be
    >      useful for the servers willing
    >      still to support clients not implementing this extension in the
    >      transition period to populate fields with placeholders instead of just
    >      empty/missing fields.
    >
    > JG - I understand that there may be a transition period to fully implement the RDAP extension as will be the case of any RDAP extension that standardizes a crosscutting feature like redaction, but weakening the normative language from MUST NOT to SHOULD NOT misses the purpose of the RDAP extension and will result in potentially long running interoperability issues.

    [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.  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.  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.  

    > [...]
    >
    > JG - jCard is currently used in RFC 9083 and the specifics of handling redaction of jCard is an important concept that needs to be covered.  The "Redaction by Empty Value Method" is needed because of jCard.  I believe the combination of jCard being used in RFC 9083 and the definition of a redaction method to support jCard warrants providing the detail.

    [PK] Fine

    > [...]
    > JG - The path refers to the object before the redaction for the Redaction by Removal Method, since the RDAP field was removed.  In this case the path points to where the RDAP field would have been.  The path refers to the object before and after the redaction for the Redaction by Empty Value Method, since the RDAP field exists but has been set to an empty value.  The path refers to the object before the redaction for the Redaction by Replacement Value Method, while the replacementPath refers to the object after the redaction, since it points to the replacement JSON field.  Right, requiring the path to a non-existent JSON fields in the case of the Redaction by Removal Method and the Redaction by Replacement Value Method consequently requires the client to validate the JSONPath expression using a non-redacted RDAP response,, which the client does not have.  Having the JSONPath for where the field would have existed may be useful for a client, but they would need to generate the non-redacted response.

    [PK] It would be of a great value to describe to which object the path 
    refers to to make it clear for the implementers.
    Maybe even worth considering to have 2 distinct members "originalPath" 
    and "responsePath" where each one is clearly defined to be referring to 
    a source or a result object respectively.

JG2 - I believe the object (before or after redaction) can be covered in the description of the redaction methods (Reaction by Removal Method applies to the object before redaction, Redaction by Empty Value Method applies to both the object before and after the redaction, and Redaction by Replacement Value applies to after redaction).  The redaction "method" member provides the needed signal.  The clarification will be added for each of the redaction methods in the next version of the draft.     

    > I don't oppose setting the "path" to OPTIONAL but with normative language specifying that it MUST be included when the JSON field does exist in the redacted response.  Do you agree with this?
    [PK] Yes, I would support that.
    >    
    >
    >
    >      With Section 5 being not-normative and about processing by the server,
    >      the draft should similarly include considerations for processing of the
    >      responses by the clients.
    >
    > JG - Yes, Section 5 provides non-normative considerations for the server.  Offhand I believe considerations #2 "Validate a JSONPath expression using a non-redacted RDAP response" could be applicable when a client receives a response that includes the "path" expression for the Redaction by Removal Method and the Redaction by Replacement Value Method, per the feedback above, but the client would need to generate a template non-redacted RDAP response based on the "path" expressions.  Do you agree with this possible consideration, and do you have any other considerations that should be considered?  If there are useful client considerations, they certainly can be added.

    [PK] The approach with a "template non-redacted RDAP response" may be 
    interesting to take a deeper look into.
    My first impression would be that such fits-all template may be 
    difficult to build, accounting that an entity may have multiple roles 
    assigned or that vCard allows also for custom fields the client would 
    not be aware of.

JG2 - I agree that a fits-all template may be difficult to build, where the template would need to be incrementally updated based on new response patterns.  There may be the need for a template per server or a template per server operator since the approach taken by various servers and server operators may vary too much.  I believe an entity having multiple roles is a corner case and the server can mitigate the corner case by returning copies of the entity each with a single role.  De-normalizing the data makes for larger responses but would simplify things for the clients.  

    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.

    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.  

    > JG - The expression language being stuck with JSONPath was brought up on the list, which resulted in adding the OPTIONAL "pathLang" field.  A new JSON Values Registry field value could be added, like "redacted name" and "redacted reason".  How about the "redacted expression language" Type with a pre-registration of the Value "jsonpath" and the description "JSON path expression language, as defined in draft-ietf-jsonpath-base"?  We would replace draft-ietf-jsonpath-base with the published RFC, which is a normative reference dependency.

    [PK] If WG feels we need to foresee support for more expression 
    languages then the approach with JSON Values Registry is a good proposal.

JG2 - Yes, the WG feedback did include support for more expression languages.  The JSON Values Registry "redacted expression language" Type with a pre-registration of the Value "jsonpath" will be included in the next version of the draft.

    >      Is the first normative sentence meant to apply to every case, or just
    >      the case where removal of such field would render an invalid jCard?
    >      I think there is quite legit way or removing whole objects by position
    >      in a fixed length array, like "path": "$.entities[0]" which should be
    >      still allowed.
    >
    > JG - It's really meant to directly address the jCard use case, but I believe it would apply to all fixed length arrays.  Would it help to clarify this more by updating the language to be "using the fixed field position of a fixed length array"?

    [PK] Does it mean you intend to forbid fixed field positioning in all 
    cases, meaning $.entities[0] would not be allowed?
    In case of jCard I understand this is to prevent breaking the format, 
    where the position plays a distinct role. What is the rationale to block 
    it in all cases?

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?

    > [...]
    >
    > JG - Agreed that the registering a new JSON Values Registry Type and pre-registering the "jsonpath" expression language can help as stated above.

    [PK] Fine

    >      However, semantically, isn't this registry rather defining the members
    >      and objects of RDAP response in a general sense? I mean "Registry Domain
    >      ID" means the same no matter if in context of redaction or in context of
    >      RDAP response and actually IMHO we should make sure it means the same in
    >      any other RDAP context it would be used in the future. IMHO this IANA
    >      registry shall be a generic one defining labels to the information
    >      pieces in RDAP responses.
    >
    > JG - No, the JSON Values Registry defines the values that can be used for fields, which is applicable here for the valid set of "type" field values used in the redacted "name" and "reason" fields.  The same can be done to define the valid field values for the "pathLang" field.  The registered Type values of "redacted name", "redacted reason", and potentially the " redacted expression language" will provide the needed isolation with the other typed values in the registry.

    [PK] I get that. This is just an observation, that "reverse search"  
    will also define a JSON Value Registry" with a mapping of labels to 
    JSONPaths. The risk is to end up with different labels for the same 
    thing in context of redaction or reverse search.

    It would be good to have some voices from the WG if we care about it.

JG2 - I believe the Value entries must be unique per Type.  I don’t see value in attempting to make all Value entries unique across the Types.  Adding the new Type values will support the extensibility needed for redaction with the needed isolation.  

    >      ---
    >
    >      Examples with entity role indexing.
    >
    >      The draft has many examples of the kind
    >      $.entities[?(@.roles[0]=='registrant')] which might be incorrect if an
    >      entity holds multiple roles, as RFC9083 does not specify any particular
    >      order of roles in the array and also depending on the roles held by the
    >      entity the array might have different length. This means that
    >      'registrant' can be at index 0, but also at index 1. The correct
    >      expression would rather be with wildcard index as per 3.5.2. of
    >      JSONPath, like this $.entities[?(@.roles[*]=='registrant')].
    >      The example of multiple roles shows also a tricky corner-case, as the
    >      server may want to redact a contact in one role but same time not redact
    >      it due to other role attached to the same entity. Not sure if JSONPath
    >      allows to express this, but this might remain an implementation detail
    >      of the server and not particularly a concern of this draft (apart from
    >      the questions to 4.2 above).
    >
    > JG - Interesting tricky corner-case.  I do believe it's an implementation detail, where the draft provides a redaction example based on the unredacted response that doesn't require the wildcard.
    [PK] I wanted to bring this up just in case (which obviously never 
    happens) that the implementers of the server just copy-paste the examples...
    > [...]

    Kind Regards

    Pawel