Re: [jose] canonical JSON

John Bradley <ve7jtb@ve7jtb.com> Tue, 19 February 2013 22:17 UTC

Return-Path: <ve7jtb@ve7jtb.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 6F00F21F8878 for <jose@ietfa.amsl.com>; Tue, 19 Feb 2013 14:17:15 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.459
X-Spam-Level:
X-Spam-Status: No, score=-3.459 tagged_above=-999 required=5 tests=[AWL=0.140, BAYES_00=-2.599, RCVD_IN_DNSWL_LOW=-1]
Received: from mail.ietf.org ([64.170.98.30]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id lIBE5wBJXwnU for <jose@ietfa.amsl.com>; Tue, 19 Feb 2013 14:17:14 -0800 (PST)
Received: from mail-qa0-f45.google.com (mail-qa0-f45.google.com [209.85.216.45]) by ietfa.amsl.com (Postfix) with ESMTP id 6144E21F8860 for <jose@ietf.org>; Tue, 19 Feb 2013 14:17:14 -0800 (PST)
Received: by mail-qa0-f45.google.com with SMTP id g10so2116037qah.4 for <jose@ietf.org>; Tue, 19 Feb 2013 14:17:13 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:content-type:mime-version:subject:from:in-reply-to:date :cc:message-id:references:to:x-mailer:x-gm-message-state; bh=vLF4v2cT0Ichtu9uqrF1Xdzh3Qu3tQ0u92AzzUpsCrc=; b=fHRDGk69jePJi1iYqSnIhrMgrrRdDTocHED8ysZVO5r7aXvvXk2z0d8dP0F9sJJpR9 jCR09BOCOYiV7TN1Blk/nkVD9uwNAh8VCmffuHKonLj0TTy3gDmjgM33LTQn9aGmip5w +xTVm2QS8CqjsoV+Zh+ubc/cjiQ8WXXhUwkVjHZ/Sn78Ps8vwwfaYAYxDSS9J3d9Tot8 W/RAMOS7ZS/AUe4j1WaXPEhhaypcI752GZwWrk2P9r0xnxZ2Fu6awjgDqyJngt5IZ+kV lGIbctM3+QfpmPPv9PxjSAreT0gcCP01yRoOX7DnOk/p6BQXUQDWMcoz2n0LUC+okj+Y A9aQ==
X-Received: by 10.224.42.4 with SMTP id q4mr2328452qae.49.1361312233732; Tue, 19 Feb 2013 14:17:13 -0800 (PST)
Received: from [192.168.1.213] (190-20-4-185.baf.movistar.cl. [190.20.4.185]) by mx.google.com with ESMTPS id hr1sm28323188qeb.3.2013.02.19.14.17.02 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 19 Feb 2013 14:17:05 -0800 (PST)
Content-Type: multipart/signed; boundary="Apple-Mail=_1728ADDA-6946-4343-9794-97A8104A7DD9"; protocol="application/pkcs7-signature"; micalg="sha1"
Mime-Version: 1.0 (Mac OS X Mail 6.2 \(1499\))
From: John Bradley <ve7jtb@ve7jtb.com>
In-Reply-To: <BF7E36B9C495A6468E8EC573603ED9411513E85D@xmb-aln-x11.cisco.com>
Date: Tue, 19 Feb 2013 19:15:56 -0300
Message-Id: <7E415CBD-BA54-4E6A-8D16-2CE52C407260@ve7jtb.com>
References: <CAG8k2+4xaAUBPs=Kw-=eBHZNyOMs6VYByPEb1jnAv1aGjLupng@mail.gmail.com> <CABkgnnWzdoo6b0ZymF0cv_v9zOjJKTWuUhkWuxiA-cM9qgu0jg@mail.gmail.com> <CAG8k2+47GQXHhWBdqd82UEAPZUfAigYE-vwxpaMJm4F5i8098A@mail.gmail.com> <CAL02cgQ3Oh1D9qHW7XWAZqzmfnE5T6-FjNydjpMEMhaHf2d7Xw@mail.gmail.com> <255B9BB34FB7D647A506DC292726F6E1150757902D@WSMSG3153V.srv.dir.telstra.com> <CAG8k2+5mVYJ6TgQHJ9juXEaWkfMteG6gV8w_dCoShP4-9fPqMA@mail.gmail.com> <CAL02cgRZkf8rR=gAuR6ZT61WCah3aWQNAq8d+GLWweehH7jN6A@mail.gmail.com> <BF7E36B9C495A6468E8EC573603ED9411513E85D@xmb-aln-x11.cisco.com>
To: "Matt Miller (mamille2)" <mamille2@cisco.com>
X-Mailer: Apple Mail (2.1499)
X-Gm-Message-State: ALoCoQnhD7UvtreBlP5PB9dvIZv76dNujBlPKgrXqbhnIZFFuc+6SPAA+n1XDK8qMIOS0IjQS9lF
Cc: Richard Barnes <rlb@ipv.sx>, Daniel Holth <dholth@gmail.com>, "Manger, James H" <James.H.Manger@team.telstra.com>, jose <jose@ietf.org>
Subject: Re: [jose] canonical JSON
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: Tue, 19 Feb 2013 22:17:15 -0000

I suspect that a way to fingerprint a subset of a JWK is what is desired.  e.g. probably font want to include "kid" as you may want to use the fingerprint for that.

I suspect that is possible without trying to come up with a general method to canonicallise JSON.

One might be to ASN1 encode it:)  No that is crazy speak.

