Re: [TLS] WGLC for draft-ietf-tls-md5-sha1-deprecate

2020-05-04 Thread Christopher Wood
Thanks, Alessandro! We'll aim to merge this PR on Friday. We ask that folks 
review it before then. 

   https://github.com/tlswg/draft-ietf-tls-md5-sha1-deprecate/pull/5

Thanks,
Chris, on behalf of the chairs

On Thu, Apr 23, 2020, at 10:45 AM, Alessandro Ghedini wrote:
> On Sun, Nov 24, 2019 at 11:27:26AM -0500, David Benjamin wrote:
> > On Sat, Nov 23, 2019 at 8:40 AM Ilari Liusvaara 
> > wrote:
> > 
> > > On Fri, Nov 22, 2019 at 08:18:47PM +0100, Hubert Kario wrote:
> > > > On Friday, 22 November 2019 03:25:24 CET, David Benjamin wrote:
> > > > > On Fri, Nov 22, 2019 at 8:35 AM Salz, Rich  wrote:
> > > > >
> > > > > > > ...
> > > > > > SHA-1 signature hashes in TLS 1.2" draft available
> > > > > > https://datatracker.ietf.org/doc/draft-ietf-tls-md5-sha1-deprecate/.
> > > > > > Please review the document and send your comments to the list by
> > > 2359 UTC
> > > > > > on 13 December 2019.
> > > > > >
> > > > > > I just re-read this.  Looks good. Perhaps a sentence of rationale in
> > > ...
> > > > >
> > > > > To that end, the combination of client advice in sections 2 and 4 is a
> > > bit
> > > > > odd. Section 2 uses SHOULD NOT include MD5 and SHA-1, but section 4
> > > says
> > > > > the client MUST NOT accept the MD5 SHA-1, even if it included it. Why
> > > would
> > > > > the client include it in that case? It seems the two should either
> > > both be
> > > > > MUST NOT or both be SHOULD NOT.
> > > >
> > > > because it also influences certificate selection, and getting a
> > > certificate
> > > > signed with SHA-1 isn't an automatically disqualifying property?
> > > > (it may be an intermediate CA that's not used, it may be an explicitly
> > > > trusted
> > > > certificate, etc.)
> > >
> > > If you don't want SHA-1 exchange signatures, you darn sure do not want
> > > actual SHA-1 certificates that are not trust anchors anyway. And because
> > > TLS 1.2 does not have separate lists for exchange signatures and
> > > certificate signatures, the client needs to withdraw advertisment for
> > > both in order to not send a misleading offer.
> > >
> > 
> > Right, I had a longer discussion of the certificate-but-not-TLS case but
> > omitted it. :-) Basically what Ilari said. In particular, I believe older
> > versions of Schannel will, despite being able to sign SHA-256,
> > preferentially sign SHA-1 if the client offers it. This is inconvenient
> > when it comes to predicting breakage but is perfectly consistent with the
> > client's offer. When I last looked at this a few years ago, this accounted
> > for a nontrivial portion of SHA-1-negotiating servers on the web, so
> > rejecting SHA-1 while still advertising it is probably not the best
> > strategy.
> > 
> > Fortunately, we've already distrusted SHA-1 X.509 signatures on the web, so
> > hopefully that will simplify things. There is a risk that some servers'
> > trust anchors' (otherwise irrelevant) signatures are SHA-1 and they are
> > trying to match it against the signature algorithms list, but I expect the
> > SHA-1-preferring servers to be the deciding concern. Issues with
> > trust-anchor-checking servers can likely be worked around by configuring
> > the server to not send the trust anchor, which is desirable anyway.
> > 
> > (All of this may not apply to non-web deployments, of course.)
> > 
> > 
> > > And I expect that in practice, not sending SHA-1 in
> > > signature_algorithms would cause very little breakage on top of what
> > > is already broken due to using SHA-1 exchange signatures.
> > 
> > 
> > 
> > So I think both should be MUST NOT.
> 
> So, based on this discussion, I made the following PR to change this to MUST 
> NOT
> https://github.com/tlswg/draft-ietf-tls-md5-sha1-deprecate/pull/5
> 
> Thanks for the review!
> 
> Cheers
> 
> ___
> TLS mailing list
> TLS@ietf.org
> https://www.ietf.org/mailman/listinfo/tls
>

