On Fri, Feb 19, 2016 at 12:58 PM, Cedric Fournet <four...@microsoft.com> wrote:
> As pointed out by Karthik, we are not strongly advocating this > simplification, but we do not think it would weaken the security of TLS. > Details below. > I am glad you are not strongly advocating this. I strongly advocate not using the application keys to protect handshake messages. I want a well-delimited point where the output session key is as good as a fresh, never-used secret key, and that session key be used to protect subsequent record layer traffic. As I said, I cannot weigh this against implementation advantages of the freshness-violation approach; but these have to be *very* significant to be worth the security weakening. And yes, I think this is a security weakening. We are talking about two levels of guarantee. One, where the TLS key exchange protocol outputs a secret key that is good for *any* application that requires two parties to share a secret key. The other, where the use of the key produced by this protocol is secure enough for a *specific* application, namely, TLS record layer (at least in its current definition). The second is clearly weaker. It has a more limited (secure) use scope. For example, it means that changes to the record layer protocol could require a re-assessment of the security of the handshake, and certainly this is the case for a different application that somehow modifies the record layer or makes assumptions different than the intended use of the record layer. With a "generically secure" handshake this reassessment of the handshake would not be needed, you would only need to verify that your application is secure under an (ideally) shared secret key. I am sure we all agree that considering future changes to the record layer, changes to applications using the handshake, etc is not a theoretical concern. The last thing you want to assume is that the TLS environment and the protocol evolution is static. I think that a conservative take on this important point is the right way to go. H ugo > > -Cédric, with the miTLS team > > > > > > In the following, I only consider the record layer keys, which are used > for authenticated encryption; I ignore all other derived key materials. The > TLS layered design goes as follows: > > - The handshake provides fresh keys to the record layer (depending on its > internal state machine) and keeps running; > > - The record layer uses the current keys for encrypting *all* traffic, > mixing handshake messages, alerts, and application data (once enabled). > > > > These keys are used sequentially, and only by the record-layer. They are > not directly used within the handshake protocol itself, or by the TLS > application. > > - Since the sequence of keys is meant to protect the whole stream of TLS > fragments, one needs to authenticate each point in the stream where there > is a key change, to prevent any traffic truncation. As discussed in another > thread, we believe this is correctly handled in draft#11, but each key > change remains a source of complication [1]. > > - There are excellent reasons to change keys between 0-RTT and 1-RTT > (stronger key materials, forward secrecy). > > - Otherwise, what matters is the provenance of the key (how it was > derived, what identities are associated with it) and there is no point > changing keys with the same provenance. > > > > The situation is particularly clear in 0-RTT: in draft#11, the client > always derives two record-layer keys from the same materials, and uses each > of these keys in turn to encrypt half of its 0-RTT flight, with a Finished > message in-between that signals the key change. This key change does not > degrade security, but seems unnecessary. > > > > In 1-RTT, this is less obvious because, in draft#11, the handshake keys > and application-data keys are not exactly derived from the same materials. > We believe this should be fixed (see the “simplified key schedule” thread). > Then the same argument applies: the key change is not terrible, but it is > an unnecessary complication. > > > > I disagree with Hugo that using the same record-layer key for handshake > and application data yields a proof of a weaker guarantee. As far as I can > tell, this is a technicality in the cryptographic proof of the handshake, > and we still get the same security guarantees for TLS users [2]. I also > like simple proofs of generic security for the handshake core, but I do not > see how they can cover the other features of TLS [e.g. 3, and late > handshake messages] with or without the simplification. Given the choice > between a simpler protocol that it is easier to implement correctly, and > simpler proofs for a core, I would rather simplify the overall protocol and > do the extra proof work. > > > > One may argue about what would happen if some of the record-layer keys > were mis-used, against the TLS specification (despite its export mechanism) > and conclude that we need more, not less key changes [3]. But I would not > call it “a different application” and I am still tempted to simplify the > key schedule for its intended usage in TLS. > > > > > > [1] An attacker may, for instance, delete the last fragment encrypted > before the key change. Such a deletion will be caught at the protocol > layer, e.g. because the last fragment is not an “end_of_early_data” alert > or a Finished message. Without the key change, any deletion would be caught > immediately, as the next fragment decryption fails. > > > > [2] we do not have a complete model for TLS 1.3 yet, but we developed a > detailed model for TLS 1.2 http://eprint.iacr.org/2014/182 similarly > covering record-layer key changes (for renegotiations) and the fact that > those keys were used to protect the Finished messages *before* key > confirmation and application-data traffic. The main difference with classic > models for key exchange, where the protocol runs to completion and returns > “the” application key, is that in our model the honest instances provide > keys during the protocol run. > > > > [3] as recently discussed as 0.5-RTT, the spec enables the use of 1-RTT > keys before completing the handshake, with weaker guarantees on the > encrypted application data. However, an extra key change would require > additional signalling messages. > > > > > > *From:* TLS [mailto:tls-boun...@ietf.org] *On Behalf Of *Eric Rescorla > *Sent:* 19 February 2016 14:16 > *To:* Ilari Liusvaara <ilariliusva...@welho.com> > *Cc:* Karthikeyan Bhargavan <karthik.bharga...@gmail.com>; tls@ietf.org > *Subject:* Re: [TLS] Proposal: don't change keys between handshake and > application layer > > > > > > > > On Fri, Feb 19, 2016 at 3:58 AM, Ilari Liusvaara <ilariliusva...@welho.com> > wrote: > > On Fri, Feb 19, 2016 at 10:04:38AM +0100, Karthikeyan Bhargavan wrote: > > > Regardless of whether we make this change though, I think it would be > > useful for the TLS 1.3 RFC to clearly limit the scope of various keys > > generated by the handshake. During the connection lifetime, we generate > > a series of record encryption keys: handshake and application keys for > > 0-RTT and 1-RTT, and then a sequence of keys generated during rekeying. > > None of these keys should be used outside their intended use cases in a > > single connection. The only cross-connection secret specified in the > > protocol is the resumption master secret, and if applications want a > > key from TLS 1.3, they must only use the exporter master secret. All > > other keys are internal to TLS. > > I think TLS 1.3 RFC should specify what the protocol looks like and how > it can be used from application perspective. This includes specifying > what keys can be exported (among many other things, like how > authentication can be performed). > > I agree that exporting the main encryption keys or secrets those are > derived from for any purpose is a rotten idea. If you need keying or > authentication material, use TLS EXPORTER (tls-unique is deprecated) > with requirement to use EMS on prior versions[1]. > > > > This is the intent. I think we would be well-served to state this. > > > > > > Then one might need to export RMS. I think it should be exported as > blob that also contains other associated information (e.g ciphersuites). > And possibly also encrypted, using some MRAE algorithm. > > > > [1] Compatiblity hack: One might consider EMS always negotiated when > TLS 1.3 is negotiated. This could prvent applications that do know > about EMS but not TLS 1.3 from breaking when upgrading to TLS 1.3. > > That is, if application asks about TLS 1.3 (ServerVersion 3.4) > connection "is EMS enabled?" the answer will be always "yes" > (since the point of that check is to exclude THS attacks, and > TLS 1.3 already excludes those on baseline). > > > > Good suggestion. This in fact is what NSS currently does: > > > https://dxr.mozilla.org/mozilla-central/source/security/nss/lib/ssl/sslinfo.c#70 > <https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fdxr.mozilla.org%2fmozilla-central%2fsource%2fsecurity%2fnss%2flib%2fssl%2fsslinfo.c%2370&data=01%7c01%7cFOURNET%40064d.mgd.microsoft.com%7c769519cd967541c83e5808d339375926%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=yHU8A1PxV303DF3hxMLZ1BEQRbGqPe1gjdnrjhwWHe8%3d> > > > > -Ekr > > > > > > > > > > > > > > -Ilari > > > _______________________________________________ > TLS mailing list > TLS@ietf.org > https://www.ietf.org/mailman/listinfo/tls > <https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fwww.ietf.org%2fmailman%2flistinfo%2ftls&data=01%7c01%7cFOURNET%40064d.mgd.microsoft.com%7c769519cd967541c83e5808d339375926%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=PPF4H7v%2fuGhlNE2r%2bgtYYhztJsCvr9ftMN%2fPrxevBxQ%3d> > > >
_______________________________________________ TLS mailing list TLS@ietf.org https://www.ietf.org/mailman/listinfo/tls