# Network Security Services

Network Security Services (NSS) è una raccolta di librerie crittografiche concepite per supportare lo sviluppo multipiattaforma di applicazioni client e server abilitate alla sicurezza, con supporto opzionale per l'accelerazione hardware TLS/SSL sul lato server e smart card hardware sul lato client. NSS fornisce un'implementazione open-source ompleta delle librerie crittografiche che supportano Transport Layer Security (TLS) / Secure Sockets Layer (SSL) e S/MIME. Le versioni di NSS antecedenti alla versione 3.14 sono rilasciate sotto la Mozilla Public License 1.1, GNU General Public License e GNU Lesser General Public License. Dalla versione 3.14, le versioni di NSS sono rilasciate con licenza Mozilla Public License 2.0, compatibile con la GPL.

## Storia

NSS nasce dalle librerie sviluppate quando Netscape ha sviluppato il protocollo di sicurezza SSL.

### Convalida FIPS 140 e test NISCC

Il modulo crittografico del software NSS è stato convalidato cinque volte (nel 1997, 1999, 2002, 2007 e 2010) per la conformità a FIPS 140 per i livelli di sicurezza 1 e 2. NSS è stata la prima libreria crittografica open source a ricevere la convalida FIPS 140. Le librerie NSS hanno superato gli audit NISCC TLS/SSL e S/MIME (1,6 milioni di casi di test di dati di input non validi).

## Applicazioni che utilizzano NSS

AOL, Red Hat, Sun Microsystems / Oracle Corporation, Google e altre aziende e privati hanno collaborato allo sviluppo di NSS. Mozilla fornisce il repository del codice sorgente, il sistema di tracciamento dei bug e l'infrastruttura per le mailing list e i gruppi di discussione. L'azienda e le altre imprese citate utilizzano NSS in una serie di prodotti, tra cui:
* Prodotti client Mozilla, tra cui Firefox, Thunderbird, SeaMonkey e Firefox per dispositivi mobili.
* AOL Communicator e AOL Instant Messenger (AIM)
* Applicazioni client open source come Evolution, Pidgin e OpenOffice.org 2.0 e versioni successive (e i suoi discendenti).
* Prodotti server di Red Hat : Red Hat Directory Server, Red Hat Certificate System e il modulo mod nss SSL per il server web Apache.
* Prodotti server Sun di Sun Java Enterprise System, tra cui Sun Java System Web Server, Sun Java System Directory Server, Sun Java System Portal Server, Sun Java System Messaging Server e Sun Java System Application Server, versione open source di Directory Server OpenDS.
* Libreswan IKE/IPsec richiede NSS. Si tratta di un fork di Openswan che potrebbe facoltativamente utilizzare NSS.

## Architettura

NSS comprende un framework al quale gli sviluppatori e gli OEM possono contribuire con patch, come codice assembly, per ottimizzare le prestazioni sulle loro piattaforme. Mozilla ha certificato NSS 3.x su 18 piattaforme. NSS si avvale di Netscape Portable Runtime (NSPR), un'API open-source compatibile con qualsiasi piattaforma per le funzioni di sistema, progettata per facilitare lo sviluppo multipiattaforma. Come NSS, NSPR è stato utilizzato massicciamente in diversi prodotti.

### Kit di sviluppo software

In aggiunta alle librerie e API, NSS fornisce strumenti di sicurezza utili per il debug, la diagnostica, la gestione dei certificati e delle chiavi, la gestione dei moduli crittografici e altre attività di sviluppo. NSS è dotato di una documentazione estesa e in continua espansione, comprendente materiale introduttivo, riferimenti alle API, pagine man per strumenti a riga di comando e codice di esempio.
I programmatori possono utilizzare NSS come sorgente e come librerie condivise (dinamiche). Ogni versione di NSS è compatibile con le versioni precedenti, consentendo agli utenti di NSS di passare a nuove librerie condivise senza dover ricompilare o ricollegare le proprie applicazioni.

### Interoperabilità e standard aperti

