Thanks Marco for taking my comments into consideration and providing
detailed feedback! LGTM!

On Fri, May 10, 2024 at 7:04 PM Marco Tiloca <marco.til...@ri.se> wrote:

> Hello Dhruv,
>
> Thanks a lot for your review! Please find in line below our detailed
> replies to your comments.
>
> A Github PR where we have addressed your comments is available at [PR].
>
> Unless any concern is raised, we plan to soon merge this PR (and the other
> ones related to other received reviews), and to submit the result as
> version -07 of the document.
>
> Thanks,
> /Marco
>
> [PR] https://github.com/ace-wg/ace-revoked-token-notification/pull/9
>
> On 2024-04-01 19:51, Dhruv Dhody via Datatracker wrote:
>
> Reviewer: Dhruv Dhody
> Review result: Has Issues
>
> # OPSDIR review of draft-ietf-ace-revoked-token-notification-06
>
> I have reviewed this document as part of the Operational directorate's ongoing
> effort to review all IETF documents being processed by the IESG.  These
> comments were written with the intent of improving the operational aspects of
> the IETF drafts. Comments that are not addressed in the last call may be
> included in AD reviews during the IESG review.  Document editors and WG chairs
> should treat these comments just like any other last-call comments.
>
> The document provides a mechanism for the Authorization Server to notify about
> revoked access tokens via access to a Token Revocation List (TRL) on the
> Authorization Server via CoAP. The document is clear and well-written. The
> motivation is described well. The document is almost ready for publication.
>
> ## Operational Concern
> - I am worried that the admin authorization is kept out of scope. I could not
> find how it is handled in the ACE framework and if this is acceptable. At the
> very least some hint or example can be provided... ````
>    *  Administrator: entity authorized to get full access to the TRL at
>       the AS, and acting as a requester towards the TRL endpoint.  An
>       administrator is not necessarily a registered device as defined
>       above, i.e., a Client requesting access tokens or an RS consuming
>       access tokens.  How the administrator authorization is established
>       and verified is out of the scope of this specification.
> ````
>
>
> ==>MT
>
> The ACE framework (RFC 9200) does not define the concept of
> "administrator", as it is not part of the main workflow where a Client
> requests an access token from an AS to be consumed by an RS.
>
> The concept of "administrator" was introduced here as an entity that can
> have full access to the TRL, i.e., all the access tokens that the AS issues
> pertain to an administrator.
>
> On the topic of authorized administrators, the document has some text, but
> admittedly quite short and buried in Section 13.1 of the Security
> Considerations, i.e.:
>
> > Therefore, the AS MUST ensure that, other than registered devices
> accessing their own pertaining subset of the TRL, only authorized and
> authenticated administrators can retrieve the full TRL. To this end, the AS
> may rely on an access control list or similar.
>
>
> In order to address this comment, we have made the following changes:
>
>
> * In the quoted definition of "administrator" in Section 1.1, we have
> removed the sentence "How the administrator authorization is established
> and verified is out of the scope of this specification."
>
>
> * In Section 5, we have extended the third paragraph as follows:
>
>    OLD:
>    > The AS MUST implement measures to prevent access to the TRL endpoint
> by entities other than registered devices and authorized administrators.
>
>    NEW:
>    > The AS MUST implement measures to prevent access to the TRL endpoint
> by entities other than registered devices and authorized administrators
> (see Section 9).
>
>
> * In Section 9, we have added the following new paragraph, before the
> current last paragraph "Further details about ...":
>
>    NEW:
>    > When communicating with one another, the registered devices and the
> AS have to use a secure communication association and be mutually
> authenticated (see Section 5 of [RFC9200]).
>    >
>    > In the same spirit, it MUST be ensured that communications between
> the AS and an administrator are mutually authenticated, encrypted and
> integrity protected, as well as protected against message replay.
>    >
>    > Before starting its registration process at the AS, an administrator
> has to establish such a secure communication association with the AS, if
> they do not share one already. In particular, mutual authentication is
> REQUIRED during the establishment of the secure association. To this end,
> the administrator and the AS can rely, e.g., on establishing a TLS or DTLS
> secure session with mutual authentication [RFC8446][RFC9147], or an OSCORE
> Security Context [RFC8613] by running the authenticated key establishment
> protocol EDHOC [RFC9528].
>    >
>    > When receiving authenticated requests from the administrator for
> accessing the TRL endpoint, the AS can always check whether the requester
> is authorized to take such a role, i.e., to access the full TRL.
>    >
>    > To this end, the AS may rely on a local access control list or
> similar, which specifies the authentication credentials of trusted,
> authorized administrators. In particular, the AS verifies the requester to
> the TRL endpoint as an authorized administrator, only if the access control
> list includes the same authentication credential used by the requester when
> establishing the mutually-authenticated secure communication association
> with the AS.
>
>
> * In Section 13.1, we have made the following rephrasing:
>
>   OLD:
>   > Therefore, the AS MUST ensure that, other than registered devices
> accessing their own pertaining subset of the TRL, only authorized and
> authenticated administrators can retrieve the full TRL. To this end, the AS
> may rely on an access control list or similar.
>
>   NEW:
>   > Therefore, the AS MUST ensure that, other than registered devices
> accessing their own pertaining subset of the TRL, only authorized and
> authenticated administrators can retrieve the full TRL (see Section 9).
>
> <==
>
> - Section 5.1, if the TRL maintains MAX_N items only and if the diff is larger
> than that wouldn't some of the diffs be lost when the requester finally makes 
> a
> request? I would have assumed that in such a case we indicate it that to the
> requester and it could issue a full query instead. But MAX_N is applicable for
> full query as well. Perhaps that is okay for most deployments, but let's be
> explicit about that in the document.
>
>
> ==>MT
>
> First, we would like to clarify a few details.
>
> The TRL maintains token hashes. The number of token hashes stored in the
> TRL is capped by the number of access tokens that are issued by the AS and
> are not expired yet.
>
> Also, MAX_N is not related to full queries, since it plays a role only for
> diff queries.
>
> That is, MAX_N is a single, constant value at the AS, and indicates the
> maximum number of TRL updates that the AS maintains for each different
> administrator or registered device (i.e., the updates occurred to the
> portion of the TRL pertaining to that administrator or registered device).
> These updates are maintained in a dedicated, per-device update collection,
> whose maximum size is MAX_N.
>
> Eventually, the number of occurred updates pertaining to a device can
> indeed become more than MAX_N. From then on, due to the size of that
> device's update collection limited to MAX_N, the AS will discard an update
> from the update collection when that update becomes the oldest one in the
> collection. This process is defined in step 5 of Section 5.1, as part of
> updating an update collection with the insertion of a new series item:
>
> > 5. If the update collection associated with the requester currently
> includes MAX_N series items, the AS MUST delete the oldest series item in
> the update collection.
> >
> >    This occurs when the number of TRL updates pertaining to the
> requester and currently stored at the AS is equal to MAX_N.
>
>
> That said, the following focuses on the raised issue.
>
> If a diff query request does not use the "Cursor" extension [0] (e.g., the
> extension is not supported by the device or the AS), then indeed the device
> may never notice through diff queries that an update has occurred and has
> been lost forever. For example, the following can happen:
>
> 1. An access token TOKEN is issued as pertaining to a device DEVICE. Let's
> say that TOKEN has an expiration time that is very far in the future.
>
> 2. After some time, DEVICE sends a diff query request to the AS. The diff
> query request does not use the "Cursor" extension, and is not a CoAP
> Observation request. In the follow-up response, the AS provides DEVICE with
> the current items from the related update collection.
>
> 3. TOKEN gets revoked, and the AS adds to the update collection of DEVICE
> an item ITEM that reflects the revocation of TOKEN (i.e., it reflects the
> addition of the token hash to the TRL).
>
> 4. Due to several revocations and follow-up expiration of access tokens
> pertaining to DEVICE, the AS adds a lot of new series items to the update
> collection related to DEVICE.
>
> 5. Eventually, the update collection reaches size MAX_N. Later on, ITEM
> becomes the oldest series item. Further later, a new series item is added
> to the update collection, which results in deleting ITEM from the update
> collection.
>
> 6. DEVICE sends a new diff query request to the AS. By doing so, DEVICE
> retrieves all the current series items in its related update collection,
> but does not learn that TOKEN was revoked and thus keeps storing it.
>
> [0] See "Case A" in Section 8.2.3. If the diff query request uses the
> "Cursor" extension and its 'cursor' query parameter has a value that refers
> to a very old, deleted series item, then the follow-up response from the
> TRL informs the requester that what is being requested was deleted and
> cannot be provided. After that, as also stated in Section 8.2.3, the
> requester should indeed send a full query request to the TRL endpoint.
>
>
> In order to address your comment and situations like the above, we have
> added the following new text at the end of Section 10.0 "Notification of
> Revoked Access Tokens".
>
> > As specified in Section 5.1, an AS supporting diff queries maintains an
> update collection of maximum MAX_N series items for each administrator or
> registered device, hereafter referred to as requester. In particular, if an
> update collection includes MAX_N series items, adding a further series item
> to that update collection results in deleting the oldest series item from
> that update collection.
> >
> > From then on, the requester associated with the update collection will
> not be able to retrieve the deleted series item, when sending a new diff
> query request to the TRL endpoint. If that series item reflected the
> revocation of an access token pertaining to the requester, then the
> requester will not learn about that when receiving the corresponding diff
> query response from the AS.
> >
> > Sending a diff query request specifically as an Observation request, and
> thus relying on Observe notifications, largely reduces the chances for a
> requester to miss updates occurred to its associated update collection
> altogether. In turn, this relies on the requester successfully receiving
> the Observe notification responses from the TRL (see also Section 13.3).
> >
> > In order to limit the amount of time during which the requester is
> unaware of pertaining access tokens that have been revoked but are not
> expired yet, a requester SHOULD NOT rely solely on diff query requests. In
> particular, a requester SHOULD also regularly send a full query request to
> the TRL endpoint according to a related application policy.
>
>
> Furthermore, we have also turned a "should" into a normative "SHOULD", in
> Section 8.2.3 when specifying the "Case A" mentioned above. That is:
>
> OLD:
> > When receiving this diff query response, the requester should send a new
> full query request to the AS.
>
> NEW:
> > When receiving this diff query response, the requester SHOULD send a new
> full query request to the AS.
>
> <==
>
> ## Minor
> - Thanks for including the description of "endpoint" in Section 1.1 but the
> term is used in the Abstract and Introduction where it confused me on first
> reading. I suggest adding a forward reference in the Introduction to avoid
> confusion. Also in section 1.1, it would be better if we have a reference to
> the OAuth document where the term originates from.
>
>
> ==>MT
>
> We have rephrased as follows:
>
> OLD (Section 1.0):
> > ... and it does not require any additional endpoints on the registered
> devices.
>
> NEW (Section 1.0):
> > ... and it does not require the registered devices to support any
> additional endpoints (see Section 1.1).
>
> OLD (Section 1.1):
> > Note that, unless otherwise indicated, the term "endpoint" is used here
> following its OAuth definition, aimed at ...
>
> NEW (Section 1.1):
> > Note that the term "endpoint" is used here following its OAuth
> definition [RFC6749], aimed at ...
>
> <==
>
> - Is there a suitable
> reference for "CBOR diagnostic notation"?
>
>
> ==>MT
>
> Indeed. As part of a planned clarification on this point, we have
> rephrased the last paragraph of Section 1.1 as follows:
>
> OLD:
> > Examples throughout this document are expressed in CBOR diagnostic
> notation without the tag and value abbreviations.
>
> NEW
> > Examples throughout this document are expressed in CBOR diagnostic
> notation as defined in Section 8 of [RFC8949] and Appendix G of [RFC8610].
> Diagnostic notation comments are often used to provide a textual
> representation of the numeric parameter names and values.
>
> <==
>
> - Section 3, I suggest mentioning
> that 0x58 identifies byte string with one-byte for n.
>
>
> ==>MT
>
> When taking into account a comment from the GENART review, we have revised
> this section and updated the definition of HASH_INPUT.
>
> The updated design considers the **value** of the CBOR byte string
> conveyed by the parameter 'access_token' in Figure 2.
>
> Consequently, from the example in Figure 2, the bytes (0xd0 0x83 ...) are
> mentioned as relevant to understand how to build HASH_INPUT, hence the byte
> 0x58 is not mentioned anymore.
>
> <==
>
> - Section 5.1 "The AS
> SHOULD provide requesters with the value of MAX_N, upon their registration",
> how about we make it a MUST and quality it with if diff is supported?
>
>
> ==>MT
>
> This change looks good.
>
> The use of SHOULD was paired with the implicit exception "unless
> registered devices are pre-configured with the value of MAX_N and the AS is
> aware of that".
>
> We have made the following changes:
>
> OLD (Section 5.1):
> > The AS SHOULD provide requesters with the value of MAX_N, upon their
> registration (see Section 9).
>
> NEW (Section 5.1):
> > If the AS supports diff queries, the AS MUST provide requesters with the
> value of MAX_N, upon their registration (see Section 9).
>
> OLD (Section 9):
> > * Optionally, a positive integer MAX_N, if the AS supports diff queries
> of the TRL (see Section 5.1 and Section 7).
>
> NEW (Section 9):
> > * A positive integer MAX_N, if the AS supports diff queries of the TRL
> (see Section 5.1 and Section 7).
>
> <==
>
> - Section
> 5.1.1 "If supporting the "Cursor" extension, the AS SHOULD provide registered
> devices and administrators with the value of MAX_DIFF_BATCH...", why SHOULD? I
> think this should be a MUST!
>
>
> ==>MT
>
> This change looks good.
>
> Like for the previous comment about MAX_N, the use of SHOULD was paired
> with the implicit exception "unless registered devices are pre-configured
> with the value of MAX_DIFF_BATCH and the AS is aware of that".
>
> Please note that the functionality and correctness of the protocol do not
> depend on the registered devices being aware of the value of MAX_DIFF_PATCH
> or not. Its impact only influences the number of update entries included in
> a same response from the TRL endpoint at the AS.
>
> However, in the same spirit of the change above for MAX_N, providing
> registered devices with MAX_DIFF_BATCH is also an explicit indication of
> the AS supporting the "Cursor" extension of diff queries, and sets
> expectations about the number of update entries to expect in a same
> response from the TRL endpoint.
>
> We have made the following changes:
>
> OLD (Section 5.1):
> > If supporting the "Cursor" extension, the AS SHOULD provide registered
> devices and administrators with the value of MAX_DIFF_BATCH, upon their
> registration (see Section 9).
>
> NEW (Section 5.1):
> > If supporting the "Cursor" extension, the AS MUST provide registered
> devices and administrators with the value of MAX_DIFF_BATCH, upon their
> registration (see Section 9).
>
> OLD (Section 9):
> > * Optionally, a positive integer MAX_DIFF_BATCH, if the AS supports diff
> queries of the TRL as well as the related "Cursor" extension (see Section
> 5.1.1 and Section 8).
>
> NEW (Section 9):
> > * A positive integer MAX_DIFF_BATCH, if the AS supports diff queries of
> the TRL as well as the related "Cursor" extension (see Section 5.1.1 and
> Section 8).
>
> <==
>
> - Section 7, "SIZE <= MAX_N" but it is unclear
> what exactly SIZE is, please add explicit text.
>
>
> ==>MT
>
> What follows in the original sentence is the definition of SIZE, i.e.:
>
> > The AS determines U = min(NUM, SIZE), where SIZE <= MAX_N is the number
> of TRL updates pertaining to the requester and currently stored at the AS.
>
> To clarify, we have rephrased as follows:
>
> NEW
> > The AS determines U = min(NUM, SIZE), where SIZE <= MAX_N. In
> particular, SIZE is the number of TRL updates pertaining to the requester
> and currently stored at the AS.
>
> <==
>
> - Section 14.1, should the
> change controller be IETF instead?
>
>
> ==>MT
>
> Indeed. As already planned for addressing the IANA considerations, we have
> made the following change.
>
> OLD:
> > Author: Marco Tiloca <marco.til...@ri.se> <marco.til...@ri.se>
> >
> > Change controller: IESG
>
> NEW:
> > Author/Change controller: IETF
> >
> > Provisional registration: No
>
> <==
>
> ## Nits
> - Don't use "the CoAP protocol", the P in CoAP is already protocol!
>
>
> ==>MT
>
> The document has two instances of "CoAP protocol", both of which are in
> Section 1.1.
>
> We have fixed the instance in the fourth paragraph:
>
> OLD:
> > the CoAP protocol [RFC7252], ...
>
> NEW:
> > CoAP [RFC7252], ...
>
> We have kept the other instance in the fifth paragraph, as it is a
> verbatim quote from Section 1.1 of the CoAP specification (RFC 7252) where
> the quoted definition of "CoAP endpoint" is provided:
>
> > This document does not use the CoAP definition of "endpoint", which is
> "An entity participating in the CoAP protocol."
>
> <==
>
> - s/as interested to receive notifications/as interested in receiving
> notifications/ - s/recent updates occurred over the list/recent updates that
> occurred over the list/ - s/with value the token hash of an access token/with
> the value of the token hash of an access token/ - s/The processing of a full
> query and the related response format are defined in/The processing of a full
> query and the related response format is defined in/ - s/other than 0 or than 
> a
> positive integer/other than 0 or a positive integer/ - s/registers at the AS
> until a first update/registers at the AS until the first update/ - 
> s/pertaining
> to the requester occurred to the TRL./pertaining to the requester that 
> occurred
> to the TRL./ - s/registers at the AS until a first update/registers at the AS
> until the first update/ - s/Once completed the registration procedure at the
> AS,/Once the registration procedure is completed at the AS,/ - s/the Client is
> not aware about that yet,/the Client is not aware of that yet,/
>
>
> ==>MT
>
> We have made all the fixes above as suggested, except for the following
> ones:
>
> * As to the suggestion
>
>   > s/with value the token hash of an access token/with the value of the
> token hash of an access token/
>
>   The full sentence is
>
>   > Each element of the array is a CBOR byte string, with value the token
> hash of an access token ...
>
>   We think that the current phrasing is correct. Please note that nowhere
> does the document use the expression "value of the token hash".
>
>
> * As to the suggestion
>
>   > s/other than 0 or than a positive integer/other than 0 or a positive
> integer/
>
>   We have made a different rephrasing, to avoid any potential
> misunderstanding
>
>   OLD:
>   > has a value other than 0 or than a positive integer
>
>   NEW:
>   > has a value that is neither 0 nor a positive integer
>
>
> * As to the suggestion
>
>   > s/Once completed the registration procedure at the AS,/Once the
> registration procedure is completed at the AS,/
>
>   We have made a different rephrasing, to be consistent with what was
> suggested in other reviews:
>
>   OLD:
>   > Once completed the registration procedure at the AS, ...
>
>   NEW:
>   > Once registered at the AS, ...
>
>
> * As to the suggestion
>
>   > s/the Client is not aware about that yet,/the Client is not aware of
> that yet,/
>
>   We have made a different rephrasing, to be consistent with what was
> suggested in other reviews:
>
>   OLD:
>   > For example, the access token has actually been revoked and the Client
> is not aware about that yet, while the RS has gained knowledge about that
> and has expunged the access token.
>
>   NEW:
>   > For example, the access token has been revoked, and the RS has become
> aware of it and has expunged the access token, but the Client is not aware
> of it (yet).
>
> <==
>
>
> --
> Marco Tiloca
> Ph.D., Senior Researcher
>
> Phone: +46 (0)70 60 46 501
>
> RISE Research Institutes of Sweden AB
> Box 1263
> 164 29 Kista (Sweden)
>
> Division: Digital Systems
> Department: Computer Science
> Unit: Cybersecurity
> https://www.ri.se
>
>
_______________________________________________
Ace mailing list -- ace@ietf.org
To unsubscribe send an email to ace-le...@ietf.org

Reply via email to