___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Jonathan Hoyland
Hi Alexey

On Mon, 4 May 2020 at 16:23, Alexey Melnikov 
wrote:

> Hi Jonathan,
>
> On 04/05/2020 14:14, Jonathan Hoyland wrote:
> > Hi Sam,
> >
> > If you wanted to use a SCRAM based SASL auth then you could pick
> > `p=SCRAM-SHA256-PLUS`, or any other very specific IANA-registered
> > string, and update the SCRAM RFC to require that string with TLS 1.3.
> > You actively don't want for the same channel binding to be an input to
> > multiple different protocols (or even the same protocol but with
> > different parameters) because it opens the door to confusion attacks.
>
> Can you elaborate on what you are trying to protect from?
>
>
If two protocols use the same channel binding there is a risk that the
messages from one can be confused with the messages from the other.
This might happen accidentally, or an adversary might be able to forge one
from the other.
If you wanted to do a formal analysis of the of the security of TLS 1.3 +
SCRAM then a generic binding means you have to factor in what every other
possible protocol might do.
If you use a unique and specific channel binding then the analysis is far
easier and can be a lot more robust (this assumes a global coordinator of
unique strings, such as IANA).
>From an analysis perspective it's easier to rule out classes of attacks
than to consider all possible interactions between all users of the
interface, some of which you won't know about, or perhaps haven't even been
invented yet.

Historically channel bindings were constant once TLS negotiation was
> complete (they could change if TLS renegotiation happens). So they never
> depended on what was sent over the protocol above TLS.
>
>
Yeah, I think the design in TLS 1.3 is much more robust, especially from a
formal analysis perspective.
By constructing channel bindings based on the parameters negotiated over
the top you get a belt-and-braces design.
If you have a contributive channel binding [1] then if the security of
either the underlying protocol (in this case TLS) or the over-the-top
protocol (in this case SCRAM) fails, then the channel binding guarantees
the authentication still happened properly.
Consider the case where an adversary publishes the server's private key to
twitter.
If you have a contributive channel binding then if the SCRAM handshake
succeeds you could be sure that you were talking to the real server, and
weren't being MITMed.
If you don't base the channel binding on the parameters agreed in the
upper  protocol it's possible (in theory) that an adversary could compute
two SCRAM handshakes that appear to succeed, but that actually agree
different parameters.
In this particular case it's not obvious how that could happen, but it's
easy to think up pathological examples, and [1] has a few concrete examples
too.


> > I've only skimmed the SCRAM RFC, but it might make sense to include
> > `client-first-message` and `server-first-message` as context to the
> > exporter interface, because it seems that the channel binding isn't
> > needed until the `client-final-message`.
>
> "the channel binding isn't needed until the `client-final-message`" is
> correct. Can you elaborate on what is problematic with this?
>

Sorry if I was unclear, there's nothing problematic with this per se.
It's just that the channel binding can't be dependent on itself, but
including everything that precedes the channel binding just seems like an
easy win, esp. as (in this case) that includes all parameter negotiation.


> > The idea is to use the transcript to bind the channel binding to the
> > negotiation of SCRAM parameters, and thus allow you to define a single
> > "TLS-SASL-SCRAM" string (or whatever makes sense), rather than have
> > one for each possible set of parameters.
> > Obviously you'd need to think some more about whether that was
> > actually secure, but at first glance it seems like a reasonable approach.
> >
> > Channel bindings that bind both the underlying channel and the
> > higher-level protocol make more sense to me that channel bindings that
> > only identify the underlying channel, because you don't have to worry
> > about the (potentially pathological) behaviours of other users of the
> > binding.
> >
> Best Regards,
>
> Alexey
>
> Regards,

