On 10/10/13 19:06 PM, John Kelsey wrote:
Just thinking out loud....
The administrative complexity of a cryptosystem is overwhelmingly in key
management and identity management and all the rest of that stuff. So imagine
that we have a widely-used inner-level protocol that can use strong crypto, but
also requires no external key management. The purpose of the inner protocol is
to provide a fallback layer of security, so that even an attack on the outer
protocol (which is allowed to use more complicated key management) is unlikely
to be able to cause an actual security problem. On the other hand, in case of
a problem with the inner protocol, the outer protocol should also provide
protection against everything.
Without doing any key management or requiring some kind of reliable identity or
memory of previous sessions, the best we can do in the inner protocol is an
ephemeral Diffie-Hellman, so suppose we do this:
a. Generate random a and send aG on curve P256
b. Generate random b and send bG on curve P256
c. Both sides derive the shared key abG, and then use SHAKE512(abG) to
generate an AES key for messages in each direction.
d. Each side keeps a sequence number to use as a nonce. Both sides use
AES-CCM with their sequence number and their sending key, and keep track of the
sequence number of the most recent message received from the other side.
The point is, this is a protocol that happens *inside* the main security
protocol. This happens inside TLS or whatever. An attack on TLS then leads to
an attack on the whole application only if the TLS attack also lets you do
man-in-the-middle attacks on the inner protocol, or if it exploits something
about certificate/identity management done in the higher-level protocol.
(Ideally, within the inner protcol, you do some checking of the identity using
a password or shared secret or something, but that's application-level stuff
the inner and outer protocols don't know about.
What's your goal? I would say you could do this if the goal was
ultimate security. But for most purposes this is overkill (and I'd
include online banking, etc, in that).
Right now we've got a TCP startup, and a TLS startup. It's pretty
messy. Adding another startup inside isn't likely to gain popularity.
(Which was one thing that suggests a redesign of TLS -- to integrate
back into IP layer and replace/augment TCP directly. Back in those days
we -- they -- didn't know enough to do an integrated security protocol.
But these days we do, I'd suggest, or we know enough to give it a try.)
The cryptography mailing list