Pawel,

Thank you for the detailed review.  I provide responses to your feedback 
embedded below.

-- 
 
JG



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

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

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

On 11/14/22, 12:18 PM, "Pawel Kowalik" <pawel.kowa...@denic.de> wrote:

    Hi,


    As an action item after IETF 115 I reviewed 
    draft-ietf-regext-rdap-redacted-09 before WG LC and have the following 
    questions / remarks:

    Section 3, first paragraph:

     > Redaction in RDAP can be handled in multiple ways.  The use of
     > placeholder text for the values of the RDAP fields, such as the
     > placeholder text "XXXX", MUST NOT be used for redaction.  A
     > placeholder text value will not match the format requirements of each
     > of the RDAP fields and provides an inconsistent and unreliable
     > redaction signal.

    Is the normative language adequate here? Firstly, I am not sure if the 
    text can be well understood.
    Does it mean that use of a fixed placeholder is prohibited, or any 
    placeholder?
    I can imagine a way of using placeholders, which do not necessarily 
    break the format requirements,
    therefore the second sentence shall not categorically tell "will not 
    match" as it may not be even true.

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.  

    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.    

    ---

    Section 3, second paragraph:

    The whole paragraph deals with particularities of redacting jCard with 
    some very specific guidelines and examples.
    Wouldn't it be more and future proof to have a general statement that 
    redacting the data MUST NOT break the underlying data format?
    The same remark applies then later to 3.2. with normative language for 
    jCard redaction.

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.

    ---
    4.2.  "redacted" Member

    The whole "redacted" member and especially the "path" and 
    "replacementPath" members
    shall allow the client to recognise parts of the JSON response which 
    have been transformed
    in the process of redaction.

    Here some interesting questions:
    - do the paths refer to the object before or after the redaction?
    - if the paths refer to the object before the redaction, how should the 
    client be able to interpret the path if not having access to this 
    object, especially the JSONPath may even match multiple paths, e.g. from 
    result and the path the client cannot digest which paths have been 
    really removed? More to that each redaction step is actually 
    transforming the object, so the order of redaction is also relevant in 
    this case. Normalized Paths from JSONPath allow "reversing" the process 
    from the result object if the order of redaction is being held.
    - if the paths refer to the object after the redaction, likely the path 
    member should be OPTIONAL not not required for redaction by removal or 
    replacement, because in this case the object likely does not exist in 
    the result object

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


    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.

    ---

    "pathLang" member

    What is the rationale behind introducing this extension point? Right now 
    the RFC specifies only one language, which is default one. If there will 
    be an additional one I would expect it added by a RFC also answering 
    some questions how to transition from one path language to another. 
    Without any way for the client to express which "pathLang" it would like 
    to get response with, the server would only be able to migrate after all 
    clients support both formats, otherwise risking some clients to break.
    And if this "pathLang" member is to persist, shouldn't there be IANA 
    registry for allowed values, so that the clients have an ide what to 
    implement?

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.

    ---

    3.1.  Redaction by Removal Method

     > The Redaction by Removal Method MUST NOT be used to remove a field
     > using the position in a fixed length array to signal the redacted
     > field.  For example, removal of an individual data field in jCard
     > [RFC7095] will result in a non-conformant jCard [RFC7095] array
     > definition.

    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"?     

    ---

    6.2.  JSON Values Registry

    Registry for "redacted name" allows to identify what has been removed 
    without interpreting it from the path member. This is of a great 
    benefit, looking at the difficulties of interpreting the "path" member I 
    mentioned above.

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

    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.


    ---

    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. 

    ---

    Re previous discussion on multiple email addresses.

    Just a remark that after the last discussion on 
    draft-ietf-regext-epp-eai it may be more common to have more than one 
    email address. Likely RDAP needs to get EAI-aware as well on the 
    response side.

JG - Yes, agreed the provisioning side has a natural impact on RDAP side.  
jCard/vCard includes support for more than one "email" member (Cardinality of 
"*") take handle the use of an alternate email and includes support for UTF-8, 
so there is no need to extend RDAP to support EAI in EPP.    


    Kind Regards,

    Pawel




_______________________________________________
regext mailing list
regext@ietf.org
https://www.ietf.org/mailman/listinfo/regext

Reply via email to