Re: [jose] thoughts on header criticality from recent polls

Mike Jones <Michael.Jones@microsoft.com> Tue, 26 February 2013 00:36 UTC

Return-Path: <Michael.Jones@microsoft.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 0A40321E818F for <jose@ietfa.amsl.com>; Mon, 25 Feb 2013 16:36:57 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.586
X-Spam-Level:
X-Spam-Status: No, score=-2.586 tagged_above=-999 required=5 tests=[AWL=0.012, BAYES_00=-2.599, HTML_MESSAGE=0.001]
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 kwmqh9x7cqSM for <jose@ietfa.amsl.com>; Mon, 25 Feb 2013 16:36:54 -0800 (PST)
Received: from na01-by2-obe.outbound.protection.outlook.com (na01-by2-obe.ptr.protection.outlook.com [207.46.100.26]) by ietfa.amsl.com (Postfix) with ESMTP id F3ACA21E817A for <jose@ietf.org>; Mon, 25 Feb 2013 16:36:53 -0800 (PST)
Received: from BY2FFO11FD008.protection.gbl (10.1.15.202) by BY2FFO11HUB021.protection.gbl (10.1.14.108) with Microsoft SMTP Server (TLS) id 15.0.620.12; Tue, 26 Feb 2013 00:36:51 +0000
Received: from TK5EX14HUBC103.redmond.corp.microsoft.com (131.107.125.37) by BY2FFO11FD008.mail.protection.outlook.com (10.1.14.159) with Microsoft SMTP Server (TLS) id 15.0.620.12 via Frontend Transport; Tue, 26 Feb 2013 00:36:51 +0000
Received: from TK5EX14MBXC284.redmond.corp.microsoft.com ([169.254.1.96]) by TK5EX14HUBC103.redmond.corp.microsoft.com ([157.54.86.9]) with mapi id 14.02.0318.003; Tue, 26 Feb 2013 00:36:46 +0000
From: Mike Jones <Michael.Jones@microsoft.com>
To: Richard Barnes <rlb@ipv.sx>, "odonoghue@isoc.org" <odonoghue@isoc.org>
Thread-Topic: [jose] thoughts on header criticality from recent polls
Thread-Index: AQHOE0rnw8y1TNuJwUiSwno8cI9vR5iLI8uAgAAljHA=
Date: Tue, 26 Feb 2013 00:36:46 +0000
Message-ID: <4E1F6AAD24975D4BA5B1680429673943674A7017@TK5EX14MBXC284.redmond.corp.microsoft.com>
References: <512B4A34.9090305@isoc.org> <CAL02cgSoLh6naQ9eH5pgBKQuWbLSLWCsN+yyDuqubg1d=q84jg@mail.gmail.com>
In-Reply-To: <CAL02cgSoLh6naQ9eH5pgBKQuWbLSLWCsN+yyDuqubg1d=q84jg@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
x-originating-ip: [157.54.51.37]
Content-Type: multipart/alternative; boundary="_000_4E1F6AAD24975D4BA5B1680429673943674A7017TK5EX14MBXC284r_"
MIME-Version: 1.0
X-Forefront-Antispam-Report: CIP:131.107.125.37; CTRY:US; IPV:CAL; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(199002)(189002)(51914002)(51444002)(377454001)(74502001)(74662001)(31966008)(53806001)(63696002)(66066001)(47446002)(65816001)(80022001)(47976001)(46102001)(55846006)(47736001)(50986001)(512954001)(49866001)(15202345001)(76482001)(54316002)(16406001)(56776001)(4396001)(561944001)(20776003)(33656001)(51856001)(54356001)(44976002)(79102001)(5343655001)(5343635001)(16236675001)(77982001)(59766001)(56816002); DIR:OUT; SFP:; SCL:1; SRVR:BY2FFO11HUB021; H:TK5EX14HUBC103.redmond.corp.microsoft.com; RD:InfoDomainNonexistent; A:1; MX:1; LANG:en;
X-OriginatorOrg: microsoft.onmicrosoft.com
X-Forefront-PRVS: 07697999E6
Cc: "jose@ietf.org" <jose@ietf.org>
Subject: Re: [jose] thoughts on header criticality from recent polls
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, 26 Feb 2013 00:36:57 -0000