I do empathize for the desire to have fingerprints without resorting to DER encoding.

If we scope the problem down to having a canonical representation for a limited set of jwk elements that may be worth pursuing.


John  B.
On 2013-02-19, at 5:35 PM, "Matt Miller (mamille2)" <mamille2@cisco.com> wrote:

> I know I'm still reeling from canonicalization (c14n) issues in XML, but I can put that aside.  It would be nice to have JWK fingerprinting.
> 
> I can see value in each JWK type defining what is canonical; I'm less thrilled limiting metadata to a specific place, but could live with that.  I can see where excluding metadata can get us in trouble later, but I think that would mean having a much more robust c14n approach.
> 
> By the way, there is going to be a JSON BoF in Orlando, and c14n seems like a good thing to bring up there.
> 
> 
> - m&m
> 
> Matt Miller < mamille2@cisco.com >
> Cisco Systems, Inc.
> 
> PS: 42 vs 4.2e0 vs 4.2e1
> 
> On Feb 19, 2013, at 7:59 AM, Richard Barnes <rlb@ipv.sx> wrote:
> 
>> So your fingerprint algorithm would be something like the following?
>> 
>> INPUT: JWK
>> 1. Remove "metadata" fields.  So, for RSA, you would be left with {"kty",
>> "n", "e"}
>> 2. Convert stripped JWK to canonical form
>> 3. Compute digest over canonical form
>> 
>> That seems generally agreeable to me.
>> 
>> For (1) to be possible, you would need to define which fields are covered
>> in the fingerprint for each key type ("kty" value).  Or, alternatively, you
>> could restructure JWK so that metadata fields are grouped into a "meta"
>> sub-dict.  Which might be nice anyway.
>> 
>> For (2), I agree that there is probably a better canonicalization than
>> CJSON.  The code I pasted earlier implements the following changes from RFC
>> 4627:
>> -- Object fields must be in lexicographic order, sorted by field name
>> -- No white space allowed
>> -- Numbers: Exponent part must use 'e'
>> -- Numbers: Exponent part must not use '+'
>> -- Numbers: Fraction part must not have trailing zeros
>> -- Strings: All characters must be escaped
>> ISTM that those changes are fairly minimal, and avoid some of the CJSON
>> problems that have been discussed above. Reasonably people can disagree
>> over the string aspect; if you want less expansion, you could do things
>> like exempt printable ASCII.
>> 
>> 
>> 
>> 
>> On Tue, Feb 19, 2013 at 8:56 AM, Daniel Holth <dholth@gmail.com> wrote:
>> 
>>> On Tue, Feb 19, 2013 at 1:57 AM, Manger, James H <
>>> James.H.Manger@team.telstra.com> wrote:
>>> 
>>>> A canonical form of JSON might be fairly easy, but the one you quote (
>>>> http://wiki.laptop.org/go/Canonical_JSON) can’t handle floating point
>>>> numbers (or very large integers), and produces invalid JSON if a string
>>>> includes a tab! Fix those (escaping control chars [\u0000-\u001f]; use
>>>> normalized scientific notation for numbers) and it might be worth
>>>> considering.****
>>>> 
>>>> ** **
>>>> 
>>>> Defining JOSE calculations in terms of 1 or more byte arrays, the first
>>>> of which is a UTF-8-encoded JSON header, would be useful. It can then be
>>>> packaged as dot-separated base64url-encoded segments to be
>>>> HTTP-header-friendly, or packaged as a single JSON object to be
>>>> programmer-friendly, or packaged as raw bytes to be efficient.
>>>> 
>>> 
>>> I am only proposing a key fingerprinting specification that does not
>>> employ DER encoding. JWKs do not contain tabs or floating point numbers.
>>> 
>> _______________________________________________
>> jose mailing list
>> jose@ietf.org
>> https://www.ietf.org/mailman/listinfo/jose
> 
> _______________________________________________
> jose mailing list
> jose@ietf.org
> https://www.ietf.org/mailman/listinfo/jose