DecryptMessage (全般) 関数
DecryptMessage (General) 関数は、メッセージの暗号化を解除します。 一部のパッケージでは、メッセージを暗号化および暗号化解除するのではなく、整合性ハッシュを実行してチェックします。
ダイジェスト セキュリティ サポート プロバイダー (SSP) は、SASL メカニズムとしてのみ、クライアントとサーバーの間で交換されるメッセージの暗号化と暗号化解除の機密性を提供します。
この関数は、Schannel SSP と共に使用して、接続属性の再ネゴシエーション (やり直し) または接続のシャットダウンのために、メッセージ送信者からの要求を通知します。
注意
EncryptMessage (General) と DecryptMessage (General) は、1 つのスレッドが暗号化されていて、もう一方のスレッドが暗号化を解除している場合、1 つの セキュリティ サポート プロバイダー インターフェイス (SSPI) コンテキストで 2 つの異なるスレッドから同時に呼び出すことができます。 複数のスレッドが暗号化されている場合、または複数のスレッドが暗号化を解除している場合、各スレッドは一意のコンテキストを取得する必要があります。
特定の SSP でこの関数を使用する方法については、次のトピックを参照してください。
トピック | 説明 |
---|---|
DecryptMessage (ダイジェスト) | ダイジェストを使用してメッセージを復号化します。 |
DecryptMessage (Kerberos) | Kerberos を使用してメッセージを復号化します。 |
DecryptMessage (ネゴシエート) | ネゴシエートを使用してメッセージを復号化します。 |
DecryptMessage (NTLM) | NTLM を使用してメッセージの暗号化を解除します。 |
DecryptMessage (Schannel) | Schannel を使用してメッセージを復号化します。 |
構文
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
パラメーター
-
phContext [in]
-
メッセージの暗号化を解除するために使用される セキュリティ コンテキスト へのハンドル。
-
pMessage [in, out]
-
SecBufferDesc 構造体へのポインター。 入力時に、構造体は 1 つ以上 の SecBuffer 構造体を 参照します。 これらのうちの 1 つは、SECBUFFER_DATA型である場合があります。 そのバッファーには、暗号化されたメッセージが含まれています。 暗号化されたメッセージは暗号化解除され、バッファーの元の内容が上書きされます。
Digest SSP を使用する場合、入力時に構造体は 1 つ以上の SecBuffer 構造体を 参照します。 これらの 1 つは、SECBUFFER_DATAまたはSECBUFFER_STREAMの種類で、暗号化されたメッセージが含まれている必要があります。
接続指向ではないコンテキストで Schannel SSP を使用する場合は、入力時に、構造体に 4 つの SecBuffer 構造体が含まれている必要があります。 1 つのバッファーがSECBUFFER_DATA型であり、暗号化されたメッセージが含まれている必要があります。このバッファーには暗号化が解除されます。 残りのバッファーは出力に使用され、SECBUFFER_EMPTY型である必要があります。 接続指向コンテキストの場合は、非接続指向コンテキストで説明されているように、SECBUFFER_DATA型バッファーを指定する必要があります。 さらに、セキュリティ トークンを含む 2 つ目のSECBUFFER_TOKEN型バッファーも指定する必要があります。
-
MessageSeqNo [in]
-
トランスポート アプリケーションで予期されるシーケンス番号 (存在する場合)。 トランスポート アプリケーションでシーケンス番号が保持されない場合は、このパラメーターを 0 に設定する必要があります。
Digest SSP を使用する場合、このパラメーターは 0 に設定する必要があります。 ダイジェスト SSP は、シーケンスの番号付けを内部的に管理します。
Schannel SSP を使用する場合は、このパラメーターを 0 に設定する必要があります。 Schannel SSP はシーケンス番号を使用しません。
-
pfQOP [out]
-
保護の品質を示すパッケージ固有のフラグを受け取る ULONG 型の変数へのポインター。
Schannel SSP を使用する場合、このパラメーターは使用されず、 NULL に設定する必要があります。
このパラメーターには、次のいずれかのフラグを指定できます。
値 説明 SECQOP_WRAP_NO_ENCRYPT メッセージは暗号化されませんでしたが、ヘッダーまたはトレーラーが生成されました。
メモ: KERB_WRAP_NO_ENCRYPTには、同じ値と同じ意味があります。- SIGN_ONLY
Digest SSP を使用する場合は、 セキュリティ コンテキスト が 署名 のみを検証するように設定されている場合に、このフラグを使用します。 詳細については、「 保護の品質」を参照してください。
戻り値
関数がメッセージが正しいシーケンスで受信されたことを確認すると、関数は SEC_E_OKを返します。
関数がメッセージの暗号化解除に失敗すると、次のいずれかのエラー コードが返されます。
リターン コード | 説明 |
---|---|
|
メッセージ バッファーが小さすぎます。 ダイジェスト SSP と共に使用されます。 |
|
セキュリティ コンテキストに対して選択された暗号はサポートされていません。 ダイジェスト SSP と共に使用されます。 |
|
入力バッファー内のデータが不完全です。 アプリケーションでは、サーバーからさらに多くのデータを読み取り、 DecryptMessage (General) をもう一度呼び出す必要があります。 |
|
無効なコンテキスト ハンドルが phContext パラメーターで指定されました。 ダイジェストおよび Schannel SSP と共に使用されます。 |
|
バッファーの型が正しくないか、SECBUFFER_DATA型のバッファーが見つかりませんでした。 Schannel SSP と共に使用されます。 |
|
メッセージが変更されました。 ダイジェストおよび Schannel SSP と共に使用されます。 |
|
メッセージが正しい順序で受信されませんでした。 |
|
機密性も 整合性 も 、セキュリティ コンテキストではサポートされていません。 ダイジェスト SSP と共に使用されます。 |
|
メッセージ送信者は接続の使用を終了し、シャットダウンを開始しました。 シャットダウンの開始または認識の詳細については、「 Schannel 接続のシャットダウン」を参照してください。 Schannel SSP と共に使用されます。 |
|
リモート パーティには新しいハンドシェイク シーケンスが必要です。または、アプリケーションがシャットダウンを開始したばかりです。 ネゴシエーション ループに戻り、空の入力バッファーを渡して AcceptSecurityContext (General) または InitializeSecurityContext (General) を呼び出します。 関数が SEC_BUFFER_EXTRA 型のバッファーを返す場合は、入力バッファーとして AcceptSecurityContext (General) 関数に渡す必要があります。 Schannel SSP と共に使用されます。 再ネゴシエーションは、Schannel カーネル モードではサポートされていません。 呼び出し元は、この戻り値を無視するか、接続をシャットダウンする必要があります。 値が無視された場合、結果としてクライアントまたはサーバーが接続をシャットダウンする可能性があります。 |
解説
Schannel SSP を使用すると、メッセージ送信者が接続をシャットダウンしたときに、 DecryptMessage (General) 関数はSEC_I_CONTEXT_EXPIREDを返します。 シャットダウンの開始または認識の詳細については、「 Schannel 接続のシャットダウン」を参照してください。
Schannel SSP を使用すると、メッセージ送信者が接続 (セキュリティ コンテキスト) を再ネゴシエーションする場合に、DecryptMessage (General) はSEC_I_RENEGOTIATEを返します。 アプリケーションは、AcceptSecurityContext (General) (サーバー側) または InitializeSecurityContext (General) (クライアント側) を呼び出し、空の入力バッファーを渡すことによって、要求された再ネゴシエーションを処理します。 この最初の呼び出しで値が返されたら、アプリケーションが新しい接続を作成しているかのように続行します。 詳細については、「[Schannel セキュリティ コンテキストの作成](creating-an-schannel-security-context.md)」を参照してください。
GSSAPI との相互運用の詳細については、「 SSPI/Kerberos と GSSAPI の相互運用性」を参照してください。
必要条件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー |
Windows Server 2003 (デスクトップ アプリのみ) |
ヘッダー |
|
ライブラリ |
|
[DLL] |
|
関連項目