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:


These are the default available ciphersuits in Firefox Aurora 28.0a2 on a 
Windows system:
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 configuratoin 
switch is activated. Better - no switch and drop them. If you have to included 
them for some reason - put them at the bottom if 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.

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 
certrificates 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 
them - 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 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
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


Subject of a separate question to be answered - 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 the 
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, and approrpriate certificate strengths (No RSA, 
ECDSA-P256 for 128 bit, ECDSA-P384 for 192 bit). For 128 bit - you have to 
remove SHA-1 from the Hash and Signature Algorithm extension. For 192 bit - you 
have to remove SHA-1 and SHA-256 from the Hash and Signature Algorithm 
extension.

Rick


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

Reply via email to