SSPI を使った安全な通信

安全な通信 (Secure Connection) はネットワークを考える上で不可欠な要素であるとともに、 プログラマーにとっては非常に大きな課題です。一言で言えば、プログラミングが非常に難しい、あるいは面倒くさいのです。

SSPI

一般に安全な通信を行うためには、認証・暗号化などの厄介な手続きが必要になります。 SSPI (Security Service Provider Interface) はさまざまなプロトコルの詳細を隠してくれます。 プログラマが暗号化などの手順を知ることなく安全な通信を行うプログラムを実装できるというわけです。


図. SSPI を利用したプログラミングモデル

上図はクライアントとサーバーそれぞれの役割を示したものです。 この流れをざっと説明します。

両者とも AcquireCredentialsHandle を呼び出し SSPI と接続します。クライアントはその後 InitializeSecurityContext を呼び出し、認証用ブロブ (データ) を生成しサーバーに送信します。

認証用ブロブを受け取ったサーバーは AcceptSecurityContext を呼び出し、 現在使われている SSP パッケージにそれを渡します。このとき、SSP パッケージによってはもう一度ブロブをクライアントに送信する必要があるかもしれませんし、 ないかもしれません。認証のためのハンドシェイク手順は SSP に依存しています。 しかし、SSPI を用いたプログラミングモデルではあまりその辺の事情には深入りしなくてもよいのです。 ハンドシェイクが終わったよ、といわれるまでクライアント側では InitializeSecurityContext を、サーバー側では AcceptSecurityContext を呼び出せばよいのです。

ハンドシェイクが終了すると、セキュリティコンテキストが手に入ります。メッセージを暗号化するには EncryptMessage をセキュリティコンテキストとともに呼び出し、 復号化には DecryptMessage を呼び出せば OK です。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説