One more update on this one: I cancelled the last-call request, because my
discussions with Ludwig about the core framework indicated a strong chance
that we'll want to tweak how rs_cnf works, and we should of course reflect
any change to rs_cnf in this document as well.

Further updates (hopefully) in the framework's thread.

-Ben

On Mon, Nov 18, 2019 at 09:42:41PM -0800, Benjamin Kaduk wrote:
> On Sun, Nov 17, 2019 at 04:45:04AM +0100, Ludwig Seitz wrote:
> > On 15/11/2019 13:14, Benjamin Kaduk wrote:
> > > Hi all,
> > > 
> > > I'm mostly just nitpicking in the following comments; the actual content
> > > here is in good shape.  (But some of these are popular things that
> > > directorate reviewers like to complain about, so fixing them preemptively
> > > seems wise.)
> > > 
> > > Section 1
> > > 
> > >     access tokens.  These parameters and claims can also be used in other
> > >     contexts, and may need to be updated to align them with ongoing OAuth
> > >     work.  Therefore they have been split out into this document, which
> > >     can be used and updated independently of [I-D.ietf-ace-oauth-authz].
> > > 
> > > I expect that we'll get some reviewers who want to wordsmith this last
> > > sentence.  It's fine to wait and see what suggestions come in (if any),
> > > but if you want to try to forestall those, my suggestion would be:
> > > 
> > > % Therefore, these parameters and claims have been put into a dedicated
> > > % document, to facilitate their use and any potential updates in a manner
> > > % independent of [I-D.ace-oauth-authz].
> > > 
> > Done.
> > 
> > > Section 3.1
> > > 
> > >     req_cnf
> > >        OPTIONAL.  This field contains information about the key the
> > >        client would like to bind to the access token for proof-of-
> > >        possession.  It is RECOMMENDED that an AS reject a request
> > >        containing a symmetric key value in the 'req_cnf' field, since the
> > >        AS is expected to be able to generate better symmetric keys than a
> > >        potentially constrained client.  The AS MUST verify that the
> > > 
> > > nit: I'd wordsmith this a bit, since the idea is that the AS-generated
> > > key will be better than one generated by a constrained client, but a
> > > non-constrained client can probably do just fine at keygen.  So,
> > > I'd consider dropping "potentially", as the rest of the sentence does
> > > not have anything to imply that all clients using this claim are
> > > constrained.
> > > 
> > Done.
> > 
> > >     Payload:
> > >     {
> > >        "req_cnf" : {
> > >           "COSE_Key" : {
> > >              "kty" : "EC",
> > >              "kid" : h'11',
> > >              "crv" : "P-256",
> > >              "x" : b64'usWxHK2PmfnHKwXPS54m0kTcGJ90UiglWiGahtagnv8',
> > >              "y" : b64'IBOL+C3BttVivg+lSreASjpkttcsz+1rb7btKLv8EX4'
> > >           }
> > >        }
> > >      }
> > > 
> > >     Figure 1: Example request for an access token bound to an asymmetric
> > >                                     key.
> > > 
> > > Shouldn't an access token request have an authorization code?
> > > The other parameters from Section 4.1.3 of RFC 6749 have conditions
> > > attached to their REQUIRED status, but not "code".
> > >
> > In draft-ietf-ace-oauth-authz section 5.6.1. (Client-to-AS Request) we 
> > specify that when the "grant_type" parameter is missing, then 
> > "client_credentials" is implied, which in turn means that the client 
> > does not need an authorization code.  Section 4.1.3 of RFC 6749 is about 
> > the authorization code grant, you are looking at the ACE-ified version 
> > of Section 4.4
> 
> Ah, thanks.  I remembered that we had a default "grant_type" but was too
> fast when trying to check the other (sometimes-)required parameters.
> 
> > > Section 3.2
> > > 
> > >     cnf
> > >        REQUIRED if the token type is "pop" and a symmetric key is used.
> > > 
> > > Just to check, this means that if the client includes a symmetric 'cnf'
> > > key and the AS ignores the prior recommendation to ignore such a
> > > symmetric confirmation key in the request, the AS still has to echo
> > > back the symmetric key that is in use?  (There's also potentially some
> > > interesting interactions if we use a 'kid'.)
> > 
> > Indeed as the drafts are written right now, that would be the expected
> > AS behaviour. This is not entirely intentional, and my only objection to 
> > changing it at this time is that writing specification text handling 
> > interactions we are recommending against (i.e. accepting 
> > client-suggested symmetric keys) seems icky.
> > As for 'kid' I'd just expect the AS to echo back the kid, not the actual 
> > key.
> 
> I don't see any obvious problems from this behavior, so leaving it as-is
> seems like the right thing to do for now.
> 
> > > 
> > >        MAY be present for asymmetric proof-of-possession keys.  This
> > >        field contains the proof-of-possession key that the AS selected
> > >        for the token.  Values of this parameter follow the syntax of the
> > > 
> > > And to check here again, the omitted 'cnf' in the response means that he
> > > AS accepted the client's requested asymmetric key?  (There wouldn't be a
> > > case where the AS rejects an offered asymmetric key and replaces it with
> > > a new one, right?)
> > Indeed that is correct. Note that there could be cases where an AS 
> > rejects an offered asymmetric key and replaces it by another one. This 
> > would be if the AS knows that the RS doesn't support this key format,
> > and also knows that the client holds another public key which is 
> > actually supported by the RS.
> 
> Thanks for pointing out that scenario :)
> 
> > > 
> > >     rs_cnf
> > >        OPTIONAL if the token type is "pop" and asymmetric keys are used.
> > >        MUST NOT be present otherwise.  This field contains information
> > >        about the public key used by the RS to authenticate.  If this
> > >        parameter is absent, either the RS does not use a public key or
> > >        the AS assumes that the client already knows the public key of the
> > >        RS.  Values of this parameter follow the syntax of the "cnf" claim
> > > 
> > > I'd prefer to not word this as "the AS assumes", as that implies that we
> > > will end up with a fragile overall system.  Can we say something more
> > > along the lines of "when the AS knows that the RS can authenticate
> > > itself to the client without additional information"?  (I expect that
> > > less awkward wordings than the above are possible...)
> > >
> > Done.
> > 
> > 
> > >        from section 3.1 of [I-D.ietf-ace-cwt-proof-of-possession].  See
> > >        Section 5 for details on the use of this parameter.
> > > 
> > > Also (both here and above), I'd suggest s/details on the use of this
> > > parameter/additional discussion of the usage of this parameter/; we do not
> > > go into a huge amount of detail in Section 5.
> > Done.
> > 
> > > 
> > > I don't think the caption for Figure 3 is quite right...
> > Fixed.
> > 
> > > 
> > > Also, Figures 2 and 3 are using the same "SlAV32hkKG ..." access token
> > > snippet that we changed in the core spec, so we should probably change
> > > it here as well.
> > I changed the one in figure 3 to the same snippet I used which an 
> > asymmetric pop key in the core spec. The snippet in figure 2 is still in 
> > the core spec, so I left it here as well.
> > 
> > > 
> > > Section 3.3
> > > 
> > > In the symmetric-key case this basically degenerates to
> > > Needham-Schroeder (but I also don't expect anyone to use this with
> > > symmetric keys).
> > > However, for asymmetric keys, we might assume that the AS is not
> > > creating a new asymmetric keypair for the RS to use, and instead
> > > referring to one already known to the RS, e.g., just via the public
> > > part.  I can't quite decide whether the RS should always blindly trust
> > > the AS in this regard, or might want to have an additional policy layer
> > > that would allow for "I do not want to use this public key with this
> > > specific client".  Any such benefit from that would be subtle, as
> > > presumably the AS has already told the client the same key, and so the
> > > RS is limited to merely not presenting cryptographic evidence to the
> > > client that it holds the private key (as opposed to the client trusting
> > > the AS as trusted-third-party that the RS has that key).
> > > I guess that suggests that there's no need for additional policy on the
> > > RS, and we don't need any more text here.
> > > 
> > Actually I had asymmetric keys in mind when I created this claim.
> > Since one could imagine protocols using different symmetric keys for 
> > client and RS though, so I wouldn't want to restrict this to
> > asymmetric-only.
> > Also: yes, the idea was that the AS just uses the public part of an 
> > asymmetric key, of which it knows that the RS has the corresponding 
> > private part.
> > Do you want me to make this more explicit?
> 
> This seems like a case where more text would not provide enough value to
> justify its presence.  I don't think there's really anything to be confused
> about that requires clarification; there are just some cases where the AS
> might do something that's a little weird but is not harmful.
> 
> > > Section 5
> > > 
> > >     o  "req_cnf" in the access token request C -> AS, OPTIONAL to
> > >        indicate the client's raw public key, or the key-identifier of a
> > >        previously established key between C and RS that the client wishes
> > >        to use for proof-of-possession of the access token.
> > > 
> > > There's potentially an interesting question here about whether the AS
> > > has to, can, or shouldn't assign semantics to key identifiers.  The part
> > > most needed for interoperability is, of course, that the RS knows to map
> > > an incoming kid to an actual key, and the parallel that the client knows
> > > that the (kid, key, RS) tuple is usable.  I don't see a reason why the
> > > AS needs to have semantics to a given kid for interoperability, though
> > > perhaps there will be some scenarios where the AS manages the kid
> > > namespace at a given RS as opposed to the RS doing so.  But, on the
> > > other hand, having the AS not give semantics to 'kid' turns the AS into
> > > a dumb transport, which tends to be the sort of thing that merits
> > > additional analysis.
> > 
> > Basically the current expectation is that when the client requests a kid 
> > to be bound to an access token, it "knows what it is doing" i.e. either 
> > it has already sent a token using this pop key to the RS previously; or 
> > the client and the RS have been commissioned to have this shared key 
> > bound to the kid.
> > Do you want me to make this more explicit?
> 
> We already say "previously established key between C and RS", so I don't
> think we need to repeat "the client knows what it's doing".
> If we were to add text it would be relating to whether or what policy the
> AS might enforce relating to 'kid'.  But, I don't think we have any real
> thoughts on this matter, so there isn't anything to say at this point.
> 
> > > 
> > >     o  "cnf" in the token response AS -> C, OPTIONAL if using an
> > >        asymmetric key or a key that the client requested via a key
> > >        identifier in the request.  REQUIRED if the client didn't specify
> > >        a "req_cnf" and symmetric keys are used.  Used to indicate the
> > > 
> > > This seems to make no statement (REQUIRED/OPTIONAL) about this claim for
> > > the case where the client didn't specify a "req_cnf" and asymmetric keys
> > > are used.  This situation, of course, can't happen (at least not
> > > currently), as the absence of "req_cnf" is used as a signal for server
> > > (symmetric) keygen, but I suggest that we only mention "client didn't
> > > specify a 'req_cnf'" so we don't have to keep explaining this to
> > > reviewers.
> > 
> > So should I remove the "and symmetric keys are used." part?
> 
> Yes, I think that's best.
> Since that's the only comment left on the -06, I'm happy to just send the
> -06 out for IETF LC and lump it in with any comments from the last call.
> 
> > 
> > > 
> > >     o  "rs_cnf" in the token response AS -> C, OPTIONAL to indicate the
> > >        public key of the RS, if it uses one to authenticate to the
> > >        client.
> > > 
> > > nit(?): I'd consider adding a phrase about "and the binding between key
> > > and RS identiyt is not established through other means".
> > Done.
> > 
> > > 
> > >     o  "rs_cnf" in the introspection response AS -> RS, OPTIONAL,
> > >        contains the public key that the RS should use for authenticating
> > >        to the client (e.g. if the RS has several different public keys).
> > > 
> > > nit(?): I'd consider adding a phrase about "and there may be ambiguity
> > > as to which key to use" or similar, though I'm failing to come up with a
> > > non-awkward phrasing.
> > > 
> > Done. I'll go with slightly awkward, but more correct.
> > 
> > 
> > >     Note that the COSE_Key structure in a confirmation claim or parameter
> > >     may contain an "alg" or "key_ops" parameter.  If such parameters are
> > >     present, a client MUST NOT use a key that is not compatible with the
> > >     profile or proof-of-possession algorithm according to those
> > > 
> > > nit(?): s/not compatible/incompatible/ would avoid a "double 'not'", if
> > > that's seen as desirable.
> > Fixed.
> > 
> > > 
> > > Section 6
> > > 
> > > I thought we had set up separate map key namespaces for (e.g.) token
> > > requests, token responses, and introspection responses, so that
> > > attempting to use the same key value for all the uses of these
> > > parameters defined by this document is something of a type error.
> > > E.g., they end up in different registries, as we do in Section 9.2, 9.5,
> > > and 9.6.
> > > 
> > That is correct. I have added separate entries and a column
> > specifying the different uses. I will leave the values to be the same 
> > though.
> 
> Great; thank you!
> 
> > > Section 9.1, 9.2, 9.4
> > > 
> > > I note that the distance between "authenticate to the client" and
> > > "authenticate the client" is small enough that I expect it to be a
> > > common misreading, and also that the other descriptions at
> > > https://www.iana.org/assignments/jwt/jwt.xhtml#claims are a bit more
> > > pithy than what we use here.  Perhaps, "public key used by RS to
> > > authenticate itself to client"?
> > > 
> > Done.
> > 
> > > Section 9.5
> > > 
> > >     This section registers the following parameter mappings in the "Token
> > >     Endpoint CBOR Mappings" registry established in section 8.9. of
> > >     [I-D.ietf-ace-oauth-authz].
> > > 
> > > It looks like this has been renamed to the "OAuth Parameters CBOR
> > > Mappings" registry?
> > Correct. Fixed.
> > 
> > > 
> > > Section 9.6
> > > 
> > >     This section registers the following parameter mappings in the
> > >     "Introspection Endpoint CBOR Mappings" registry established in
> > >     section 8.11. of [I-D.ietf-ace-oauth-authz].
> > > 
> > > Similarly, this has been renamed to "OAuth Token Introspection Response
> > > CBOR Mappings".
> > > 
> > Fixed.
> > 
> > > Section 11.1
> > > 
> > > It's not entirely clear that RFC 7252 needs to be a normative reference;
> > > we don't do much with CoAP directly in this document.
> > > 
> > Agree. I moved it.
> > 
> > > Appendix A
> > > 
> > > We might want to wordsmith this some if it's to be kept for the final
> > > RFC (depending on what the OAuth work looks like at that point).  I'm
> > > not sure that there are any useful changes to make to it right now,
> > > though.
> > 
> > It seems the OAuth draft I'm talking about here is not going anywhere 
> > fast. We might consider removing this in the final edition.
> 
> Sure.  Let's plan to revisit that after IETF LC (where hopefully we will
> not get many comments; I think this one is in good shape).
> We could also ask the authors here in Singapore what they see its prospects
> as.
> 
> Thanks for the updates,
> 
> Ben

_______________________________________________
Ace mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/ace

Reply via email to