Re: [OAUTH-WG] PKCE: SHA256(WAT?)
Brian Campbell <bcampbell@pingidentity.com> Fri, 30 January 2015 16:57 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 00BFD1A3BA4
for <oauth@ietfa.amsl.com>; Fri, 30 Jan 2015 08:57:34 -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 W0eOWS_-ljN6 for <oauth@ietfa.amsl.com>;
Fri, 30 Jan 2015 08:57:31 -0800 (PST)
Received: from na3sys009aog104.obsmtp.com (na3sys009aog104.obsmtp.com
[74.125.149.73])
(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
(No client certificate requested)
by ietfa.amsl.com (Postfix) with ESMTPS id CB8781A1AAC
for <oauth@ietf.org>; Fri, 30 Jan 2015 08:57:30 -0800 (PST)
Received: from mail-ie0-f170.google.com ([209.85.223.170]) (using TLSv1) by
na3sys009aob104.postini.com ([74.125.148.12]) with SMTP
ID DSNKVMu3+h4mJu/6BFsAppnY0CHnc65EVxLA@postini.com;
Fri, 30 Jan 2015 08:57:30 PST
Received: by mail-ie0-f170.google.com with SMTP id y20so4739067ier.1
for <oauth@ietf.org>; Fri, 30 Jan 2015 08:57:29 -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=Bn3x4wbOUz0QsKIIfAk+zJFmfmliIROTvinSrYtHLvM=;
b=DE4ozwj8FelJnDFGFYcGrQjg6Cd8UlJDlI3YEaWxSiOsFNm3/7TKJt64TDKtFpC/7b
RGleu3fsNGo/Rq5FG6g+ZbH6Cuuy4P5TmK+ZhUYbkJx5UeiBrukdIviTr+YxxYTIATiQ
HzvHb3Qmj6y4t2z2JvocTnMfQpTHbTorbiHm4yD1aMmeqvr1nmZtHMkOhqmIgqAsnn1B
aAfRgfvne1OMM/BCed20QY0afIBLo2HS4zfpqGFw5sFTWrURKaPM1yNzfUj1vtO2PbQk
LV4UzpC3vgdo0SQFk8c+8Q6kGlOjmLQ+W33PD47QY020sbsd+yS0kN0lZ1/RBVRbqMSD
0jwg==
X-Gm-Message-State: ALoCoQmasJIDDKKihItjtWkIZJtWeaw9rwjdZyjfLOtmO10NXhl5m70jjwr9/EgVWQihyjAjBaxn6v+ih8CS+prjR0QrkRzFEMAnpFvULgtyYLkuEXoLhGRxUUJJvQDwSiRTO8hvmwtc
X-Received: by 10.50.30.3 with SMTP id o3mr3857740igh.44.1422637049599;
Fri, 30 Jan 2015 08:57:29 -0800 (PST)
X-Received: by 10.50.30.3 with SMTP id o3mr3857718igh.44.1422637049449; Fri,
30 Jan 2015 08:57:29 -0800 (PST)
MIME-Version: 1.0
Received: by 10.64.33.75 with HTTP; Fri, 30 Jan 2015 08:56:59 -0800 (PST)
In-Reply-To: <CABzCy2CWnjmeBGT8hgQY-R9Z6u=UFM8AAvHDr1MV81kJXST9WQ@mail.gmail.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>
From: Brian Campbell <bcampbell@pingidentity.com>
Date: Fri, 30 Jan 2015 09:56:59 -0700
Message-ID: <CA+k3eCTp3xyRuLdCtd3CK_uaACEOYvwYFb4DBs6Cy7UvVMX_ZA@mail.gmail.com>
To: Nat Sakimura <sakimura@gmail.com>
Content-Type: multipart/alternative; boundary=e89a8f83941ffa3b63050de17fd9
Archived-At: <http://mailarchive.ietf.org/arch/msg/oauth/AxcPTld1VDy8ELqbPszjETe1z2k>
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 16:57:34 -0000
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>om>: > >> 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 >
- [OAUTH-WG] PKCE: SHA256(WAT?) Brian Campbell
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Nat Sakimura
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Brian Campbell
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Nat Sakimura
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Brian Campbell
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) John Bradley
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Mike Jones
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Brian Campbell
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) John Bradley
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) Brian Campbell
- Re: [OAUTH-WG] PKCE: SHA256(WAT?) John Bradley