[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: New GS2 design -- much simplified, and simplified SCRAM



On Sat, Feb 28, 2009 at 12:51:50PM +0100, Arnt Gulbrandsen wrote:
> Nicolas Williams writes:
> >Chris said that he wants channel binding and no sec layers, but later 
> >it was pointed out that not every implementor is ready to do channel 
> >binding to TLS at this time, so I *think* we have consensus that 
> >SCRAM should provide at least an integrity sec layer.
> 
> SASL security layers haven't succeeded. I don't know why. If you know 
> the reasons why, and they don't apply to SCRAM (as implemented by 
> randoms, not by ietf-sasl regulars), then fine. Otherwise it's just a 
> dead feature.

Never minding the fact that I use them...  This is what SCRAM/GS2 would
look like without sec layer support in GS2:

      C: Request authentication exchange (not a GS2 message, but a SASL
one)                                                        
      S: Empty Challenge                                                                                                            
      C: T  n=Chris Newman,r=ClientNonce                                                                               
         ^  ----------------------------
         |     SCRAM message
	 |
	 GS2 field compressing the RFC2743 header; constant for SCRAM

         The channel bindings data will have been:

            SCRAM-CB T <actual TLS channel binding, if any>
            ^^^^^^^^ ^
            |        |
            |        A copy of the header in front of SCRAM                                                                    
            |                                                                                                                       
            |                                                                                                                       
            Mech name, effectively constant, provided by the app and
            likely taken from server's SASL mech list.

      S: r=ClientNonceServerNonce,s=PxR/wv+epq,i=128
         -------------------------------------------
            SCRAM message                                                                                                   

      C: c=0123456789ABCDEF,r=ClientNonceServerNonce,p=WxPv/siO5l+qxN4
         -------------------------------------------------------------
            SCRAM message
      S: v=WxPv/siO5l+qxN4
         -----------------
            SCRAM message
      C: Empty message
      S: Outcome of authentication exchange (not a GS2 message, ...)

That means:

 - A single constant is used as a header to just one SCRAM message.

 - The mechanism name and a constant is used as a header to the channel
   binding data.

 - We still have two mechanism names: the server advertises only one of
   them, indicating whether the server supports channel binding.

   This and putting the mechname used into the channel binding is NOT an
   artifact of GS2 -- a pure SASL SCRAM would still need this.

The channel binding flag is gone -- the server can try to validate the
client's HMAC both, with and without channel binding data (but always
with the GS2 channel binding header).

Nico
--