That's a much better answer than I was looking for :) That makes sense. The gap between theory and practice here is still something that is worth spending some time on, but I can see how that is something that we might want to keep out of this document. The goal here is simple: take a PSK that is bound to one KDF and apply a transform that will allow it to be used with TLS ... in a way where the choice of cipher suite is not constrained by the properties of that PSK.
Understanding your broader goals better leads me to conclude that issue #15 (https://github.com/tlswg/draft-ietf-tls-external-psk-importer/issues/15) is more important to resolve. On Thu, Sep 5, 2019, at 20:56, Jonathan Hoyland wrote: > Hi Martin, > > So I agree that on the micro-scale there is limited practical value to > be gained from adding this binding. > The theoretical benefits, which mean that the client and server agree > that PSK Importers are being used are nice, but on their own might not > justify a high-effort change. > However, at the macro-scale I think this is an interesting and useful > addition. > In particular I think we can use this change to address what I see as a > short-coming of TLS 1.3 in general. > > Being able to use TLS as a building block for other protocols is really > powerful and useful, but the current mechanisms are unnecessarily > restrictive. > I have spent a lot of time thinking about exporter keys, and the way > they let us combine other protocols with TLS. > TLS has really nice, strong, properties, and being able to leverage > them in other protocols makes designing complex protocols much easier, > especially from a formal analysis perspective. > > One limitation of exporter keys, however, is that you need to use TLS > as your first/base protocol. > Whilst you can use exporter keys to securely run a protocol over the > top of TLS and get the guarantees of both*, you cannot run TLS inside > another protocol and easily get the security guarantees of both*. > I think that this restriction is unnecessary. > > My overarching goal is to make it possible to securely put protocol > building blocks before TLS. > The way you would achieve this is by allowing such blocks to be chained > together and then bound into the TLS handshake. > Ideally, all protocols that wish to use TLS in this way would use this > key-schedule extension, allowing for complex state to be built up and > composed into the TLS handshake. > > PSK Importers are, to my mind, a good place to start. > Agreeing on a change of hash function can be viewed as a very small, > very simple protocol. > The necessary modifications are small, and the benefits, whilst > incremental, are clear. > The modification to the key schedule means that both parties can be > sure that the other agrees that they are using PSK Importers and > further, that they agree on the original hash function and the new hash > function. > > Other protocols can then also make use of this extension to the key > schedule to achieve similar aims. > The idea would be that any protocol that uses this label implies that > it is providing a context field (which may or may not be empty). > These protocols can then be chained together in an agreed order, and > the agreement properties of TLS can be used to verify that both parties > agree on the transcripts of the previous protocols. > > Making this change allows us to leverage this power in future to make > any number of more useful protocols. > However, without a key schedule change, there is no way for a Client > and Server to be sure that their peer is actually using TLS as a > building block, which kneecaps any ability to compose it with other > protocols. > In this case it means that a Client cannot be sure that it agrees with > the Server on the status of their relationship, and vice versa. > So to directly answer your question, the value of the distinction in > this case is incremental, but opens the door for other > extensions/protocols to leverage it to provide arbitrarily complex > guarantees**. > > There may be a case for working on a backwards compatible way of doing > this, where a client offers PSK Importers multiple times with binders > computed both ways, but I don't think that it's necessarily a good > idea. > > Regards, > > Jonathan > > * The guarantees it is possible to get from this key-schedule change > are a little bit nuanced, because a PSK handshake doesn't rely on a > long-term asymmetric key, but that's a discussion for another time. > ** Modulo limitations on outward compound authentication. > > > On Wed, 4 Sep 2019 at 02:46, Martin Thomson <m...@lowentropy.net> wrote: > > I want to push on this a little harder. Not because I don't think that more > > formal protections in the line of key separation are bad (they are great), > > but more to dig into the real reasons driving this change. The > > justification I've gotten thus far is somewhat superficial, and I want to > > see if there is something fundamental that we can point at. > > > > When we built the ext/res distinction, there was a clear problem > > expressed. We had the potential for both to be used by the same servers at > > the same time (though not for the same connection) and distinguishing > > between them was important. It wasn't so much that agreement about > > provenance of keys was important, but more what it meant for that > > provenance to be confused. A resumption key implies a number of things > > about the new session that extend from the previous session, whereas a > > straight external key does not imply the same. If a client and server were > > to disagree on these properties, one might assume properties of the > > resulting session that the other did not and we would be in a bad place. > > > > It's true that servers are in complete control over how keys are > > identified, and so this could always be addressed by the server by ensuring > > that key identifiers clearly distinguish between the two types. However, > > that protection would be informal and ad hoc. We wouldn't guarantee that > > separation by any mechanism. By applying different labels to the binder key > > we produce, disagreement results in interoperability failure (both client > > and server could be wrong, but at least they then agree, which is the > > property we really need). > > > > As an aside, we could have used explicit labels in the protocol, but we > > decided that an implicit one was better. For the record, I still think > > that's a good design paradigm to apply. > > > > The concern with the ext/res distinction doesn't seem to apply equally > > here. For simplicity, I think that we should consider this a path into the > > "ext" bucket, so that we have an resumption/other analysis holding (as > > above), and an external/imported analysis to perform in order to arrive at > > the "other" category. The question then becomes whether to fully > > distinguish imported PSKs from "regular" external PSKs. > > > > I think that the context of use is important to consider. The imported PSK > > will enter the key schedule (as shown below) after having been through a > > derivation process that includes additional information: most importantly, > > the protocol version and the hash function that the resulting PSK will be > > bound to. That produces something that could coexist with other uniformly > > random PSKs of sufficient entropy (i.e., it wouldn't collide with > > "external" PSKs with non-negligible probability). Because neither imported > > nor external PSKs come with any different presumption about the session > > that is ultimately produced, the same rationale for ext/res doesn't apply, > > and I'm struggling to find any stronger justification. > > > > The cost of adding more separation is forced changes to code. With the > > design prior to this, the importer function was loosely coupled to the TLS > > stack. It would be possible to manufacture as many "external" PSKs as > > needed from an root "imported" PSK. The resulting outputs could be fed to > > endpoints that haven't been updated to support this new importer stuff. > > That's obviously less clean than having native support for this, because > > the amount and complexity of key provisioning is higher, but it could have > > worked. This now requires code changes to deploy. > > > > So I'm not seeing strong cause here. > > > > To me, the relevant question is: Do client and server need to agree that > > this is an imported PSK as distinct from another form of external PSK? Or, > > what is the value of this distinction? > > > > On Tue, Sep 3, 2019, at 09:29, Christopher Wood wrote: > > > Hi folks, > > > > > > > > > Per Jonathan Hoyland's recommendation, we're considering adding a new > > > binder_key label ("imp binder") for imported PSKs. Specifically, this > > > changes the key schedule from this: > > > > > > ~~~ > > > 0 > > > | > > > v > > > PSK -> HKDF-Extract = Early Secret > > > | > > > +-----> Derive-Secret(., "ext binder" | "res binder", "") > > > | = binder_key > > > ~~~ > > > > > > to this: > > > > > > ~~~ > > > 0 > > > | > > > v > > > PSK -> HKDF-Extract = Early Secret > > > | > > > +-----> Derive-Secret(., "ext binder" > > > | | "res binder" > > > | | "imp binder", "") > > > | = binder_key > > > ~~~ > > > > > > Details can be found in the PR [1]. > > > > > > This does not seem to affect the interoperability story (imported keys > > > are further differentiated from non-imported keys). However, it's non > > > trivial, so we'd like feedback from the group before merging the change. > > > > > > Thanks! > > > Chris (no hat) > > > > > > [1] https://github.com/tlswg/draft-ietf-tls-external-psk-importer/pull/10 > > > > > > _______________________________________________ > > > 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