Re: [jose] Secdir review of draft-ietf-jose-json-web-signature-31

"Jim Schaad" <ietf@augustcellars.com> Sat, 20 September 2014 16:47 UTC

Return-Path: <ietf@augustcellars.com>
X-Original-To: jose@ietfa.amsl.com
Delivered-To: jose@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BA55B1A0190; Sat, 20 Sep 2014 09:47:43 -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=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7] 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 feVbXDdgdJUe; Sat, 20 Sep 2014 09:47:36 -0700 (PDT)
Received: from smtp3.pacifier.net (smtp3.pacifier.net [64.255.237.177]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 5CA011A0188; Sat, 20 Sep 2014 09:47:36 -0700 (PDT)
Received: from Philemon (winery.augustcellars.com [206.212.239.129]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) (Authenticated sender: jimsch@nwlink.com) by smtp3.pacifier.net (Postfix) with ESMTPSA id 38BB238EA5; Sat, 20 Sep 2014 09:47:33 -0700 (PDT)
From: Jim Schaad <ietf@augustcellars.com>
To: 'John Bradley' <ve7jtb@ve7jtb.com>
References: <21512.21725.209461.976375@fireball.kivinen.iki.fi> <4E1F6AAD24975D4BA5B16804296739439AE9DD47@TK5EX14MBXC292.redmond.corp.microsoft.com> <CAL02cgSsi603XL2o4S89pAw64yLv0JRZaDg823uiyuTkm02AHA@mail.gmail.com> <21527.63989.999440.801542@fireball.kivinen.iki.fi> <CAL02cgQKfQr_dQ=0-oY19G4rmYL3928UWFLBfhDAyspwMU7W9g@mail.gmail.com> <21529.16232.880915.215045@fireball.kivinen.iki.fi> <CAL02cgSRmP+iRYqTPUdcgTipeDw1H8TdF3AMP-ORSqOwiWJEcQ@mail.gmail.com> <4E1F6AAD24975D4BA5B16804296739439BA59EB7@TK5EX14MBXC286.redmond.corp.microsoft.com> <CAL02cgRTmsVTkwwDMbHtcqHzCs6GkOz-uZ_SOKNeR3hxJZMdDw@mail.gmail.com> <03a601cfd460$f8d71d70$ea855850$@augustcellars.com> <C9BA46F1-5F30-47C7-A90A-689C5DA084F6@ve7jtb.com> <03c701cfd483$d1cf45e0$756dd1a0$@augustcellars.com> <F70DA0F7-A855-49A8-A514-39AB8862AF74@ve7jtb.com>
In-Reply-To: <F70DA0F7-A855-49A8-A514-39AB8862AF74@ve7jtb.com>
Date: Sat, 20 Sep 2014 09:45:07 -0700
Message-ID: <043a01cfd4f2$3df75ff0$b9e61fd0$@augustcellars.com>
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="----=_NextPart_000_043B_01CFD4B7.919F65C0"
X-Mailer: Microsoft Outlook 14.0
Thread-Index: AQHuOuT/hh4qDeGZm241cGqvJGlDHQGDSHSvAfo059oBmzmMjgKe6fc2AlAhJ5UBTPVdRAKLDxUuAlnvmcEBe7XC2gIGyytgAc7rQnwCY5XyuJsN+K0g
Content-Language: en-us
Archived-At: http://mailarchive.ietf.org/arch/msg/jose/W_DFT9-6qib1BFNA4XAD_qBs3dc
Cc: ietf@ietf.org, secdir@ietf.org, 'Richard Barnes' <rlb@ipv.sx>, 'Tero Kivinen' <kivinen@iki.fi>, 'Michael Jones' <Michael.Jones@microsoft.com>, 'IESG' <iesg@ietf.org>, jose@ietf.org, draft-ietf-jose-json-web-signature.all@tools.ietf.org
Subject: Re: [jose] Secdir review of draft-ietf-jose-json-web-signature-31
X-BeenThere: jose@ietf.org
X-Mailman-Version: 2.1.15
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: Sat, 20 Sep 2014 16:47:43 -0000

No, the attack would run as follows:

 

1.        I send you a message which is hashed

2.       You send back a message which includes the signature in your hash

3.       I take the other message with the bad signature to court and your
signature on the hash confirming you received it.

 

Jim

 

 

From: John Bradley [mailto:ve7jtb@ve7jtb.com] 
Sent: Saturday, September 20, 2014 3:55 AM
To: Jim Schaad
Cc: ietf@ietf.org; secdir@ietf.org; Richard Barnes; Tero Kivinen; Michael
Jones; IESG; jose@ietf.org;
draft-ietf-jose-json-web-signature.all@tools.ietf.org
Subject: Re: [jose] Secdir review of draft-ietf-jose-json-web-signature-31

 

Hi Jim,

 

I think I am missing something.

 

If the sender is the attacker and has the mac key, then they can integrity
protect any plaintext they like with any hash that is supported..

 

This seems more like the sender wants to use a different hash than the
receiver prefers situation.

 

That seems to me like a different security concern than an attacker taking a
existing JWS and using a downgrade on the alg parameter to substitute a less
collision resistant hash, in order to substitute a plain text (envelope and
body in the Compact case) that has the same hash value as that encrypted by
the RSA/EC key.

 

Thanks

John B.

 

On Sep 19, 2014, at 11:34 PM, Jim Schaad <ietf@augustcellars.com> wrote:





 

 

From: jose [ <mailto:jose-bounces@ietf.org> mailto:jose-bounces@ietf.org] On
Behalf Of John Bradley
Sent: Friday, September 19, 2014 7:17 PM
To: Jim Schaad
Cc:  <mailto:ietf@ietf.org> ietf@ietf.org;  <mailto:secdir@ietf.org>
secdir@ietf.org; Richard Barnes; Tero Kivinen; Michael Jones; IESG;
<mailto:jose@ietf.org> jose@ietf.org;
<mailto:draft-ietf-jose-json-web-signature.all@tools.ietf.org>
draft-ietf-jose-json-web-signature.all@tools.ietf.org
Subject: Re: [jose] Secdir review of draft-ietf-jose-json-web-signature-31

 

For HMAC changing the  hash from SHA3 256 to SHA2 256 doesn't really get the
attacker much as they still don't know the key to be able to create a
appropriate fake plaintext.

So simply knowing a value that creates a collision is not sufficient for an
attack.

 

[JLS] remember that the attacker can be the sender of the message, in this
case the key is known to the attacker.

 

I interpreted Mike's comment on PKCS#1 as being that the signature needs to
be verified by the algorithm specified in the "alg" parameter.  That is not
to say that if in the case of PKCS#1 padding if the OID is not consistent
with the value of "alg" that wouldn't be an error.   I think that would be a
invalid JWS.     I do think that should be made clear.  

 

With PSS if the key is the same length it is true that you are going to be
vulnerable to collisions over the plaintext based on the weakest hash you
can get the receiver to accept.  

This is not a issue unique to JOSE in any way.   One would be tempted to
rule out SHA1 now but it is differentiated by it's key length, so can't be
downgraded to from SHA2.

 

John B.

 

 

On Sep 19, 2014, at 7:25 PM, Jim Schaad < <mailto:ietf@augustcellars.com>
ietf@augustcellars.com> wrote:






 

 

From: Richard Barnes [ <mailto:rlb@ipv.sx> mailto:rlb@ipv.sx] 
Sent: Friday, September 19, 2014 2:32 PM
To: Mike Jones
Cc: Tero Kivinen;  <mailto:iesg@ietf.org> iesg@ietf.org;
<mailto:secdir@ietf.org> secdir@ietf.org;  <mailto:ietf@ietf.org>
ietf@ietf.org;
<mailto:draft-ietf-jose-json-web-signature.all@tools.ietf.org>
draft-ietf-jose-json-web-signature.all@tools.ietf.org;
<mailto:jose@ietf.org> jose@ietf.org
Subject: Re: Secdir review of draft-ietf-jose-json-web-signature-31

 

"""
# Signature Algorithm Protection

In some usages of JWS, there is a risk of algorithm substitution attacks, in
which an attacker can use an existing signature value with a different
signature algorithm to make it appear that a signer has signed something
that he actually has not.  These attacks have been discussed in detail in
the context of CMS {{RFC 6211}}.  The risk arises when all of the following
are true:


* Verifiers of a signature support multiple algorithms of different
strengths

* Given an existing signature, an attacker can find another payload that
produces the same signature value with a weaker algorithm

* In particular, the payload crafted by the attacker is valid in a given
application-layer context

For example, suppose a verifier is willing to accept both "PS1" and "PS256"
as "alg" values, and a signer creates a signature using "PS256".  If the
attacker can craft a payload that has the same SHA-1 digest has as the
SHA-256 digest of the legitimate payload, then the "PS1" signature over the
bogus payload will be the same as the "PS256" signature over the legitimate
payload.

 

There are several ways for an application using JOSE to mitigate algorithm
substitution attacks:

* Don't accept signatures using vulnerable algorithms: Algorithm
substitution attacks do not arise for all signature algorithms.  
  * Signatures using RSA PKCS#1 v1.5 ("RS1", "RS256", etc.) are not subject
to substitution attacks because the signature value itself encodes the hash
function used.  
  * Signatures with HMAC algorithms ("HS1", "HS256", etc.) cannot be
substituted because the signature values have different lengths  Likewise
for signatures with ECDSA algorithms ("ES256", "ES384", etc.).

 

[JLS] This is not a true statement.  If you support both SHA256 and
SHA512/256 then the signature values have the same length.  This will also
be an issue if you support both the SHA2 and the SHA3 algorithm sets as they
have results of the same length.

 

  * The only algorithms defined in JWA {{I-D.ietf-jose-json-web-algorithms}}
that is vulnerable to algorithm substitution attacks is RSA-PSS ("PS1",
"PS256", etc.).  An implementation that does not support RSA-PSS is not
vulnerable to algorithm substitution attacks.

 

[JLS] ECDSA is open to this attack if you support both SHA256 and SHA512/256
the hash lengths are the same.  This will also be an issue if you support
both the SHA2 and the SHA3 algorithm sets as they have results of the same
length.

 

* Require that the "alg" parameter be carried in the protected header.
(This is the approach taken by RFC 6211.)

* Include a field reflecting the algorithm in the application payload, and
require that it be matched with the "alg" parameter during verification
(This is the approach taken by PKIX {{RFC5280}}.)

 

[JLS] RSA-PKCS#1.5 is open to this attack if the suggestion of Mike in a
message prior to this is put into the text.  That is to allow for the hash
inside of the signature and that outside of the signature to differ in value
because you only enforce one of the two values.

 

Of these mitigations, the only sure solution is the first.  Signing over the
"alg" parameter (directly or indirectly) only makes the attacker's work more
difficult, by requiring that the bogus payload also contain bogus
information about the signing algorithm.  They do not prevent attack by a
sufficiently powerful attacker.

"""

 

On Fri, Sep 19, 2014 at 2:49 PM, Mike Jones <
<mailto:Michael.Jones@microsoft.com> Michael.Jones@microsoft.com> wrote:

I would appreciate it if you would write a draft of the proposed security
considerations text, Richard.  Perhaps title the section "Unsecured
Algorithm Values".

 

                                                            Thanks!

                                                            -- Mike

 

From: Richard Barnes [mailto: <mailto:rlb@ipv.sx> rlb@ipv.sx] 
Sent: Wednesday, September 17, 2014 6:24 AM
To: Tero Kivinen
Cc: Mike Jones;  <mailto:iesg@ietf.org> iesg@ietf.org;
<mailto:secdir@ietf.org> secdir@ietf.org;  <mailto:ietf@ietf.org>
ietf@ietf.org;
<mailto:draft-ietf-jose-json-web-signature.all@tools.ietf.org>
draft-ietf-jose-json-web-signature.all@tools.ietf.org;
<mailto:jose@ietf.org> jose@ietf.org
Subject: Re: Secdir review of draft-ietf-jose-json-web-signature-31

 



On Wednesday, September 17, 2014, Tero Kivinen < <mailto:kivinen@iki.fi>
kivinen@iki.fi> wrote:

Richard Barnes writes:
>     Perhaps, but is there benefits for leaving the alg without protection?
>
> Simplicity (if you omit protected headers altogether), and
> compatibility with other signed things.  In the sense that you could
> transform one of them into a JWS without re-signing.  This would
> apply, for example, to an X.509 certificate -- just parse the outer
> SEQUENCE, and re-assemble into a JWS with the tbsCertificate as
> payload.  Same security properties that X.509 already has.

Ok, having this kind of information somewhere in the draft would help
to understand the reason. Also having text explaining that is
possible, and that the security properties of this option (i.e. no
problem with PKCS#1, etc... the text you had in the other email).

> It's also completely unnecessary for PKCS#1 signatures, which are
> the dominant use case today.

I agree.

> In general, I'm opposed to protocols baking in more
> application-specific logic than they need to.  The point of JOSE is
> to describe the cryptographic operation that was performed, and
> carry the relevant bits around.  Its job is not to fix all the
> weaknesses that every algorithm has. 

Yes, but this property might have security issues, so they should be
covered by the security considerations section.

 

I'm perfectly happy to have it documented in the Security Considerations. 

 

Mike: Should I generate some text, or do you want to take a stab?

 

--
 <mailto:kivinen@iki.fi> kivinen@iki.fi

 

_______________________________________________
jose mailing list
 <mailto:jose@ietf.org> jose@ietf.org
 <https://www.ietf.org/mailman/listinfo/jose>
https://www.ietf.org/mailman/listinfo/jose