NSS supporta una gamma di standard di sicurezza, tra cui i seguenti:
* TLS 1.0 (RFC 2246), 1.1 (RFC 4346), 1.2 (RFC 5246) e 1.3 (RFC 8446). Il protocollo Transport Layer Security (TLS) dell'IETF sostituisce SSL v3.0, pur rimanendo retrocompatibile con le implementazioni SSL v3.
* Certificato SSL 3.0. Il protocollo Secure Sockets Layer (SSL) consente l'autenticazione reciproca tra un client e un server e la creazione di una connessione autenticata e crittografata.
* DTLS 1.0 (RFC 4347) e 1.2 (RFC 6347).
* DTLS-SRTP (RFC 5764).
* I seguenti standard PKCS:
** Codice PKCS n. 1. Standard RSA che regola l'implementazione della crittografia a chiave pubblica basata sull'algoritmo RSA.
** Codice PKCS n. 3. Standard RSA che regola l'implementazione dell'accordo sulle chiavi Diffie-Hellman.
** Codice PKCS n. 5. Standard RSA che regola la crittografia basata su password, ad esempio per crittografare chiavi private a scopo di archiviazione.
** Codice PKCS n. 7. Standard RSA che regola l'applicazione della crittografia ai dati, ad esempio firme digitali e buste digitali.
** Codice PKCS n. 8. Standard RSA che regola l'archiviazione e la crittografia delle chiavi private.
** Codice PKCS n. 9. Standard RSA che regola i tipi di attributi selezionati, inclusi quelli utilizzati con PKCS #7, PKCS #8 e PKCS #10.
** Codice PKCS n. 10. Standard RSA che regola la sintassi per le richieste di certificati.
** Codice PKCS n. 11. Standard RSA che regola la comunicazione con token crittografici (come acceleratori hardware e smart card) e consente l'indipendenza delle applicazioni da algoritmi e implementazioni specifici.
** Codice PKCS n. 12. Standard RSA che regola il formato utilizzato per archiviare o trasportare chiavi private, certificati e altro materiale segreto.
* Sintassi dei messaggi crittografici, utilizzata in S/MIME ( RFC 2311 e RFC 2633 ). Specifica dei messaggi IETF (basata sul diffuso standard MIME di Internet) che fornisce un modo coerente per inviare e ricevere dati MIME firmati e crittografati.
* Versione 3.5.5.1.1.1 . Standard ITU che regola il formato dei certificati utilizzati per l'autenticazione nella crittografia a chiave pubblica.
* OCSP (RFC 2560). Il protocollo OCSP (Online Certificate Status Protocol) regola la conferma in tempo reale della validità del certificato.
* Certificato PKIX e profilo CRL (RFC 3280). La prima parte dello standard in quattro parti in fase di sviluppo da parte del gruppo di lavoro Public-Key Infrastructure (X.509) dell'IETF (noto come PKIX) per un'infrastruttura a chiave pubblica per Internet.
* RSA, DSA, ECDSA, Diffie–Hellman, EC Diffie–Hellman, AES, Triple DES, Camellia, IDEA, SEED, DES, RC2, RC4, SHA-1, SHA-256, SHA-384, SHA-512, MD2, MD5, HMAC: algoritmi crittografici comuni utilizzati nella crittografia a chiave pubblica e a chiave simmetrica.
* Generatore di numeri pseudo-casuali FIPS 186-2.

### Supporto hardware

NSS supporta l'interfaccia PKCS #11 per l'accesso all'hardware crittografico come acceleratori TLS/SSL, moduli di sicurezza hardware e smart card. Poiché la maggior parte dei fornitori di hardware come SafeNet, AEP e Thales supporta questa interfaccia, le applicazioni abilitate all'NSS possono lavorare con hardware crittografico ad alta velocità e utilizzare chiavi private residenti su varie smart card, se i fornitori forniscono il middleware necessario. La versione NSS 3.13 e successive supportano i nuovi set d'istruzioni Streaming SIMD Extensions di Intel (AES-NI).

### Supporto Java

Network Security Services for Java (JSS) è costituito da un'interfaccia Java per NSS. Supporta la maggior parte degli standard di sicurezza e delle tecnologie di crittografia supportate da NSS. JSS fornisce anche un'interfaccia Java pura per i tipi ASN.1 e la codifica BER / DER.