Couple of comments below. On Fri, Feb 19, 2016 at 9:14 AM, Eric Rescorla <e...@rtfm.com> wrote:
> > > On Fri, Feb 19, 2016 at 2:12 AM, Karthikeyan Bhargavan < > karthik.bharga...@gmail.com> wrote: > >> >> Note that this is (almost) exactly the original KDF scheme of OPTLS as I >> presented in Dallas >> >> >> Indeed, Ekr’s proposed scheme looks much like you original diagram. >> > > I would like to clarify that this isn't *my* scheme, though I think it's a > good > one. It came out of a long discussion with the people listed in my original > message and probably is most closely derived from something Karthik > drew. Sorry if I gave an impression to the contrary! > > In any case, I'm glad to see that it's close to Hugo's original diagram, > since that's a good indication that we're on the right track! > > > Anyway, from here you can see that the last HKDF in your scheme (with 0 >> salt) >> is not needed. You can derive the RMS, EMS keys directly from the second >> HKDF >> (as siblings of 1-RTT Traffic Keys). Am I missing something? >> >> >> The purpose of the third HKDF is to bind the handshake context (the full >> transcript) into >> the resumption and exporter keys. It adds no new key material. >> > I am still confused about this. Call K the key output by the Extract part of the second HKDF . You derive 1-RTT Traffic Keys as an output from Expand(K, whatever). Why can't you use the same K to derive RMS and EMS? Namely, compute RMS=Expand(K, label="RMS Derivation", ClientHello....ClientFinished). Similarly for EMS. This would include all the information you wanted in the derivation of each key, and it is still a valid HKDF computation (namely, it goes through extract and expand). Am I missing something? > Yes, that was my understanding as well. I see that Ilari suggested that > this might > not be necessary (presumably as a consequence of having the full shares > included in the stage 2 transcript rather than just the nonces as in TLS > 1.2. > The imperative here is to avoid creating an attack like triple handshake or > the Cremers et al. attack on the PSK-resumption. In any case, having the > EMS and RMS keys derived at the end also helps enforce the logic that you > should never be exporting/resuming until you have actually completed the > handshake. > > What I do miss in this scheme is the derivation of the Finished keys. I >> hope >> you do not intend to use the application key for this! >> >> >> Indeed those are missing in the picture, but I believe Ekr means to >> derive separate >> finished keys alongside the 1-RTT Traffic keys (right after the >> ServerHello) >> > > Affirmative. Error in my diagram. > > I also want to stress, for the record, that this simplification has >> nothing to >> do with using the application keys for handshake protection. >> >> >> I agree, this key schedule simplification seems orthogonal. >> > > Yes, but... In the current 1-RTT mode, there is a derivation stage > that does not appear on this diagram, one that includes the transcript up > to the > server CertificateVerify and is used to derive the application traffic > keys. So, > if part of the intent of this diagram is to reduce the number of points at > which > we derive, we will need to derive the application traffic keys at stage 2 > even if they are separate from the handshake traffic keys. I believe this > something you proposed, but I just want to clarify that this diagram would > entail > a change in the timing of key derivation, even if not the number of keys. > > > >> For what it’s worth, I am building a symbolic model of this new key >> schedule and will >> report my analysis results at TRON. It’s not a cryptographic proof, but >> it should shake >> out early logical bugs in the design, if any. >> >> Best, >> Karthik >> >> >> That "optimization" >> is orthogonal to this KDF simplification and hopefully will be reverted >> (*). >> >> (*) You may say I'm a dreamer, But I may not be the only one :-) >> >> Nothing to be reverted yet, it's just a proposal. If it's a bad idea (and > being prohibitively > hard to analyze is one reason it might be) then we shouldn't adopt it. > It complicates analysis, breaks generality and modularity, weakens the security guarantee, but d efinitely not " prohibitively hard to analyze". Hugo > > Hugo >> >> PS: I have a disagreement with you in terms of the protocol now being >> "signature based". Yes there are signatures in the protocol but not all >> modes >> use them and they are not always needed. In my eyes the logic of the >> protocol >> is best seen as DH-based with authentication occurring through the server >> Finished MAC (with a key derived from SS which can take the values of >> g^xs, >> g^xy or PSK). That is common to *all* modes, including 0-RTT and PSK >> which do >> not build on signatures. This is how the protocol was built originally and >> that structure remains in spite of the added signatures. >> >> > Sorry about the misleading terminology. I just meant that it presently has > signatures. > I'll try to be more precise in future. > > -Ekr > > > On Thu, Feb 18, 2016 at 4:05 PM, Eric Rescorla <e...@rtfm.com> wrote: >> >>> Hi folks, >>> >>> TL;DR. >>> Let's simplify the key schedule. >>> >>> >>> DETAILS >>> This is the second in a series of proposed simplifications to TLS 1.3 >>> based on implementation experience and analysis once the protocol >>> starts to harden. The following suggestion comes out of conversations >>> with Richard Barnes, Karthik Bhargavan, Antoine Delignat-Lavaud, >>> Cedric Fournet, Markus Kohlweiss, Martin Thomson, Santiago Zanella and >>> others. >>> >>> The current key schedule is elegant but it is actually more than we >>> need in that it allows SS to be known either before or after ES. If we >>> assume (as is always true in the current TLS 1.3 modes) that SS is >>> known before or at the same time as ES, then we can design a simpler >>> scheme which looks more like a ladder. Something like: >>> >>> 0 >>> | >>> SS -> HKDF [ClientHello + Context] >>> | \ >>> | \ >>> v v >>> X1 0-RTT Traffic Keys * >>> | >>> | >>> v >>> ES -> HKDF [ClientHello, ServerHello] >>> | \ >>> | \ >>> v v >>> X2 1-RTT Traffic Keys * >>> | >>> | >>> v >>> 0 -> HKDF [ClientHello...ClientFinished] >>> | >>> | >>> v >>> RMS, EMS >>> >>> As should be apparent, this key schedule is well-suited to the >>> simplified key change schedule in my previous message. >>> >>> Note 1: It might be attractive to not even bother with the first stage >>> if you aren't doing 0-RTT. It's not necessary then. However, this is >>> just an optimization. Also, if you don't want to extract an RMS or an >>> EMS you can skip the last stage (this is compatible). >>> >>> Note 2: The IKM for the final HKDF is 0, but in principle we could use >>> it to add some sort of new keying material, for instance g^xs if we >>> were using static DH certificates (see below). >>> >>> >>> In line with Hugo's message earlier today, the major argument against >>> this design is that it is more oriented towards a signature-based >>> system, which TLS 1.3 is today, than towards a DH certificate-based >>> system. To elaborate on this a bit, in a DH certificate-based system, >>> the server authenticates by proving knowledge of g^xs (and hence >>> s). In the current TLS 1.3 design you can do this trivially by >>> replacing the signature in the server CertificateVerify with a MAC >>> over the transcript (using g^xs as the key) [again, analysis needed.] >>> This is straightforward and doesn't require rearchitecting the >>> protocol really at all. However, this (as with the current >>> signature-based mode) does not provide confidentiality of the >>> connection if y is later revealed. >>> >>> As Hugo has noted several times, if you mix both g^xy and g^xs into >>> the traffic keys, then you are protected if either y or s is leaked, >>> which gives you somewhat stronger security properties with a DH >>> cetificate The current key schedule accommodates that by allowing for >>> SS to come before *or* after ES, but the simplified schedule does not >>> quite so easily. >>> >>> With that said, TLS 1.3 doesn’t support *any* pure static DH design >>> now and will do so even less well if we remove the key change as >>> discussed above. There are at least three ways forward to incorporate >>> them in future: >>> >>> - Just do as I suggest above. >>> - Define a new DH cipher suite that adds an additional key change. >>> This would allow us only to have the key change complexity in >>> that mode. >>> - Replace the 0 in the above schedule with g^xs and then define that >>> the key for KeyUpdate is actually coming out of the final HKDF. >>> >>> Any of those seem like they wouldn’t be too hard to do, if and when >>> we start having a lot of demand for DH certificates. >>> >>> Please discuss. >>> >>> -Ekr >>> >>> * Note that as I indicated in my previous message, it is possible to >>> generate multiple sets of keys at the same stage, if that is necessary >>> to handle the analysis concerns. >>> >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> 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 >> >> >> >
_______________________________________________ TLS mailing list TLS@ietf.org https://www.ietf.org/mailman/listinfo/tls