Hi Richard,

Responding to your proposal "that we extend (1) by saying that the non-critical headers would not be covered by the header integrity check", I'll note that syntactically separating the critical and non-critical headers was option "B" in the third question of the poll, and would be a pre-requisite to having non-critical members not be covered by the integrity check.  By my count, only 10% of the respondents supported that position.  (I know - repeat after me - the IETF doesn't vote. :))  Possibly more important than the actual numbers, Karen wrote in her reply "I am assuming that we aren't going to define a separate header for non-critical elements."  So I, as an individual, I think that option should be off the table, because I can't see it increasing consensus.

I think it would be more productive to focus the discussion on how we want to handle the (integrity-protected) header parameters that are and aren't critical to understand, and not try to conflate that with not integrity protecting some parts of the message.

                                                            -- Mike

From: jose-bounces@ietf.org [mailto:jose-bounces@ietf.org] On Behalf Of Richard Barnes
Sent: Monday, February 25, 2013 2:12 PM
To: odonoghue@isoc.org
Cc: jose@ietf.org
Subject: Re: [jose] thoughts on header criticality from recent polls

Hi Karen,

Thanks for these thoughts.

tl;dr: I'm OK with (1) or (2).  I would propose that we extend (1) by saying that the non-critical headers would not be covered by the header integrity check.

Detailed responses inline below.

--Richard

<snip>
A. Want to be able to define messages with new semantics in future, without any risk that old implementations will misinterpret them with old semantics.

B. Want to be able to *redefine* (or constrain) the semantics of *existing* fields in future, without any risk that old implementations will misinterpret them with old semantics (or without the constraints).

C. Want to prevent large blobs of ignored data appearing in messages, as similar blobs have been used to create hash collisions between legitimate & malicious certificates that use weak algorithms (eg MD5).

D. Want to strongly discourage future extensions (feature-creep), under the philosophy that even well-intentioned extensions tend to do more harm (by adding complexity that is only deployed sporadically) than the good of any new functionality they bring.

E. Loosely coupling clients and servers is generally considered a good thing; but strongly coupling them is more appropriate for a secure message format for [insert a reason here]. A possible reason is that people are too likely to choose to make an extension non-critical for short-term ease of interoperability, instead of making it critical for better long-term security.

>From this list, I believe A is definitely a requirement. I am unclear regarding working group consensus on B, C, and E, and I believe D is not a requirement.

QUESTION: Is there working group consensus on the requirements we are trying to address? Perhaps a short discussion clarifying these would help drive consensus on the overall approach.

Here's my take:

A: This is a requirement.  But it is met trivially by having the new format use new identifier names and marking them critical.

B: This is not a requirement.  It's a bad idea.  Identifiers here are cheap, so if you want new semantics, just use a new identifier.

C: This is a requirement (and a good point), in the sense that we should avoid providing channels that an attacker could use to control the integrity check value on a JW* object.  However, what that argues is that non-critical fields shouldn't be covered by the integrity check, not that they should be ruled out altogether.

D: This is not a requirement, for the reasons you give.

E: This is not a requirement.  Couple of clients/servers is an application-layer issue.



As for possible solutions, we appear to have evolved to the point where we are of two minds:

1) Define a header field that explicitly lists the fields that may be safely ignored if not understood. (Here I am assuming that we aren't going to define a separate header for non-critical elements.)

2) Remain silent on header criticality in the JOSE specifications and leave it up to the various application specifications (possibly providing guidance directed to those applications in the JOSE specs).

I sense that there is more support for the first approach, but I am concerned that there is a significant minority that favor the second approach.

I would personally be OK with either approach.  I would generalize (1) slightly to say "Define a syntax for indicating which fields are critical / non-critical", and, in light of (C) above, also propose that that syntax remove non-critical fields from under the integrity check.