[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Poll: use of TLS channel bindings in SCRAM
--On Thursday, May 28, 2009 06:35:16 PM -0500 Nicolas Williams
<Nicolas.Williams@xxxxxxx> wrote:
On Thu, May 28, 2009 at 10:49:03PM +0100, Alexey Melnikov wrote:
1). SCRAM should just use a single allowed TLS channel binding and don't
have any negotiation of other TLS channel bindings (*) (**)
a). the default is tls-unique
b). the default is tls-server-end-point
2). SCRAM should just use tls-server-end-point, fallback to tls-unique,
no negotiation of other TLS channel bindings (*)
3). SCRAM should always use channel binding negotiation (*)
4). SCRAM should have a default TLS channel binding with optional
negotiation of TLS channel bindings (*)
a). the default is tls-unique
b). the default is
5). I have another opinion [this is for the case when there is some
valid choice which you think should be considered by the WG]
(1a) future-proofed would be my preferred approach. I.e., (1a) with the
'**' details filled out.
Mine as well. Particularly, I think we're trying to achieve the following:
- Maximum interoperability without compromising security
- Not too painful to implement, for clients or servers
- Not define negotiaton now, but...
- Leave the door open to define negotiation later or...
- Let SASL application protocols define negotation or...
- Let users/administrators select channels and CB types
To that end, I think the things we have to do now are define a way for
GS2/SCRAM to carry information about what CB type is in use, and specify a
default behavior in the absence of guidance from the user, application
protocol specification, or an as-yet-undefined negotiation mechanism.
I can imagine a number of ways to define negotiation in the future,
including both some that negotiate mechanism and CB type separately and
some that link them. Nico and I have worked through one possible
negotiation strategy in each of those categories and convinced ourselves
that each approach can be defined in the future without impacting
GS2/SCRAM, provided we add the header field Nico describes below (we also
designed an extension to TCP, but you don't care about that).
If we're going to have a single default, that should be tls-unique.
I'm also OK with (2), future-proofed in the same way as (1a), but Nico
makes an argument that tls-server-end-point may be dangerous given the
possibility of GSS-API mechanisms which depend on unique channel bindings.
I'll accept that argument for now, but I think that such dependencies
should be discouraged at the GSS-API layer, since the GSS-API imposes no
requirement that callers use unique channel bindings or in fact any at all.
But that's probably a discussion for kitten.
I'd be OK with (4a), but like Nico, I don't feel it's worthwhile to specify
a negotiation mechanism now. In practice, it's going to be some time
before there are SASL application protocols which care about channel types
other than TLS, and if we're deciding that TLS endpoint bindings are unsafe
and/or not worthwhile, then we're unlikely to need a binding type for TLS
other than tls-unique any time soon. For similar reasons, (3) seems not
worth doing.
Like Nico, I believe that (1b) is unacceptable since tls-server-end-point
may not always work.
I believe we can do this by adding a field to the GS2 header that would
be present *only* when the channel binding type used is not the default
one. Since this would not materially change SCRAM/GS2, I believe this
would be the ideal solution.
I'm fine with this approach, or with adding a field which is always present
when channel bindings are in use.
I believe Nico is writing up a concrete proposal which builds on what he's
already said and on the goals I mention above.
-- Jeff