Re: [jose] #26: Allow for signature payload to not be base64 encoded

Dick Hardt <dick.hardt@gmail.com> Fri, 28 June 2013 23:04 UTC

Return-Path: <dick.hardt@gmail.com>
X-Original-To: jose@ietfa.amsl.com
Delivered-To: jose@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id B10EE21F9D27 for <jose@ietfa.amsl.com>; Fri, 28 Jun 2013 16:04:48 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.599
X-Spam-Level:
X-Spam-Status: No, score=-2.599 tagged_above=-999 required=5 tests=[BAYES_00=-2.599, HTML_MESSAGE=0.001, NO_RELAYS=-0.001]
Received: from mail.ietf.org ([12.22.58.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2SOHu4FHW-1K for <jose@ietfa.amsl.com>; Fri, 28 Jun 2013 16:04:48 -0700 (PDT)
Received: from mail-bk0-x229.google.com (mail-bk0-x229.google.com [IPv6:2a00:1450:4008:c01::229]) by ietfa.amsl.com (Postfix) with ESMTP id 7FE0921F9D23 for <jose@ietf.org>; Fri, 28 Jun 2013 16:04:47 -0700 (PDT)
Received: by mail-bk0-f41.google.com with SMTP id jc3so982736bkc.0 for <jose@ietf.org>; Fri, 28 Jun 2013 16:04:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=+44SwIopOA7nqvlWn01dlhE6VgLfCaiuF3fDsSxELKY=; b=nYkBDKGnTT/P6BYFqWWOOssL0NRsQnhAPxIwrczbfchrXKmKKZVKt+iAsKreEEBK5c V41j54BuwYVrPAT9hU3DLHXdZ8kRk4HIwbfx369hrdTpUuc2MIU/7wcOUURT7G2Laocl 8IZXE5zndCbdchyBUvYe1HZSicYY82Yd1vhLZPW6mKNdc0oMt1ehHA0oGjbChJzTRXXz vViQFH6ABU4bboDl+jnB9CyXvP7wkpkjp8YMT0Zm76Qt7PkRVTPvUu5jFzOiae0DEiPx 6TnDUL83VdIxyilvrZWlIU0rFh/cV3PgZOHnZmzA7mYruPseFS6QldfB16qLD5HuroaF WB6Q==
X-Received: by 10.204.77.72 with SMTP id f8mr2039618bkk.28.1372460686525; Fri, 28 Jun 2013 16:04:46 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.205.133.75 with HTTP; Fri, 28 Jun 2013 16:04:26 -0700 (PDT)
In-Reply-To: <CAL02cgQbAQ8zhumdR_uvXjhbZM0iXpfPnmgcJrMUuh4+bj11NA@mail.gmail.com>
References: <061.c2fcfec0a75d48eb8b194991ce56157e@trac.tools.ietf.org> <076.3f5d1244c042cd87bfb07814924fcbc9@trac.tools.ietf.org> <033a01ce729b$26bc3910$7434ab30$@augustcellars.com> <51CBA981.4050006@nri.co.jp> <048f01ce7355$19f05bc0$4dd11340$@augustcellars.com> <4E1F6AAD24975D4BA5B1680429673943678A0114@TK5EX14MBXC283.redmond.corp.microsoft.com> <04bf01ce7359$5ab862c0$10292840$@augustcellars.com> <CAL02cgTkUrQptGqOfQyhCembS1e3Qxw3peRFnO5QjswUW=XR-w@mail.gmail.com> <CAD9ie-sZ+w_HADMTnnkTC8XRJmjZvwYOmA+AhvJGTNPhhK=Z4g@mail.gmail.com> <CAL02cgQbAQ8zhumdR_uvXjhbZM0iXpfPnmgcJrMUuh4+bj11NA@mail.gmail.com>
From: Dick Hardt <dick.hardt@gmail.com>
Date: Fri, 28 Jun 2013 16:04:26 -0700
Message-ID: <CAD9ie-sBGnv5QbjFeQiXiMJ0Git06LPsAkoNeN7KZxRNqukv3w@mail.gmail.com>
To: Richard Barnes <rlb@ipv.sx>
Content-Type: multipart/alternative; boundary="047d7bb70b60b07d1404e03ee7df"
Cc: Jim Schaad <ietf@augustcellars.com>, n-sakimura <n-sakimura@nri.co.jp>, Mike Jones <Michael.Jones@microsoft.com>, "jose@ietf.org" <jose@ietf.org>, "draft-ietf-jose-json-web-signature@tools.ietf.org" <draft-ietf-jose-json-web-signature@tools.ietf.org>
Subject: Re: [jose] #26: Allow for signature payload to not be base64 encoded
X-BeenThere: jose@ietf.org
X-Mailman-Version: 2.1.12
Precedence: list
List-Id: Javascript Object Signing and Encryption <jose.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/jose>, <mailto:jose-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/jose>
List-Post: <mailto:jose@ietf.org>
List-Help: <mailto:jose-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/jose>, <mailto:jose-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 28 Jun 2013 23:04:48 -0000

Hi Richard, that helps.

Our you looking at a way of effectively signing a JSON payload? A complete,
real world example would help alot.


On Fri, Jun 28, 2013 at 3:57 PM, Richard Barnes <rlb@ipv.sx> wrote:

> Hey Dick,
>
> I guess I should have been clearer that I was only talking about the JSON
> serialization.  My proposed change would have no impact on the compact
> serialization.  Hopefully that answers your questions about separators,
> etc.; they payload would just be a normal JSON string.
>
> --Richard
>
>
> On Thu, Jun 27, 2013 at 7:56 PM, Dick Hardt <dick.hardt@gmail.com> wrote:
>
>>
>>
>>
>> On Thu, Jun 27, 2013 at 3:24 PM, Richard Barnes <rlb@ipv.sx> wrote:
>>
>>> I think there are two separable issues here, both of which Mike and I
>>> probably have divergent opinions on :)
>>> 1. Syntax: Should it be possible for the "payload" field JWS to be a
>>> JSON string (instead of base64) when the payload is simply a UTF-8 string?
>>>
>>
>> One of the goals of the token was that it not require encoding for it to
>> be transported in a request. IE that it be safe and SIMPLE to include in an
>> HTTP header or in a URL
>>
>>
>>> 2. Crypto: Must the JWS Signing Input be base64url encoded.
>>>
>>> The current answers to these questions are:
>>> 1. It is not possible.  Payload is always base64url encoded.
>>> 2. It is always base64url encoded.
>>>
>>> The answers should be:
>>> 1. The payload should not be base64url encoded unless it cannot be
>>> represented as a JSON string.
>>>
>>
>> How does an implementation determine which parts are separated? Are '.'
>> escaped? Does the implementation need to parse the JSON to determine a
>> valid separator? How does it know the end of the JSON? That sounds really
>> hard to implement, or I am misunderstanding what you are proposing.
>>
>>
>>
>>> 2. The JWS Signing Input should not be base64url encoded unless there is
>>> a JWS Protected Header
>>>
>>> Neither of these are complicated changes:
>>> 1. Add a "b64" header parameter that indicates that the payload is
>>> base64url-encoded binary, as opposed to a UTF-8 string.  Specify that this
>>> parameter is on by default in compact-formatted JWS objects.
>>>
>>
>> And how is the header separated from the payload?
>>
>>
>>>  2. Modify the signing/verification instructions to switch based on the
>>> presence of a JWS Protected Header: "If the JWS Protected Header is absent
>>> or empty, then the JWS Signing Input is simply the JWS Payload (not
>>> encoded).  If the JWS Protected Header has a non-empty value, then the the
>>> JWS Signing Input is the concatenation of the Encoded JWS Header, a period
>>> ('.') character, and the Encoded JWS Payload"
>>>
>>> There are two reasons for these, both of which are important to make
>>> sure that this spec is applicable to a broad variety of use cases:
>>> 1. Compactness.  As Jim notes, quoted strings are shorter than
>>> base64url-encoded strings
>>>
>>
>> The tokens are already compact enough.
>>
>>
>>>  2. Crypto-compatibility: Avoiding base64-encoding means that there's
>>> nothing JWS-specific about the signature value.  So for example, you could
>>> translate a JWS with no protected attributes to a CMS SignedData object
>>> with no protected attributes.
>>>
>>
>> Not a useful feature from my point of view.
>>
>> -- Dick
>>
>
>