From MozillaWiki
Jump to: navigation, search


Welcome to the NSS roadmap. NSS is a collection of cryptographic libraries used for performing functions like setting up SSL connections or encrypting messages using the S/MIME standard. In 2007, we plan to make on major NSS releases: NSS 3.12. This roadmap outlines the features and schedule estimates for these upcoming NSS releases. These releases will address the needs of the Mozilla clients, as well as the needs of Red Hat and Sun Microsystems server products and related technologies. Other consumers of NSS will also benefit from the performance and standards compliance features.

NSS 3.11

NSS 3.11 Roadmap has been moved to NSS:Roadmap:Archive .

FIPS 140-2 Validation

The software cryptographic module (libsoftokn3.so) in NSS 3.11 will be submitted to BKP Security, an external validation lab, for FIPS 140-2 validation. To complete the validation, we will produce some code and a lot of documentation to demonstrate that NSS adheres to the standards. This work is being tracked in our FIPS Wiki page. We are making our documentation for FIPS 140-2 validation available on our FIPS Wiki page to make it easier for other vendors to validate other versions of NSS.

Many people ask us which version of the Mozilla clients (Firefox browser and Thunderbird mail client) will contain a FIPS 140-2 validated cryptographic module. These plans are still being reviewed, but we expect Mozilla to be able to ship the FIPS 140-2 validated module in the 2.0 release. Here is the current Firefox Roadmap. Of course, any change in the NSS schedule or the Mozilla schedule could cause this target to move.

NSS 3.12

NSS 3.12 Major Features (Planned)

libpkix: an RFC 3280 Compliant Certificate Path Validation Library

We are implementing libpkix, a new certificate path validation library that supports the certificate and CRL profile specified in RFC 3280.

libpkix will add to NSS several features that are long overdue, such as certificate policy extension handling, cross-certification (Federal Bridge CA), and (we hope) fetching of CRLs from certificates' CRLDP extensions.

A new variant of CERT_VerifyCert will be added that uses libpkix for certificate path validation, and the old CERT_Verify functions will optionally use libPKIX with limited capability.

Here are some design documents related to this project:

Specifying revocation checking for CERT_PKIXVerifyCert

SQLite-Based Shareable Certificate and Key Databases

Many client applications, such as Firefox, Thunderbird, Evolution, and OpenOffice.org, use NSS, but they each have their own certificate and key databases. As a result, for example, if you import and trust a certificate in Firefox, you will not see it in Thunderbird. This is because Berkeley DB 1.85, the database NSS currently uses, can't be shared by multiple processes.

Although new versions of Berkeley DB (from Sleepycat Software) support multiprocess access, its open source license is incompatible with the Mozilla Public License (MPL).

We are planning to implement a shareable database using SQLite, which is in the "public domain". Other Mozilla teams are adopting SQLite, making it a logical choice for the NSS project as well.

Note: This change will affect code inside the FIPS 140-2 defined cryptographic module boundaries. Therefore, we will need to document these changes and obtain a new FIPS validation.

Proposed Shareable Database Design Document is here.
Instructions to build the Shareable DB.
Instructions to test the Shareable DB alpha.
How LINUX Applications should initialize NSS.

Component Refactoring

NSS is made up of several components, some of which can be separated out from each other for packaging (and potentially) building purposes. For NSS 3.12 we would like to make sure the following components are separable:

nssckbi (and ideally all of ckfw). It would be nice to ship nssckbi libraries separate from base NSS.

softoken/freebl. These are our FIPS components. we want to make sure they are totally separated from the rest of NSS.

util library. Eliminate multiple copies of libutil functions that are linked in to multiple other shared libraries by making libutil a shared library.

A document on refactoring for NSS 3.11 is available here.

A document on refactoring for NSS 3.12 is available here.

Handling Multiple Initializations of NSS

NSS was designed as a library that a single application would use. The application would control how NSS was initialized and configured. Applications would initialize NSS early before any other libraries that used NSS could run. With more libraries using NSS, the chance that more than one library will try to initialize NSS, or the chance that a given library will initialize NSS before the application gets a chance to start increases.

A proposal to fix this is here.

Capture from NSS 3.12 planning

Some of these items are already documented above. Some (many) of these items will be put off to later releases.

  • IN (Planned for NSS 3.12, underway)
    • LibPKIX support
      • Most features, but see below
    • Shareable DB
      • Could add requirement for a new FIPS validation
    • Refactoring
      • Util
    • OCSP Response Cache
    • Tool Improvements
      • certutil support additional cert extensions
      • long option name support
  • Uncertain
    • Refactoring
      • nssckbi
      • softoken/freebl
    • PKCS11 modules to access foreign key stores
      • CAPI
      • Mac keychain
      • a PEM file
    • LibPKIX features
      • Non-blocking cert verification
      • CRL Fetching using CRLDP extensions
  • OUT (Not likely to be in NSS 3.12)
    • SSL enhancements
      • Server side SNI
      • Support curve based certificate selection for ECC certs.
      • Server side DHE
      • Support single use keys
      • OCSP stapling (requires OCSP Cache).
    • Tool Improvements
      • pkcs 7 cert packager
      • better diagnostics for pk12util
      • rationalized option names
      • localization of tools
    • ECC for S/MIME
    • Language bindings for scripting languages
      • Perl
      • Python
    • Phone home root certs
    • Better NSS documentation
      • tools (Unix man pages)
      • API's
      • HW security modules (PKCS #11 tools and test suites).

Future: Work that may come after the release of NSS 3.12


NSS needs to support external biometrics to unlock tokens. Today there are limitation in the PKCS#11 specifications which make it hard to replace the traditional smartcard PIN UI prompt with an external biometric operation. For example, we would like to unlock smartcards using a fingerprint reader or retina scanner.

Proposals for NSS 3.14

- Need to add more here

- Add PKCS#11 PEM Reader [402712]

- Create brand new NSS samples [490238]

- split out from softoken common components to util [753116]

Proposals for NSS 3.13

1. Switch Firefox to libpkix.

2. Switch Firefox to sqlite shared DB.

3. Implement TLS 1.2.

4. Implement OCSP stapling and OCSP response disk cache.

5. Add PKCS#11 PEM Reader [402712] moved to 3.14

6. Create brand new NSS samples [490238] moved to 3.14

7. Add localizable error messages for NSS error codes [172051] done

8. Remove function definitions from pk11pars.h [466042] moved to 3.14 and replaced bt


NSS 3.11

  • Feature Complete: 8/31/2005
  • Beta: 9/12/2005
  • RTM: 12/16/2005
  • FIPS 140-2 validation: 2006 Q3

NSS 3.11.1

  • RTM: May 8, 2006

NSS 3.11.2

  • RTM: June 23, 2006

NSS 3.11.3

  • RTM: September 10, 2006

NSS 3.11.4

  • RTM: November 17, 2006

NSS 3.11.5

  • RTM: January 18, 2007

NSS 3.11.6

  • RTM: February 14, 2007

NSS 3.11.7

  • RTM: May 28, 2007

NSS 3.11.8

  • RTM: November 08, 2007

NSS 3.11.9

  • RTM: January 31, 2008

NSS 3.12

  • RTM: June 17, 2008

NSS 3.13

  • RTM: Oct 18, 2011

NSS 3.14

  • Feature Complete: TBD
  • Beta: TBD
  • RTM: TBD