Re: [OAUTH-WG] PKCE: SHA256(WAT?)

Brian Campbell <bcampbell@pingidentity.com> Fri, 30 January 2015 21:07 UTC

Return-Path: <bcampbell@pingidentity.com>
X-Original-To: oauth@ietfa.amsl.com
Delivered-To: oauth@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id ED4251A872B for <oauth@ietfa.amsl.com>; Fri, 30 Jan 2015 13:07:05 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.578
X-Spam-Level:
X-Spam-Status: No, score=-3.578 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FM_FORGED_GMAIL=0.622, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 09ErQaPHEhdV for <oauth@ietfa.amsl.com>; Fri, 30 Jan 2015 13:07:00 -0800 (PST)
Received: from na3sys009aog114.obsmtp.com (na3sys009aog114.obsmtp.com [74.125.149.211]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D43DE1A8727 for <oauth@ietf.org>; Fri, 30 Jan 2015 13:06:58 -0800 (PST)
Received: from mail-ie0-f181.google.com ([209.85.223.181]) (using TLSv1) by na3sys009aob114.postini.com ([74.125.148.12]) with SMTP ID DSNKVMvycV0DRn4khwtVnSHU0Y1lYZV9K8wc@postini.com; Fri, 30 Jan 2015 13:06:58 PST
Received: by mail-ie0-f181.google.com with SMTP id rp18so6144644iec.12 for <oauth@ietf.org>; Fri, 30 Jan 2015 13:06:57 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=R9NCnhINLG18m4TXKpxFBAzFjdKzQcIidgnVYLDkN+c=; b=PWO5KJ8XDWiamlnFjcvxcUOmh4qJ9bRzR9lboo5wegUqqUpZJCuKYpW0Kz62WBKZKR xlClLYErKmTx1XyHznkplZicF7Op4EyuhWuLq6qY0ZmjvBHzYmz9X61y3DOdPAAg5hP+ e8NNfGdiqs65v0RLaqZBVL6ReXQe/r716sBevm6G0FSBCNWVQMvm15yU59+ovjiaHGtA 5h5cL2/Q0d3uBITMV9lx3umEwo20Y8OP1qTZTJCx35Jcw9n1Rega4O3KOMXUWw2u/gbM 3aR/6soEFtuWEExCrNg2IlO9RQ3LjWFJkzwtuddkG4zp7G/g6Kr0KjR6xCzXtDORivCH xjiA==
X-Gm-Message-State: ALoCoQl0BAIKO4ehkqzsESg4x5omm3uLkte60CvNcO9szJ0J0VGzrWLsO/xqDaupLcfgWKOmhdOuAxzMncv/MJIJKoJLERD2vr4efO4fXRe3aKpjPMP77JLclNEwTOuZLgQqYpZoCiDH
X-Received: by 10.107.151.80 with SMTP id z77mr9705398iod.51.1422652017618; Fri, 30 Jan 2015 13:06:57 -0800 (PST)
X-Received: by 10.107.151.80 with SMTP id z77mr9705375iod.51.1422652017462; Fri, 30 Jan 2015 13:06:57 -0800 (PST)
MIME-Version: 1.0
Received: by 10.64.33.75 with HTTP; Fri, 30 Jan 2015 13:06:27 -0800 (PST)
In-Reply-To: <513A0CDA-514E-4ACD-AE78-574149288F01@ve7jtb.com>
References: <CA+k3eCQHZJYJ3mMfdGTdO=S3VVQdU+qhjVz+QsEeobJokNSHEA@mail.gmail.com> <FD9F9F2A-8B32-4A26-95CC-59C8C465A202@sakimura.org> <CA+k3eCRn0xT+_fA0G3Q3OjjH9Lq-2AfC+Mv7Gq8bYnHqH5TFDw@mail.gmail.com> <CABzCy2CWnjmeBGT8hgQY-R9Z6u=UFM8AAvHDr1MV81kJXST9WQ@mail.gmail.com> <CA+k3eCTp3xyRuLdCtd3CK_uaACEOYvwYFb4DBs6Cy7UvVMX_ZA@mail.gmail.com> <EE51DE36-7566-4713-8AE3-9F815FA1EE77@ve7jtb.com> <4E1F6AAD24975D4BA5B1680429673943A2201928@TK5EX14MBXC291.redmond.corp.microsoft.com> <CA+k3eCQe9ZweUeoVD+U0H+fsLkbm73bD5ZT6r-wOxusgrq_1wg@mail.gmail.com> <513A0CDA-514E-4ACD-AE78-574149288F01@ve7jtb.com>
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Fri, 30 Jan 2015 14:06:27 -0700
Message-ID: <CA+k3eCSgy+q20eUuaAW1i23_k85RWLVDN9fGeBJYMRNP5RRrWA@mail.gmail.com>
To: John Bradley <ve7jtb@ve7jtb.com>
Content-Type: multipart/alternative; boundary="001a1140f5ee23e681050de4fc80"
Archived-At: <http://mailarchive.ietf.org/arch/msg/oauth/eypgn6Lrjj0dfl1SyA3ombTjHOA>
Cc: oauth <oauth@ietf.org>, Naveen Agarwal <naa@google.com>
Subject: Re: [OAUTH-WG] PKCE: SHA256(WAT?)
X-BeenThere: oauth@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: OAUTH WG <oauth.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/oauth>, <mailto:oauth-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/oauth/>
List-Post: <mailto:oauth@ietf.org>
List-Help: <mailto:oauth-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/oauth>, <mailto:oauth-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 30 Jan 2015 21:07:06 -0000

https://bitbucket.org/Nat/oauth-spop/commits/af9ce76988cd32b334e21c71289721a3bf1c4ff1
looks good to me. Thanks John.

On Fri, Jan 30, 2015 at 1:47 PM, John Bradley <ve7jtb@ve7jtb.com> wrote:

> OK try that one.
>
> On Jan 30, 2015, at 5:15 PM, Brian Campbell <bcampbell@pingidentity.com>
> wrote:
>
> I agree with Mike here. Though PKCE only needs the ASCII(STRING) one.
>
> On Fri, Jan 30, 2015 at 12:38 PM, Mike Jones <Michael.Jones@microsoft.com>
> wrote:
>
>>
>> http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41#section-1.1
>> uses this notation:
>>
>>
>>
>>    UTF8(STRING) denotes the octets of the UTF-8 [RFC3629
>> <http://tools.ietf.org/html/rfc3629>] representation
>>
>>    of STRING, where STRING is a sequence of zero or more Unicode
>>
>>    [UNICODE
>> <http://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41#ref-UNICODE>]
>> characters.
>>
>>
>>
>>    ASCII(STRING) denotes the octets of the ASCII [RFC20
>> <http://tools.ietf.org/html/rfc20>] representation
>>
>>    of STRING, where STRING is a sequence of zero or more ASCII
>>
>>    characters.
>>
>>
>>
>> This is unambiguous and has already been vetted by the IESG and SecDir,
>> so I would use exactly this wording.
>>
>>
>>
>> OCTETS(STRING) is ambiguous, since for the same string there are many
>> possible representations as octets, including ASCII, UTF-8, UTF-16, UTF-32,
>> and EBCDIC.
>>
>>
>>
>>                                                                 -- Mike
>>
>>
>>
>> *From:* OAuth [mailto:oauth-bounces@ietf.org] *On Behalf Of *John Bradley
>> *Sent:* Friday, January 30, 2015 11:33 AM
>> *To:* Brian Campbell
>> *Cc:* oauth; Naveen Agarwal
>> *Subject:* Re: [OAUTH-WG] PKCE: SHA256(WAT?)
>>
>>
>>
>> Have a look at the latest version I added OCTETS(STRING) to show the
>> conversion.   ASCII(STRING) seemed more confusing by drawing character
>> encoding back in.
>>
>>
>>
>> I was tempted to call it a octet array without the terminating NULL of
>> STRING but didn’t want to introduce array.
>>
>>
>>
>> Let me know what you think.
>>
>>
>>
>> On Jan 30, 2015, at 1:56 PM, Brian Campbell <bcampbell@pingidentity.com>
>> wrote:
>>
>>
>>
>> But, while it may be clear to you, what I'm saying here is that it's not
>> clear to a reader/implementer.
>>
>> Somehow the conversion from a character string to an octet string needs
>> to be clearly and unambiguously stated. It doesn't have to be the text I
>> suggested but it's not sufficient as it is now.
>>
>> Something like this might work, if you don't want to touch the parts in
>> 4.2 and 4.6: "SHA256(STRING) denotes a SHA2 256bit hash [RFC6234] of the
>> octets of the ASCII [RFC0020] representation of STRING."
>>
>> An "octet sequence using the url and filename safe Alphabet [...], with
>> length less than 128 characters." is ambiguous. Octets and characters are
>> intermixed with no mention of encoding. But they're not interchangeable.
>>
>>
>>
>>
>>
>> On Fri, Jan 30, 2015 at 7:15 AM, Nat Sakimura <sakimura@gmail.com> wrote:
>>
>> I do not think we need ASCII(). It is quite clear without it, I suppose.
>>
>>
>>
>> In 4.1, I would rather do like:
>>
>>
>>
>>  code_verifier = high entropy cryptographic random
>>    octet sequence using the url and filename safe Alphabet [A-Z] / [a-z]
>>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>>    less than 128 characters.
>>
>>
>>
>> Nat
>>
>>
>>
>> 2015-01-30 22:51 GMT+09:00 Brian Campbell <bcampbell@pingidentity.com>:
>>
>>  That's definitely an improvement (to me anyway).
>>
>> Checking that the rest of the document uses those notations
>> appropriately, I think, yields a few other changes. And probably begs for
>> the "ASCII(STRING) denotes the octets of the ASCII representation of
>> STRING" notation/function, or something like it, to be put back in. Those
>> changes might look like the following:
>>
>>  In 4.1.:
>>
>> OLD:
>>    code_verifier = high entropy cryptographic random ASCII [RFC0020]
>>    octet sequence using the url and filename safe Alphabet [A-Z] / [a-z]
>>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>>    less than 128 characters.
>>
>> NEW (maybe):
>>   code_verifier = high entropy cryptographically strong random STRING
>>   using the url and filename safe Alphabet [A-Z] / [a-z]
>>    / [0-9] / "-" / "_" from Sec 5 of RFC 4648 [RFC4648], with length
>>    less than 128 characters.
>>
>>
>> In 4.2.:
>>
>> OLD:
>>    S256  "code_challenge" = BASE64URL(SHA256("code_verifier"))
>>
>> NEW (maybe):
>>    S256  "code_challenge" = BASE64URL(SHA256(ASCII("code_verifier")))
>>
>>  In 4.6.:
>>
>> OLD:
>>    SHA256("code_verifier" ) == BASE64URL-DECODE("code_challenge").
>>
>> NEW (maybe):
>>    SHA256(ASCII("code_verifier")) == BASE64URL-DECODE("code_challenge").
>>
>>
>>
>>
>>
>> On Thu, Jan 29, 2015 at 8:37 PM, Nat Sakimura (=nat) <nat@sakimura.org>
>> wrote:
>>
>>  I take your point, Brian.
>>
>>
>>
>> In our most recent manuscript, STRING is defined inside ASCII(STRING) as
>>
>>
>>
>> STRING is a sequence of zero or more ASCII characters
>>
>>
>>
>> but it is kind of circular, and we do not seem to use ASCII().
>>
>>
>>
>> What about re-writing the section like below?
>>
>>
>>
>> STRING denotes a sequence of zero or more ASCII  [RFC0020]
>> <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC0020> characters.
>>
>> OCTETS denotes a sequence of zero or more octets.
>>
>> BASE64URL(OCTETS) denotes the base64url encoding of OCTETS, per Section 3
>> <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#Terminology> producing a
>> ASCII[RFC0020] <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC0020>
>>  STRING.
>>
>> BASE64URL-DECODE(STRING) denotes the base64url decoding of STRING, per Section
>> 3 <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#Terminology>, producing a
>> sequence of octets.
>>
>> SHA256(OCTETS) denotes a SHA2 256bit hash [RFC6234]
>> <http://xml2rfc.ietf.org/cgi-bin/xml2rfc.cgi#RFC6234> of OCTETS.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Jan 30, 2015, at 08:15, Brian Campbell <bcampbell@pingidentity.com>
>> wrote:
>>
>>
>>
>> In §2 [1] we've got "SHA256(STRING) denotes a SHA2 256bit hash [RFC6234]
>> of STRING."
>>
>> But, in the little cow town where I come from anyway, you hash
>> bits/octets not character strings (BTW, "STRING" isn't defined anywhere but
>> it's kind of implied that it's a string of characters).
>>
>> Should it say something more like "SHA256(STRING) denotes a SHA2 256bit
>> hash [RFC6234] of the octets of the ASCII [RFC0020] representation of
>> STRING."?
>>
>> I know it's kind of pedantic but I find it kind of confusing because the
>> code_verifier uses the url and filename safe alphabet, which has me second
>> guessing if SHA256(STRING) actually means a hash of the octet produced by
>> base64url decoding the string.
>>
>> Maybe it's just me but, when reading the text, I find the transform
>> process to be much more confusing than I think it needs to be. Removing and
>> clarifying some things will help. I hate to suggest this but maybe an
>> example showing the computation steps on both ends would be helpful?
>>
>>
>>
>> Also "UTF8(STRING)" and "ASCII(STRING)" notations are defined in §2 but
>> not used anywhere.
>>
>> And §2 also says, "BASE64URL-DECODE(STRING) denotes the base64url
>> decoding of STRING, per Section 3, producing a UTF-8 sequence of octets."
>> But what is a UTF-8 sequence of octets? Isn't it just a sequence octets?
>> The [RFC3629] reference, I think, could be removed.
>>
>>
>>
>> [1] https://tools.ietf.org/html/draft-ietf-oauth-spop-06#section-2
>>
>>
>>
>> Nat Sakimura
>>
>> nat@sakimura.org
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> --
>>
>> Nat Sakimura (=nat)
>>
>> Chairman, OpenID Foundation
>> http://nat.sakimura.org/
>> @_nat_en
>>
>>
>>
>>
>>
>
>
>