# Security Support Provider Interface

Il Security Support Provider Interface (SSPI) è un componente delle API di Windows che esegue operazioni relative alla sicurezza (come, ad esempio, l'autenticazione).
SSPI offre un'interfaccia comune a diversi Security Support Provider (SSP): un Security Support Provider è una libreria a collegamento dinamico (DLL) che rende uno o più pacchetti di sicurezza disponibili alle applicazioni.

## Providers

Windows include i seguenti SSP:
* NTLMSSP (msv1_0.dll) – Introdotto in Windows NT 3.51. Fornisce l'autenticazione di verifica/risposta NTLM per i domini Windows precedenti a Windows 2000 e per i sistemi che non fanno parte di un dominio.
* Kerberos (kerberos.dll) – Introdotto in Windows 2000 e aggiornato in Windows Vista per supportare la crittografia AES. Esegue l'autenticazione per i domini Windows in Windows 2000 e versioni successive.
* NegotiateSSP (secur32.dll) – Introdotto in Windows 2000. Fornisce funzionalità di accesso singolo, a volte denominata autenticazione integrata di Windows (soprattutto nel contesto di IIS). Prima di Windows 7, è stato provato Kerberos per poi ripiegare su NTLM. In Windows 7 e versioni successive viene introdotto NEGOExts, che negozia l'uso di SSP personalizzati installati e supportati sia sul client e sia sul server per l'autenticazione.
* Secure Channel (schannel.dll) – Introdotto in Windows 2000 e aggiornato in Windows Vista per supportare una crittografia AES più avanzata e ECC Questo provider utilizza i record SSL/TLS per crittografare i payload di dati.
* TLS/SSL – SSP di crittografia a chiave pubblica che fornisce crittografia e comunicazione sicura per l'autenticazione di client e server su Internet. Aggiornato in Windows 7 per supportare TLS 1.2.
* Digest SSP (wdigest.dll) – Introdotto in Windows XP. Fornisce l'autenticazione HTTP e SASL basata su challenge/response tra sistemi Windows e non Windows in cui Kerberos non è disponibile.
* CredSSP (credssp.dll) – Introdotto in Windows Vista e disponibile su Windows XP SP3. Fornisce Single Sign-On e autenticazione a livello di rete per servizi di desktop remoto.
* Autenticazione con password distribuita (DPA, msapsspc.dll) – Introdotta in Windows 2000. Fornisce l'autenticazione Internet tramite certificati digitali.
* Crittografia a chiave pubblica da utente a utente (PKU2U, pku2u.dll) – Introdotto in Windows 7. Fornisce l'autenticazione peer-to-peer utilizzando certificati digitali tra sistemi che non fanno parte di un dominio.

## Confronto

SSPI è una variante proprietaria di Generic Security Services Application Program Interface (GSSAPI) con estensioni e tipi di dati caratteristici di Windows. Viene fornita con Windows NT 3.51 e Windows 95 con NTLMSSP. Per Windows 2000 è stata aggiunta un'implementazione di Kerberos 5, utilizzando formati di token conformi allo standard di protocollo ufficiale RFC 1964 (il meccanismo Kerberos 5 GSSAPI) e fornendo interoperabilità a livello di connessione fisica con le implementazioni di Kerberos 5 di altri fornitori.
I token generati e accettati dalle SSPI sono per lo più compatibili con le applicazioni basate su GSS-API, quindi un client SSPI su Windows potrebbe essere in grado di autenticarsi con un server GSS-API su Unix, a seconda delle circostanze specifiche.
Un difetto significativo di SSPI è la sua mancanza di channel binding, che rende impossibile una interoperabilità GSSAPI.
Un'altra differenza fondamentale tra la GSSAPI definita da IETF e la SSPI di Microsoft è il concetto di "impersonificazione". In tale modello, un server può funzionare con tutti i privilegi del client autenticato, in modo che il sistema operativo esegua tutte le verifiche di controllo degli accessi, ad esempio quando si aprono nuovi file. Il fatto che si tratti di più o meno privilegi rispetto a quello dell'account di servizio originale dipende interamente dal client. Nel modello tradizionale (GSSAPI), quando un server viene eseguito con un account di servizio, non può elevare i propri privilegi, nonché deve eseguire il controllo dell'accesso in modo specifico del client e dell'applicazione. Le implicazioni negative sulla sicurezza del concetto di impersonificazione sono prevenute in Windows Vista limitando l'impersonificazione a determinati account di servizio selezionati. L'impersonificazione può essere implementata in un modello Unix/Linux usando seteuid o chiamate di sistema correlate. Sebbene ciò implichi che un processo senza privilegi non può elevare i propri privilegi, significa anche che per sfruttare l'impersonificazione il processo deve essere eseguito nel contesto dell'account utente root.