Jonathan

[1] Bhargavan, Karthikeyan, Antoine Delignat-Lavaud, and Alfredo Pironti.
"Verified Contributive Channel Bindings for Compound Authentication." *NDSS*.
2015.
https://prosecco.gforge.inria.fr/personal/karthik/pubs/verified-channel-bindings-ndss15.pdf
___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Sam Whited
On Mon, May 4, 2020, at 11:44, Alexey Melnikov wrote:
> In the Introduction of your draft you are referencing RFC 5705, which
> can't be used with TLS 1.3. Instead you should reference Section 7.5
> of RFC 8446.

Fixed on my local copy [1]. Thanks for your feedback!

—Sam

[1]: 
https://rfcs.samwhited.com/draft-whited-tls-channel-bindings-for-tls13-02.html

___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Alexey Melnikov

Hi Sam,

On 04/05/2020 15:39, Sam Whited wrote:
I have updated the draft with these changes: 
https://datatracker.ietf.org/doc/draft-whited-tls-channel-bindings-for-tls13/ 



In the Introduction of your draft you are referencing RFC 5705, which 
can't be used with TLS 1.3. Instead you should reference Section 7.5 of 
RFC 8446.


Best Regards,

Alexey

___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Alexey Melnikov

Hi Sam,

On 04/05/2020 15:39, Sam Whited wrote:

I'm still not entirely clear if this would be a better draft for the
KITTEN WG or this one. If we update the SCRAM RFCs I think it may be
better to go through KITTEN, but I'm not sure that they'll want to take
that work on. I'll ask. Any advice here would be appreciated since I
know almost nothing about IETF policy or procedures.


IETF doesn't really have rules about situations like this.

I think doing this in KITTEN makes more sense, as long as feedback is 
asked on the TLS mailing list. KITTEN is more likely to have interest to 
drive this work to completion. Having said that, if there is strong 
interest in getting this done in TLS, that would be fine with me.


Best Regards,

Alexey

___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Alexey Melnikov

Hi Jonathan,

On 04/05/2020 14:14, Jonathan Hoyland wrote:

Hi Sam,

If you wanted to use a SCRAM based SASL auth then you could pick 
`p=SCRAM-SHA256-PLUS`, or any other very specific IANA-registered 
string, and update the SCRAM RFC to require that string with TLS 1.3.
You actively don't want for the same channel binding to be an input to 
multiple different protocols (or even the same protocol but with 
different parameters) because it opens the door to confusion attacks.


Can you elaborate on what you are trying to protect from?

Historically channel bindings were constant once TLS negotiation was 
complete (they could change if TLS renegotiation happens). So they never 
depended on what was sent over the protocol above TLS.


I've only skimmed the SCRAM RFC, but it might make sense to include 
`client-first-message` and `server-first-message` as context to the 
exporter interface, because it seems that the channel binding isn't 
needed until the `client-final-message`.


"the channel binding isn't needed until the `client-final-message`" is 
correct. Can you elaborate on what is problematic with this?


The idea is to use the transcript to bind the channel binding to the 
negotiation of SCRAM parameters, and thus allow you to define a single 
"TLS-SASL-SCRAM" string (or whatever makes sense), rather than have 
one for each possible set of parameters.
Obviously you'd need to think some more about whether that was 
actually secure, but at first glance it seems like a reasonable approach.


Channel bindings that bind both the underlying channel and the 
higher-level protocol make more sense to me that channel bindings that 
only identify the underlying channel, because you don't have to worry 
about the (potentially pathological) behaviours of other users of the 
binding.



Best Regards,

Alexey


___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Sam Whited
On Mon, May 4, 2020, at 09:14, Jonathan Hoyland wrote:
> I've only skimmed the SCRAM RFC, but it might make sense to include
> `client-first-message` and `server-first-message` as context to the
> exporter interface, because it seems that the channel binding isn't
> needed until the `client-final-message`. The idea is to use the
> transcript to bind the channel binding to the negotiation of SCRAM
> parameters, and thus allow you to define a single "TLS-SASL-SCRAM"
> string (or whatever makes sense), rather than have one for each
> possible set of parameters. Obviously you'd need to think some more
> about whether that was actually secure, but at first glance it seems
> like a reasonable approach.

