Security Support Provider Interface (SSPI)とは
Security Support Provider Interface(SSPI)は、
Microsoft Windows環境において、セキュリティ機能を提供するAPIです。これは、様々なセキュリティプロバイダー(SSP)と連携し、認証、暗号化、
アクセス制御など、システム全体のセキュリティを支える重要な役割を担っています。
SSPIは、Windowsにおけるセキュリティ機能の基盤であり、さまざまなアプリケーションがセキュアな通信や認証を実現するために利用します。具体的には、ダイナミックリンク
ライブラリ(DLL)として実装されたセキュリティプロバイダーを、共通のインターフェースを通して利用できるようにしています。
Security Support Provider (SSP)
Windowsでは、以下のような多様なセキュリティプロバイダーが提供されています。
NTLMSSP (msv1_0.dll)
Windows NT 3.51から存在する古い認証プロトコルで、Windows 2000以前のクライアント-サーバ環境におけるNTLMチャレンジレスポンス認証や、非ドメイン環境でのSMB/CIFS認証に用いられます。
Kerberos (kerberos.dll)
Windows 2000から導入された、ドメイン環境での推奨認証プロトコルです。相互認証をサポートし、Windows VistaからはAES暗号化に対応しています。
Negotiate (secur32.dll)
Kerberos認証とNTLM認証を自動的に選択するプロトコルで、
シングルサインオン(統合Windows認証)を実現します。Windows 7以降では、クライアントとサーバーの両方で利用できるカスタムSSPを認証に利用可能にするNEGOExtsが導入されました。
Secure Channel (SChannel) (schannel.dll)
Windows 2000から導入された、TLS/SSL暗号化機能を提供するプロバイダーです。Windows Vista以降では、AES暗号化と楕円曲線暗号に対応しています。
PCTとMicrosoft TLS/SSL実装
TLS/SSLにおける
公開鍵暗号化機能を提供しますが、PCTは廃止されています。Windows 7以降ではTLS 1.2に対応しています。
Digest SSP (wdigest.dll)
HTTP認証およびSASL認証を提供します。
Credential (CredSSP) (credssp.dll)
リモートデスクトップサービスのための認証機能を提供します。Windows XP SP3から利用可能です。
Distributed Password Authentication (DPA) (msapsspc.dll)
公開鍵証明書による認証機能を提供します。
Public Key Cryptography User-to-User (PKU2U) (pku2u.dll)
ドメイン外のシステム間におけるピアツーピア認証を可能にします。Windows 7から導入されました。
これらのSSPは、それぞれ異なる認証メカニズムとセキュリティ機能を提供し、SSPIを通じてアプリケーションから利用されます。
GSSAPIとの比較
SSPIは、GSSAPI(Generic Security Services Application Programming Interface)のMicrosoftによる実装であり、Windows環境に特化した拡張が加えられています。SSPIは、NTLMSSPを起源とし、Windows 2000で
ケルベロス認証が追加されました。
SSPIにおける
ケルベロス認証で用いられる
トークンはGSSAPIのそれとほぼ互換性があり、WindowsのSSPIクライアントは、Windows以外のGSSAPIクライアントとの相互認証が可能です。しかし、アクセス
トークンの「impersonation」において、GSSAPIとSSPIの間には大きな違いが存在します。
GSSAPIモデルでは、サービスアカウントの特権を上昇させることができません。一方、従来のSSPIモデルでは、クライアントが「完全な」特権を持っている場合、サービスアカウントがその特権を継承してしまう可能性があり、セキュリティ上の問題がありました。この問題は、Windows Vista以降では解消されています。
SSPIは、Windowsのセキュリティ基盤として重要な役割を担っており、さまざまな認証プロトコルや暗号化技術をアプリケーションに提供することで、安全なシステム環境の構築を支援します。
参考情報
SSPI(Windows)
SSPI Information and Win32 samples