Hi,
So I didn't get to the bottom of this thread because some of it is 'loading'
but I didn't see any mention of NIST 800-131a in all the posts I saw.
This standard (along with NIST 800-57 Part 1) provides information about
security strength and what is required. Basically NIST is saying you should
have at least 112 bit security by 2014 and that this is generally acceptable to
2031. They also say that you have to use FIPS approved algorithms.
The list of approved algorithms and related security strength as related to TLS
cipher suites and certificates:
Encryption:
AES-256 - 256 bit
AES-192 - 192 bit
AES-128 - 128 bit
Triple-Key Triple DES (3DES) - 112 bit
(NOTICE: No Camilla, RC4, SEED, DES or 2DES).
Digital Signature Generation:
DSA with p>=2048, q>=224 - 112 bit
RSA with n>=2048 - 112 bit
EC-DSA with n>224 - 112 bit
This generally affects what type of certifcates you need. Notice
RSA-2048 now required (no RSA-1024).
Hash Functions:
Digital Signature Generation:
SHA-224: 112 bit
SHA-256: 128 bit
SHA-384: 192 bit
SHA-512: 256 bit
(NOTICE: No MD5, no SHA-1)
MAC Generation:
HMAC with key >= 112 bits (note: SHA-1 can be used in MAC)
CMAC with 3DES - 112 bit
CMAC with AES - 128 bit+
CCM
GCM/GMAC
Related, NIST says some environments may need more than 112 bit security and
offers two profiles, NSA Suite B - 128 bit and NSA Suite B - 192 bit (RFC 6460)
For Suite B TLS, GCM cipher suites MUST be used; therefore, a Suite B TLS
client MUST implement TLS version 1.2 or later.
A Suite B TLS client configured at a minimum level of security of 128
bits MUST offer the TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 or the
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 cipher suite in the
ClientHello message. The TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
cipher suite is preferred; if offered, it MUST appear before the
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 cipher suite.
If configured at a minimum level of security of 192 bits, the client
MUST offer the TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 cipher suite
and MUST NOT offer the TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 cipher
suite.
So starting with your info:
The current list for Firefox 27 beta is:
C02B TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
C02F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
C009 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
C013 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
C00A TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
C014 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
C012 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
C007 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
C011 TLS_ECDHE_RSA_WITH_RC4_128_SHA
0033 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
0032 TLS_DHE_DSS_WITH_AES_128_CBC_SHA
0045 TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
0039 TLS_DHE_RSA_WITH_AES_256_CBC_SHA
0038 TLS_DHE_DSS_WITH_AES_256_CBC_SHA
0088 TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
0016 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
002F TLS_RSA_WITH_AES_128_CBC_SHA
0041 TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
0035 TLS_RSA_WITH_AES_256_CBC_SHA
0084 TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
0005 TLS_RSA_WITH_RC4_128_SHA
0004 TLS_RSA_WITH_RC4_128_MD5
I'd suggest you follow NIST 800-131a, but if not at least give a configuration
switch to drop NON-FIPS algorithms. From the above list,
I'd drop the RC4, MD5 and CAMELLIA options - at least if a FIPS configuration
switch is activated. Better - no switch and drop them. If you have to included
them for some reason - put them at the bottom of the preference list.
I think in general, you could say the shorter the key or hash, the faster it
runs, so if all you are trying to get to as 112 bit security (all that is
required in 2014), I'd consider preferring suites with AES_128 encryption and
SHA MACs over AES_256 or SHA-256 or SHA-384 or dropping AES-256 and SHA-256
suites.
3DES is still acceptable for 2014:
The following suite is the MANDATORY suite required by TLS 1.1 (RFC 4346). If
you are going to allow the browser to enable TLS 1.1, you should make sure this
is enabled when TLS 1.1 is enabled. There's also no reason to take it out if
the minimum security protocol is TLS 1.2 - just leave it at the bottom as you
have it.
000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
The following suite is the MANDATORY suite required by TLS 1.0 (RFC 2246). If
you are going to allow the browser to enable TLS 1.0, you should probably make
sure this is enabled when TLS 1.0 is enabled. There's also no reason to take it
out if the minimum security protocol is TLS 1.1 or TLS 1.2 - just leave it at
the bottom as you have it. This is less important since I don't think DSA
certificates are much used.
0013 TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
For forward perfect secrecy (a good thing even if it hurts performance some) -
perfer EC-DHE and DHE over RSA key negotiation.
For performance, prefer EC_DHE over DHE.
you seem to have done that.
I'm also not sure why you aren't supporting:
C0 08 - TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
00 13 - TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
00 16 - TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
If the answer is no one uses them or not in NSS - that's fine. However they
would be OK for NIST 800-131a.
Might also ask why you didn't include any DH key negotiation cipher suites
(e.g. C004, C003, 0031, 0030, 000D, 0010). It's OK for the server to have a
static DH key provided the client uses an ephemeral DH key. If the answer is no
one uses them or not in NSS - that's fine. However the above ones would be OK
for NIST 800-131a.
Not sure why you included C02B and C02F or why they are at the top. The SHA-256
is overkill for 2014. I know if you want GCM - it only comes with at least
SHA-256. I haven't researched GCM vs CBC. My first take would be you don't need
GCM - but there might be some reason to include and maybe even to put first.
C02B does allow you to support NSA Suite-B 128 if it is first in the list. It's
probably OK there but see below about other requirements for Hash and Signature
Algorithms.
So - my take after making only the above changes to remove non-FIPS algorithms
- the list should be in preference order:
C02B TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
C02F TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
C009 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
C013 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
C00A TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
C014 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
C012 TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
C007 TLS_ECDHE_ECDSA_WITH_RC4_128_SHA
0033 TLS_DHE_RSA_WITH_AES_128_CBC_SHA
0032 TLS_DHE_DSS_WITH_AES_128_CBC_SHA
0039 TLS_DHE_RSA_WITH_AES_256_CBC_SHA
0038 TLS_DHE_DSS_WITH_AES_256_CBC_SHA
0016 TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
002F TLS_RSA_WITH_AES_128_CBC_SHA
0035 TLS_RSA_WITH_AES_256_CBC_SHA
000A TLS_RSA_WITH_3DES_EDE_CBC_SHA
A related question - I don't know if you are sending the Hash and Signature
Algorithm extension in the client hello, but to get to 112 bit security
(required by NIST 800-131a) - you have to at least offer offer TLS 1.2, offer
the Hash and Signature Algorithm extension and allow the server to select
SHA-256 - SHA-1 signatures in the TLS protocol are no longer allowed after 2014
per NIST 800-131a.
It would be generally cool if you provided a NIST800-131a or 112 bit
configuration control - default to off. In this case, the client offer should
offer TLS 1.2, drop SHA-1 from the Hash and Signature ALgorithm extension in
the client hello, not allow the server to negotiate down to any TLS less than
1.2, and not allow the server to sign with SHA-1. You should also ensure that
certificates have 112 bit strength ( see Digital Signatures, Hashes, above).
It would be generally cool if you supported an NSA-Suite-B-128 and
NSA_Suite-B-192 control for folks that want it now. Would require you force TLS
1.2, limit the cipher suites as discussed above, and verify appropriate
certificate strengths (No RSA, ECDSA-P256 for 128 bit, ECDSA-P384 for 192 bit).
EC_DHE is probably the future direction - it provides the most security with
the smallest keys and has forward perfect secrecy (i.e. you can't decrypt the
session even if the authentication key is cracked)
--
dev-tech-crypto mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-crypto