David Stutzman wrote, On 2008-12-30 07:55:
> I was playing around with the Sun PKCS11 provider and accessing NSS
> directly while in FIPS mode.  It appears nss 3.12 (on Vista 32-bit) has
> issues reporting key sizes both to Java and using symkeyutil directly:
> 
> Attempting to create a 128 byte (1024 bit) aes key on the token:
> C:\nss\fips>symkeyutil -K -n aesKey3 -t aes -s 128 -d .
> Enter Password or Pin for "NSS FIPS 140-2 Certificate DB":
> aesKey3              128   1024          aes  <restricted>

AES has 1024 bit keys?

> Here's the output showing all keys (aesKey and aesKey2 were created using
> sunPKCS11-nss):

> C:\nss\fips>symkeyutil -L -d .
> Enter Password or Pin for "NSS FIPS 140-2 Certificate DB":
>      Name            Len          Strength     Type    Data
> NSS FIPS 140-2 Certificate DB:
> aesKey3              -2147483648      0          aes  <restricted>
> aesKey2              268435456   -2147483648     aes  <restricted>
> aesKey               268435456   -2147483648     aes  <restricted>

  268435456 is 0x10000000
-2147483648 is 0x80000000

Neither of those values seems right.  That's probably a bug.
But it's clear to see how the two values relate to each other.
The "strength" is 8 times the length (in 2 of the 3 cases).

> Now, I switched to NSS 3.11.4 libraries/utils (which are the FIPS
> certified ones anyway) and the output changes:

> C:\nss\fips>symkeyutil -L -d .
> Enter Password or Pin for "NSS FIPS 140-2 Certificate DB":
>      Name            Len Strength     Type    Data
> NSS FIPS 140-2 Certificate DB:
> aesKey3              128   1024          aes  <restricted>
> aesKey2               16    128          aes  <restricted>
> aesKey                16    128          aes  <restricted>
> 
> Doing the following in Java to generate a store a key (Provider "p" is
> the Sun PKCS11 one I initialized with the config at the end of email):

> KeyGenerator keyGen = KeyGenerator.getInstance("AES", p);
> keyGen.init(128);
> SecretKey rawKey = keyGen.generateKey();
> System.out.println("Generated symmetric key:" + rawKey.toString());
> ks.setEntry("javaAES", new KeyStore.SecretKeyEntry(rawKey), 
> new KeyStore.PasswordProtection(password));
> ks.store(null, password);
> 
> Some output from test program showing it's session key at first, then
> after importing it's token key:

> Generated symmetric key:SunPKCS11-NSSfips AES secret key, 128 bits (id 1,
> session object, sensitive, extractable)
> Stored aesKey on token
> pulled sym key out of keystore? SunPKCS11-NSSfips AES secret key, 16 bits
> (id 3126949473, token object, sensitive, extractable)
> 
> yields the following:
> C:\nss\fips>symkeyutil -L -d .
> Enter Password or Pin for "NSS FIPS 140-2 Certificate DB":
>      Name            Len Strength     Type    Data
> NSS FIPS 140-2 Certificate DB:
> javaAES               16    128          aes  <restricted>
> 
> Deleting javaAES using symkeyutil, switching back to nss 3.12 libs/utils
> and re-running test program...

> Generated symmetric key:SunPKCS11-NSSfips AES secret key, 128 bits (id 1,
> session object, sensitive, extractable)
> Stored aesKey on token
> pulled sym key out of keystore? SunPKCS11-NSSfips AES secret key,
> 268435456 bits (id 3663820385, token object, sensitive, extractable)
> Exception in thread "main" java.security.InvalidKeyException: Illegal key size
>       at javax.crypto.Cipher.a(DashoA13*..)
>       at javax.crypto.Cipher.init(DashoA13*..)
>       at javax.crypto.Cipher.init(DashoA13*..)
>       at NssPkcs11.main(NssPkcs11.java:64)
> 
> and symkeyutil output:
> C:\nss\fips>symkeyutil -L -d .
> Enter Password or Pin for "NSS FIPS 140-2 Certificate DB":
>      Name            Len Strength     Type    Data
> NSS FIPS 140-2 Certificate DB:
> javaAES              268435456   -2147483648          aes  <restricted>
> 
> I must admit I don't know as much about C/C++ as I'd like but is this
> just a signed/unsigned problem?

The fact that one value appears negative is a signed/unsigned problem,
as you put it, but the fact that both values are so huge is some other
problem.

> I have all NSS libs/utils in /usr/mozilla
> I have a db in /nss/fips that's in fips mode
> My pkcs11 cfg file for the sun PKCS11 provider contains the following:
> name = NSSfips
> nssLibraryDirectory = /usr/mozilla
> nssSecmodDirectory = /nss/fips
> nssModule = fips
> nssDbMode = readWrite
> 
> Should I file a bug or am I just doing something stupid?

Please file a bug.
_______________________________________________
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to