Hi all,

When I visit an HTTPS link I can see what strength of encryption is
used to encrypt the content (e.g., 256 bit AES) and if I dig a little
I can even see the strength of the certificate used for authentication
(e.g., 1024 bit RSA). What I can't seem to find anywhere is any
information about the strength or nature of the cryptography used for
key agreement.

Plainly the concern is that 256 bit AES does you no good if they AES
keys were exchanged insecurely. The security of the connection is the
lesser of the security of the content encryption, and the security of
the key agreement protocol. An attacker who compromises the key
agreement learns the AES key. In fact, the attacker could even store
the entire session data for some future when the agreement protocol
can be cracked, and then recover all of the data.

The content encryption algorithm and strength is visibly reported by
the browser, but it is likely providing a false sense of security.
Almost certainly the key agreement protocol is less secure than the
256 bit AES the browser tells me my bank supports. Using NIST's
published key equivalents, you need a 15360 bit Diffie Hellman key to
equal the security of 256 bit AES, and I am pretty sure that it's not
going to be using a 15360 bit key for agreement.

Therefore the key agreement strength is then the more important value
to check. For data that is to be secured beyond next year you need to
know (per NIST) that the key agreement was done with 2048 bit keys or
better. If you need to keep your secrets for a further 22 years you
need to know that it's at least 3072 bits strong. Anything less and
that "256 bit AES" note that pops up is really giving you a false
sense of security.

I was able to find an NSS page documenting the protocols that NSS
supports, and in recent versions of NSS it's clearly capable of quite
strong key agreement, possibly even using elliptic curves, but at the
very least supports key strengths much stronger than the 3072 bit NIST
recommends for the long run.

That doesn't tell me, though, what I actually get when I connect to my
bank. Is it negotiated? Are there minimums guaranteed by the
protocols? If it's negotiated, is it susceptible to man in the middle
attacks that would degrade the key strength? And in any case, before I
type in the passwords which unlock my retirement savings (which I'd
like to remain secret for a few more years) how do I check how secure
the connection is?

Thanks much for your kind replies!

Justin


-- 
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to