I had originally written a long-ish reply about why we couldn't make
this SCRAM specific, but I've just realized after going back and
looking at the spec and one of my own implementations that I was
completely wrong.

This is a great idea, and I believe would be secure since the client-first-
message and server-first-message will contain their respective random
nonces. A malicious client or server *could* slip some arbitrary text
into either message, but if I understand TLS exporters security
properties correctly this should not pose a problem and the export data
should still be indistinguishable from random noise to someone without
the TLS master secret (a sanity check by an expert on this statement
would be appreciated).

I have updated the draft with these changes: 
https://datatracker.ietf.org/doc/draft-whited-tls-channel-bindings-for-tls13/

I'm still not entirely clear if this would be a better draft for the
KITTEN WG or this one. If we update the SCRAM RFCs I think it may be
better to go through KITTEN, but I'm not sure that they'll want to take
that work on. I'll ask. Any advice here would be appreciated since I
know almost nothing about IETF policy or procedures.

Thanks for your feedback!

—Sam

___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls


Re: [TLS] TLS Export Channel Binding

2020-05-04 Thread Jonathan Hoyland
Hi Sam,

If you wanted to use a SCRAM based SASL auth then you could pick
`p=SCRAM-SHA256-PLUS`, or any other very specific IANA-registered
string, and update the SCRAM RFC to require that string with TLS 1.3.
You actively don't want for the same channel binding to be an input to
multiple different protocols (or even the same protocol but with different
parameters) because it opens the door to confusion attacks.

I've only skimmed the SCRAM RFC, but it might make sense to include
`client-first-message` and `server-first-message` as context to the
exporter interface, because it seems that the channel binding isn't needed
until the `client-final-message`.
The idea is to use the transcript to bind the channel binding to the
negotiation of SCRAM parameters, and thus allow you to define a single
"TLS-SASL-SCRAM" string (or whatever makes sense), rather than have one for
each possible set of parameters.
Obviously you'd need to think some more about whether that was actually
secure, but at first glance it seems like a reasonable approach.

Channel bindings that bind both the underlying channel and the higher-level
protocol make more sense to me that channel bindings that only identify the
underlying channel, because you don't have to worry about the (potentially
pathological) behaviours of other users of the binding.

Regards,

Jonathan






On Fri, 1 May 2020 at 19:16, Sam Whited  wrote:

> On Fri, May 1, 2020, at 14:08, Jonathan Hoyland wrote:
> > Maybe I'm missing something, but I don't see what your draft adds? If
> > someone wants to construct a channel binding then they agree with
> > their peer on a context and a label, and use that to construct an
> > exporter key.
>
> The draft just registers a method of using it with the IANA Channel
> Binding Types registry so that you can negotiate and use exported keying
> material in eg. SCRAM based SASL auth. Right now if I wanted to use EKM
> for channel binding, what would I negotiate (ie. what would I set the p
> field of a gs2 header to in SASL based auth?)
>
>
> > Is the idea to reserve the string for some specific use? If so, then
> > the suggested string is far to general, as it describes _any_ use of
> > the interface.
>
> Yes, that's the idea. This registers the "tls-exporter" channel binding
> type in the registry, and the label EXPORTER-Channel-Binding to use with
> it. This is supposed to be a generic channel binding type that can be
> used to negotiate channel binding when multiple are available, eg. if
> the server supports both tls-unique (the last TLS finished message) and
> exporter data, we need an identifier to decide that we want to use
> exporter data. That also means having a label that we can associate with
> this context.
>
> I'd be happy to change the name if the consensus is that this is too
> general, but I didn't think it made sense to make this SASL or  auth system> specific.
>
> —Sam
>
___
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls