Re: [GNAP] Secdir last call review of draft-ietf-gnap-core-protocol-16

Justin Richer <jricher@mit.edu> Mon, 27 November 2023 20:31 UTC

Return-Path: <jricher@mit.edu>
X-Original-To: txauth@ietfa.amsl.com
Delivered-To: txauth@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4D557C151535 for <txauth@ietfa.amsl.com>; Mon, 27 Nov 2023 12:31:23 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.106
X-Spam-Level:
X-Spam-Status: No, score=-2.106 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_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_BLOCKED=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=mit.edu
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 ZBkJ6Z7c27sf for <txauth@ietfa.amsl.com>; Mon, 27 Nov 2023 12:31:19 -0800 (PST)
Received: from outgoing-exchange-1.mit.edu (outgoing-exchange-1.mit.edu [18.9.28.15]) (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 9812BC151547 for <txauth@ietf.org>; Mon, 27 Nov 2023 12:31:18 -0800 (PST)
Received: from w92exedge3.exchange.mit.edu (W92EXEDGE3.EXCHANGE.MIT.EDU [18.7.73.15]) by outgoing-exchange-1.mit.edu (8.14.7/8.12.4) with ESMTP id 3ARKUvq4031907; Mon, 27 Nov 2023 15:31:12 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mit.edu; s=outgoing; t=1701117074; bh=TvsYItP2RPw+9T26J8msvfQUEMIHjUV7DoT4HrsFHuo=; h=From:Subject:Date:Message-ID:Content-Type:MIME-Version; b=IFoyDg9GQ7T4zcCCTShe4wLUYvjzl3p7rd/BBm20qw+xiw4gaZONLL1a+WQVzOo7J +JGMsxza7lTKhxIvWG2PPbDUhLb3Z9VIeThi9wVRt3gdzn29f3TBhXF6gbIQh7J44B LiMrZFeb5LipenD8sPddFmgFrlVxA+Ri/h0UwIW13SA1ME2xSRCPknoQA8wVZ5kVi0 ER0f6SQtnXRu3lNidbJyv64LqUdEJrumyld8wdj9wr/J28h60hhC5yUFMGfcqZ5XE0 yw/LC3e20tRMqytyTuPJwCCZk6HCGuKKqPz7cMJ+T3L5ZK8TjpNs4qt8aO2yOuLi1C aOca6dykZuhfQ==
Received: from w92exhyb5.exchange.mit.edu (18.7.71.110) by w92exedge3.exchange.mit.edu (18.7.73.15) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 27 Nov 2023 15:29:53 -0500
Received: from oc11exhyb6.exchange.mit.edu (18.9.1.111) by w92exhyb5.exchange.mit.edu (18.7.71.110) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 27 Nov 2023 15:30:46 -0500
Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.40) by oc11exhyb6.exchange.mit.edu (18.9.1.111) with Microsoft SMTP Server (TLS) id 15.0.1497.48 via Frontend Transport; Mon, 27 Nov 2023 15:30:45 -0500
Received: from DM6PR01MB4444.prod.exchangelabs.com (2603:10b6:5:78::15) by SA0PR01MB6473.prod.exchangelabs.com (2603:10b6:806:ec::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7025.29; Mon, 27 Nov 2023 20:30:43 +0000
Received: from DM6PR01MB4444.prod.exchangelabs.com ([fe80::d8a7:bf3:6fc1:7b9]) by DM6PR01MB4444.prod.exchangelabs.com ([fe80::d8a7:bf3:6fc1:7b9%2]) with mapi id 15.20.7025.022; Mon, 27 Nov 2023 20:30:43 +0000
From: Justin Richer <jricher@mit.edu>
To: Russ Housley <housley@vigilsec.com>
CC: GNAP Mailing List <txauth@ietf.org>, "rdd@cert.org" <rdd@cert.org>
Thread-Topic: [GNAP] Secdir last call review of draft-ietf-gnap-core-protocol-16
Thread-Index: AQHaDz8R7+7LoZ3NE0KoSZcWfTwc0bCOwqQA
Date: Mon, 27 Nov 2023 20:30:42 +0000
Message-ID: <B8805330-B9C8-436D-BCC1-D332715D5F02@mit.edu>
References: <169911663900.41972.11831973094949906170@ietfa.amsl.com>
In-Reply-To: <169911663900.41972.11831973094949906170@ietfa.amsl.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mit.edu;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DM6PR01MB4444:EE_|SA0PR01MB6473:EE_
x-ms-office365-filtering-correlation-id: 6ed5083e-0b79-4f2a-a9a5-08dbef87ba55
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 1Rt8gljLYP+853+n8aEmwwFgIT4QXrWAcNAjEsJWIcptL1bwaZ4kmIuub/16TPG2/HH50xY9yJoF9sc6O6x+BEwTZhQtlDXTeLj5Bamyzv1SE8WGos2CdzmfwSYUvkk1gBD2jXiZu24ktfPHTrbQqD9EHYfg+ifvmj1l7bBN6/bF+NBFYhj5UX0dXx3bMCWu9OzilineBOJtyS0oPytxc9hNYQy6H9+kfjg2dxaxWovOYnckd39QHYAaA95Zgic0hX9GYjShDB9Ce+2iZUJD6xBBWZ4zAi3/S/ATZPZJy+JOqtbRinb7NtbTjLjQCgMmeSeblNGv5mpg9xDb5V7x+HX+UpE8CivLtp90lTkzZLT9PkbCB2OOH7JaAAyxW58PG1OG+ckaUy1gHqK1uRRSUIAlYSQL9ztNSkZRqKzR6/qn+5kG790EwuogS99oh/YZTHTqe3UVKNxTXqiKchWNSmNs72Hn6yccOp3Lk+TGL91d1hP25QzxtwLQOGuhrfaMY2WKBthPc2kD/IAAdexcwLcWfeDqYGrt8+LM6JK5oezw3VpZy5QiWBwUx2lKivnlQ+qVq1g62oDv05gElti294a4MEONstpjLN9NxUIKVqMMetQwCm199P+r2ydDCCgSFg8/OhEFTMxNCCsJDXlCDjLuhFGXmCD5bYkQa5ntPhV4LVQnsM8PGcid/snqOG6C
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR01MB4444.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(13230031)(136003)(39860400002)(376002)(346002)(366004)(396003)(230173577357003)(230273577357003)(230922051799003)(451199024)(64100799003)(1800799012)(186009)(26005)(66899024)(6486002)(2616005)(6506007)(53546011)(966005)(71200400001)(478600001)(6512007)(38100700002)(86362001)(38070700009)(33656002)(122000001)(75432002)(36756003)(5660300002)(41300700001)(4001150100001)(2906002)(91956017)(76116006)(66946007)(66574015)(30864003)(83380400001)(66476007)(786003)(4326008)(66446008)(66556008)(64756008)(54906003)(316002)(6916009)(8936002)(8676002); DIR:OUT; SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: O2dWFVIDEg3dv5ZBUKdxk8hNbbyS/5srb3cyYVVsJz5gn7RxY5b5SxlpQ6uHibFKQ7Zqo5yy1xETfsuwP5mtDlawh9yGjA8eebOhNS7aGiHjK36dgkB8mFbfvD0D6Mhs1QD0O1hnHx1hE/cevfzJiEimobBIWtnTVDrlB852ZIz2WkZ0xuUa58dq6tURMROVXx9SnCr0RgTCySasje8bS9gCogCDwBbnBZj1mfsJ8NsOUwK/fTf17GWIpqK6Vwdvg9Vd/in4sbozuZtzWfFy1pey7n+KpQrXxVIjFhqSDsvAm+0CUaJtE0LPjh+feU7l9VkNSiFEh+mjaETMCKeuNg8jj1zYIyX+S5pvA1qERuBwQ1cjN5Qj1MftXnK8mWn70+K7eYYvuGE1YENZoSLToPykEd0jHrvkc7mbFrSr5QXXdHt+YL/NibSjPrkUG5oAN9Xl6URI7HbmcEAR5J41El1Gt8AJZ2E43SmRS7c6jUyBBh7dYXVho/gHSldQmgVVhGsuP3khnCS0i798SauBXgd609dqgFv6Pq9rh/I9rpxFnhcdOr0/ql02nwr3Lqh21iy5+KCRTFv2kwsmYnp+kkFWu30PTBrzkme+KKP6CawkTdxL0NCIsQgYl7gwCalr5qwMLJbzvhafcKeYaOTJ3hO2fSK6aYfHi7zxKiPdgSqb0zVZLBDNv/3JKFtUlxcYFw3OZ3v7hKWuODE0Ea1xh043iUfx7A8Uv7iZFOzUw7xv5BDv1EP13RHVU24vIN4JxZ9vLNGTx8mLcChwEPLhbOka6GmAUy37AKiRsnY4MX7uG6tT0gspcAVWbsr9v/2XoxtnH1CN0Acl29svWrLE1c3I2dRQCfaChqtrxazQqiro9FZWjFw5R0dRQJ5dHDGE9EZgNoHjEKgBcL0qIBwel71sGmDoOuU68vCg1VHDQue4x4Ueh2kzBWMAfQqKUeAuxAmQbr8N07v59rKNYwsf3SnT4BUvEfRJRFdwTZ8DRtlV/W3/6O30GFiiszNsRT9F6IlyAoCEKonAo/++UragRasljSzNFtmI/AHAvmdWq+eZWMbda3bifZqUTrWI8Mmh3CXxa+WE2Lkg7fBEf4oz0tuEFpgWs4L9C30n4U+1BjhkSjhSmuZIGjfR/RU4c/jBd9QowKp41zWX0J8qDi4UdOTbgc7BsoZJoklHeAHrr6LhL5G1PzobNFJKfoaswMwYkILqXt2cMnmyJCZyEb2t+olJm1AcOmqljPma6ACImQHZXeTPnkMCyHhDevx5G0nd6xjpgqydSSYBw/FSYHvNFadQLo75ldvCCeoH16PurBmH98Lu1596DYSF5XjBi3NwomZJeZZ3U6rGNteSlRq7BpCREROAhxBUHMzlmv7N4g5jRhArjksihreSUDA33aLX1b/P9YkDg2H8S7RIQPnBD2OJVnojuLSiwyENXwF2eDaSQUIl/kEQ1ecztnWQEtBO8zHkIcbIDw7atSSTnNRYSiuzJzoAbjr6Q7kqfdd0hppg5lF342PzWrOJtiRitk3ckKiR3Z2ZlyX3+GnSl1x7dYrwD+JJoNw96uclNpOVeDW8THuuLjSUSRGy3/Gkb2l1
Content-Type: text/plain; charset="utf-8"
Content-ID: <99F2878860B3EE40917954EAAC71B904@prod.exchangelabs.com>
Content-Transfer-Encoding: base64
MIME-Version: 1.0
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DM6PR01MB4444.prod.exchangelabs.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 6ed5083e-0b79-4f2a-a9a5-08dbef87ba55
X-MS-Exchange-CrossTenant-originalarrivaltime: 27 Nov 2023 20:30:42.8646 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 64afd9ba-0ecf-4acf-bc36-935f6235ba8b
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: BZN7bS0oDx1iv8IFCuewYK/730N+Sxp71KSwE+EqYXfb1eDEJHEx5P21+NmrUbUg
X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR01MB6473
X-OriginatorOrg: mit.edu
Archived-At: <https://mailarchive.ietf.org/arch/msg/txauth/-Zl-mKGKC0WgujAlj8cd3sOgr2Q>
Subject: Re: [GNAP] Secdir last call review of draft-ietf-gnap-core-protocol-16
X-BeenThere: txauth@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: GNAP <txauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/txauth>, <mailto:txauth-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/txauth/>
List-Post: <mailto:txauth@ietf.org>
List-Help: <mailto:txauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/txauth>, <mailto:txauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 27 Nov 2023 20:31:23 -0000

Hi Russ, thanks for the review. Some responses inline below. I’m copying the GNAP WG and the AD, but leaving off the other distribution lists — please let me know if that’s not the desired audience.

> On Nov 4, 2023, at 12:50 PM, Russ Housley via Datatracker <noreply@ietf.org> wrote:
> 
> Reviewer: Russ Housley
> Review result: Has Issues
> 
> I reviewed this document as part of the Security Directorate's ongoing
> effort to review all IETF documents being processed by the IESG.  These
> comments were written primarily for the benefit of the Security Area
> Directors.  Document authors, document editors, and WG chairs should
> treat these comments just like any other IETF Last Call comments.
> 
> Document: draft-ietf-gnap-core-protocol-16
> Reviewer: Russ Housley
> Review Date: 2023-11-04
> IETF LC End Date: 2023-11-21
> IESG Telechat date: Unknown
> 
> Summary: Has Issues
> 
> 
> I did not review the Appendices.
> 
> 
> Major Concerns:
> 
> Section 1.2: I am having trouble getting my head around the idea that
> the AS role grants subject information to client instances.  This feels
> like a purposeful confusion between authentication and authorization.
> 

In spite of its name, GNAP is neither an authorization nor authentication protocol — as it says in the introduction, it’s a delegation protocol. What is being delegated to the client application broadly falls in two categories: 

 - access to APIs and services (this is the access tokens, the authorization side)
 - the knowledge of who the user is (this is the subject identifiers and assertions, the authentication side)

This has been a grounding use case for GNAP from the very beginning of the working group, and it’s long-established in OAuth and OpenID Connect.

> Section 1.3: Elsewhere in the document, there is a careful distinction
> between software that acts on behalf of a subject and the natural person
> that uses the software.  This distinction is missing in the definition
> of Subject.  It is made worse by including organizations.  Please say
> how people and organizations "decide whether and under which conditions
> its attributes can be disclosed to other parties."  I believe this is
> done by interacting with the software or initial configuration of the
> software.

It’s outside the scope of GNAP how these decisions are made, and not for this section of concise definitions to go into any detail, even by example.

> 
> Section 1.5: Is the AS the only stateful role?  If not, Section 1.2
> should say which ones are stateful and which ones are not.  If so,
> please clarify the 2nd para of Section 1.5.

This section isn’t about statefulness of the AS, client, or any other components — it’s about the statefulness of the grant request itself. How any of the components handle that statefulness is a development decision. I believe the current text is clear that this is speaking about the grant process.

> 
> Section 2: I worry about the phrase "unless otherwise specified by the
> signature mechanism" inside a MUST statement.  Which part of the MUST
> statement can the signnature mechanism change?  Can it change the use of
> a JSON object?  Can it change the use of HTTP POST?  Can it change the
> use of application/json as the content type?
> 

The signature mechanism can change the use of the JSON object and associated media types, as demonstrated in §7.3.4 (https://www.ietf.org/archive/id/draft-ietf-gnap-core-protocol-16.html#name-attached-jws). This cutout can be made more specific.

> Section 2.1.1: This subsection is about a request for a single access
> token, yet the description continues to talk about "one or more access
> tokens".  Please be consistent.

Good catch, this language was a holdover from a previous syntax, we’ll update.

> 
> Section 2.1.2: I expected a parallel structure to Section 2.1.1.  I
> think it would really help the reader if the sections had the same
> structure.

I don’t understand the request here - section 2.1.2 is activated by sending an array of the objects defined in section 2.1.1, with some additional constraints (label is required, namely). So to me, they are already deeply interrelated. How would you suggest parallelizing these more?

> 
> Section 2.3.2: I am not worried about logo_uri if only data: URIs are
> allowed, but that does not seem to be the case.  Since the logo might
> be fetched, there need to be an integrity protection mechanism to 
> ensure that the web server does not provide a different image than
> was intended.  RFC 3709 has this same concern and it uses a hash of
> the image to ensure that the intended image was provided.

One of the goals of having a remote URL for this field is to allow the hosted URL to change its contents without updating any stored or registered values with the AS. Therefore, an integrity hash would negate the usefulness of this feature.

Related to this: impersonation and related issues are listed in §13.13 (https://www.ietf.org/archive/id/draft-ietf-gnap-core-protocol-16.html#name-client-instance-impersonati), SSRF in §13.33 (https://www.ietf.org/archive/id/draft-ietf-gnap-core-protocol-16.html#name-server-side-request-forgery).

> 
> Section 2.5.1: I do not understand what an implementer is supposed to
> do based on this MUST statement:
> 
>   "All interaction start method definitions MUST provide enough
>   information to uniquely identify the grant request during the
>   interaction."
> 

The "implementor" here is someone defining a new interaction start method. Whatever information passed to that method would need to uniquely identify the associated grant request that the interaction is associated with. For example, the "redirect" mode uses a unique URI, the "user_code" modes use the user code, etc.

> Section 2.5.2.1: How does the use of an application-specific URI scheme
> provide for the same security as HTTPS?  It seems like an way to avoid
> them.  This text appears several places in the document.

Application-specific URIs are generally loaded on the same device as the browser, and therefore the request does not transit untrusted networks.

> 
> Section 3.1: It says:
> 
>      " ... and omission of the value MUST NOT be
>      interpreted as zero (i.e., no delay between requests)."
> 
> It would be much better to provide a default value.  That is,
> omission of the value MUST be treated a delay request of 5 seconds.
> 

This requirement was based on experience with implementing RFC 8628, which I now see has exactly this set as the default, so we’ll add that in.

> Section 7: Please consider a reference to RFC 4107.  I'm not sure where
> in this section is the best place to add a cite.

Thank you, we’ll consider where best to incorporate a reference.

> 
> Section 9.1: I do not understand what an implementer is supposed to
> do based on this MUST statement:
> 
>   "client instance MUST check its value to protect itself"

The client instance checks whether the value of the `referrer` parameter is the URI of the resource server that it made the request to. The rationale for this is discussed a little more in §13.36 (https://www.ietf.org/archive/id/draft-ietf-gnap-core-protocol-16.html#security-compromised-rs).

> 
> Section 13.1: This section ought explain what is menant by "mutual TLS"
> as used in the body of the document.

Thanks, we meant it as used by RFC8705 and so can import the definition used there (https://datatracker.ietf.org/doc/html/rfc8705#section-1.2)

>  Please consider moving Section 13.17
> and Section 13.18 to follow Section 13.1.

Thanks, we’ll consider re-organizing.

> 
> Section 13.2: Please consider the work of the SUIT WG.

I’m not sure which work in SUIT is directly applicable here. We’re not talking about attestation of the software itself, but about binding the actual request messages to a key held by the client instance. Could you be more specific about what you’re suggesting we incorporate here?

> 
> Section 13.24: This section does not seem like a Security Consideration.
> If the calculation of the interaction hash is not done the same, then
> there will be interoperability issues.

I’m not sure what the concern is with this comment - the section serves to expand the security discussion around the need for properly calculating the interaction hash as defined in §4.2.3 (https://www.ietf.org/archive/id/draft-ietf-gnap-core-protocol-16.html#name-calculating-the-interaction), and it illustrates how an attacker could leverage a bad implementation that skipped this required step.

I don’t understand the comment about interoperability problems - the AS and the client instance always calculate the hash the same way. The problem described in this section only occurs if the client instance is lazy and does not calculate the hash at all. 

> 
> 
> Minor Concerns:
> 
> Section 1.4, 1st para: Where does the quoted text appear?  Please add a
> cite.

It isn’t a quote from external sources, it is a definition.

> 
> Section 1.4, "end user/client" bullet: This seems like the wrong place
> to be an attacker's client software.  Rather, a forward pointer to
> authentication considerations seems more appropriate here.

This section describes the relationship between different components and parties.

This is appropriate since getting the end-user to use malicious or compromised client software is one major vector of attack. The end user has a trust relationship with the client software, even if that trust relationship should not actually happen because it’s an attacker’s software.

Authentication doesn’t help - an attacker’s client software could be properly authenticated, without the end-user knowing. See the section on client impersonation for some possible issues here known in the wild.

> 
> Section 1.4, "client/AS" bullet: Again, this seems like the wrong place
> to discuss the difference between honest AS and otherwise.  As a result,
> the actual trust relationship between the client and the AS is unclear.

Same comment as above, this trust relationship exists regardless of the honesty of the AS. 

> 
> Section 1.4, last para: Why is this here?  If it is relevant, this feels
> like the wrong place for this statement.

This serves as an anchor for the trust model here — while it is not fully normally specified, the language here uses terms and structures from the referenced document.

> 
> Section 3.3: This seems like a throw away statement:
> 
>   "The AS MUST NOT respond with any interaction mode that the AS does
>   not support."
> 
> It would me much more helpful to say what ought to happen is the client
> asks for an unsupported interaction mode.

It’s not throwaway - a lazy implementation could try to always respond to everything, or throw an error if something is asked for that is not supported. Neither is the correct behavior: instead, the AS returns only interaction modes that it supports. It’s essentially a set intersect operation:

Let’s say a client software supports [ Foo, Bar, Baz ] methods and the AS supports [ Foo, Baz, Qux ] methods.

	Client -> AS : I can do interaction modes [ Foo, Bar, Baz ] for this request

AS sees this and doesn’t support Bar at all, so it won’t respond using that. It does support Qux, but since the client didn’t ask for that it won’t return it. It will probably decide that Foo and Baz are both OK:

	AS -> Client : I can support [ Foo, Baz ] for this request

If the client asks for things the AS doesn’t support (or doesn’t want to honor for any other reason for this request), then the AS responds with an empty set.

> 
> Section 3.3.3: It is unclear whether you want the code to avoid
> characters that are easily confused, like 1 and l.  Of course, the
> more characters that are to supported reduces the effort to guess the
> code.  This text appears several places in the document.

Yes, it is the goal to point implementors (of the AS) in a direction to avoid easily misconstrued characters. This is going to vary depending on system, expected inputs, character sets, and cultural norms.

> 
> Section 7.3: Please provide a reference for the "RS256" algorithm.
> 

Thanks, we’ll point to the JWA entry for this.

> 
> Nits:
> 
> Global: Please create a reference for the hash-alg IANA registry and use
> it instead of the URL to the registry: 
> https://www.iana.org/assignments/named-information/named-information.xhtml#hash-alg
> 

Thanks, we didn’t realize this wasn’t a reference already. We’ll fix that.

> Section 1.2: Suggested wording improvement:
> 
>   OLD:
>   ... For
>   example, a client instance could have components that are installed
>   on the end user's device as well as a back-end system that it
>   communicates with. 
> 
>   NEW:
>   ... For
>   example, a client instance could have components that are installed
>   on the end user's device as well as on a communicating back-end
>   system.
> 

Thanks, we’ll take a look at that wording to make sure it’s clear.

> Section 1.5: Why are the state bullest offered with underlines? Please
> use the same format as Section 1.3 uses for the elements.

The italics were intended to set off the state values as an enumerated set. I believe the current typography is correct.

> 
> Section 1.6.3: Stretch the "End User" box in the figure or shift things
> to avoid "Completed+".

This seems to only be an issue in the ASCII version (the SVG rendered version is clear). We’ll see if that can be tweaked.

> 
> Section 2.2: s/subject that information is being requested for./
>              /subject for which information is being requested./
> 
> Section 2.2: s/All identifiers in the sub_ids array MUST/
>              /If present, all identifiers in the sub_ids array MUST/
> 
> Section 2.5.1.1: s/techniques such as this/techniques/
> 
> Section 3.3.1: s/is a string containing the URI to direct the end user to./
>                /is a string containing the URI for the end user to visit./
> 
> Section 3.4: s/that the subject information is received from/
>              /AS from which the subject information was received/
> 
> Section 4.2.3: s/single newline (\n)/single newline (0x0a)/
> 
> Section 5: s/requests to RS's/requests to an RS/
> 
> Section 6.2: s/ AS should/ AS SHOULD/
> 

Thanks, we’ll look at all of these in an editorial pass.



 — Justin