Post by Rick van ReinPost by Nico WilliamsThe use for this has to do with keying clusters atomically, which is
difficult to pull off. If you have user-to-user, you can always just
make sure that each member of a cluster can get a TGT for the service
principal name and not bother making sure they all have the latest keys
for the service principal name.
I had to read this five times :) but if I understand it, it is a
clever use. I was thinking p2p protocols, but you are saying that you
don't want to use the long-term service keytab but rather derive a TGT
on a daily basis, right? Intereting to use u2u for that indeed! and
sound like it'd work.
Correct.
User-to-user was originally meant for X11, both for users to be able to
connect to their own X11 displays, and for display sharing (I imagine
anyways) without having to have long-term service keys, but that just
hasn't worked out. Perhaps new p2p cases can be deployed, but given
that most of the relevant services involve some degree of
centralization (in the enterprise at least), I doubt it.
Post by Rick van ReinI've been thinking about such problems too, but resorted to doing the
GSS exchange in a protected environment and then handing out the
security context to a lesser process that could handle the symmetric
stuff. [...]
The problem with that is increased latency on the server side.
Post by Rick van Rein[...]. In fact, that's what we're considering doing with TLS also;
hand off the long-term credentials-based negotiation to a separate TLS
Pool, and get back the symmetric stuff for local, in-line handling.
(Whoops, I'm taking off now, sorry.)
No, I do think that's interesting from a privilege separation point of
view.
Post by Rick van ReinIt does sound like TLS-KDH can do what you want. Progress on that has
been stifling, mostly because 1.3 grabbed the attention of GnuTLS
developers, but I'm told that it will soon get in there -- and then
we'll move on with that spec too. It has a Kerberos-only mode and is
Post Quantum, by the way. In short, the server either sends no key or
a TGT, and the client either sends a service ticket or initiates u2u
exchanges. I thought it was the first such application.
TLS 1.3 can do what I want, yes.
A few things worth thinking about re: TLS 1.3:
- Kerberos tickets can function as session resumption tickets
It would be good to have a general purpose ticket cache library for
clients and ticket decryptor / authenticator validation library for
services.
- TLS 1.3 could be the foundation of new Kerberos KDC protocols:
- TLS 1.3 w/ PSK -> replaces PA-ENC-TIMESTAMP
- TLS 1.3 w/ client certs -> replaces PKINIT
- TLS 1.3 w/ Kerberos tickets as resumption tickets -> replace PA-TGS
- TLS 1.3 w/ some PAKE -> replaces the new Kerberos PAKE PA
- TLS 1.3 can secure KDC exchanges and completely simplify
everything to do with reply keys and what not
- we'd still have AP exchanges, but we could also have...
- ...a TLS 1.3 based GSS-API mechanism (like the GSI SSL mech)
- ...
On the down side, we'd then lose FAST unless we did TLS-over-TLS (not
quite renegotiation, mind you), which I'm sure is bound to upset
some.
Post by Rick van Reinhttps://tools.ietf.org/html/draft-vanrein-tls-kdh-04
https://github.com/arpa2/tlspool
https://github.com/arpa2/docker-demo/tree/master/build-tlspool
[the latter is not yet built with a TLS-KDH supportive GnuTLS]
I'll take a look.
Post by Rick van ReinPost by Nico WilliamsMulti-round-trip extensions can also make cluster key management easier,
naturally.
I have no idea what you mean with this. But I am curious!
RFCs 1964 and 4121 specify the GSS-API Kerberos mechanism, and that is a
half- or one-round trip mechanism. The initiator sends an AP-REQ plus a
little header, the acceptor responds with an AP-REP plus a little
header. But if anything goes wrong, then the acceptor sends back a
KRB-ERROR and the whole thing fails. We could (should!) extend the
mechanism so that the initiator can indicate that it can do extra round
trips, and then we can have the following scenario:
I->A: AP-REQ
A->I: KRB-ERROR (KRB_AP_ERR_BADKEYVER)
I<->TGS: get new service ticket
I->A: AP-REQ
A->I: AP-REP
(this could happen if you rebuild the service with new keys and lose the
old keys)
or
I->A: AP-REQ
A->I: Ticket
I<->TGS: user-to-user
I->A: AP-REQ
A->I: AP-REP
all while using the same GSS-API mechanism OID.
Nico
--